【问题标题】:hyperparameter tuning using GridSearchCV使用 GridSearchCV 进行超参数调整
【发布时间】:2021-08-11 13:37:37
【问题描述】:

我有一个 K 最近邻分类器,您可以在下面看到。据我了解,GridSearchCV 正在使用 1-20 之间的不同 k 值测试模型。当我做y_pred=knn_grid_cv.predict(x_test) 时,我得到了一堆 y 预测,但是使用什么值 k(1-20 之间)来获得这些 y 预测?它会是 GridSearchCV 中得分最高的 k 值吗?

x=football_df["Pace"].values.reshape(-1, 1)
print(x)
y=football_df["Position"].values.reshape(-1, 1)  

x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.4,random_state=42)

param_grid={"n_neighbors":np.arange(1,20)}  
knn = KNeighborsClassifier()
knn_grid_cv = GridSearchCV(knn, param_grid, cv=5)
knn_grid_cv.fit(x_train,y_train)
y_pred=knn_grid_cv.predict(x_test)
print(y_pred)

【问题讨论】:

    标签: python machine-learning scikit-learn grid-search hyperparameters


    【解决方案1】:

    你是对的。您定义param_grid 的方式将测试20 个不同模型的性能,每个模型都有不同的n_neighbors 值。最佳模型被选为具有最高平均交叉验证分数的模型。对于KNeighborsClassifier,使用的默认分数指标是平均准确率。

    在您的情况下,这将是所有五个拆分中平均准确度最高的模型。

    要查看选择了 n_neighbors 的哪个值,只需执行以下操作:

    # Option 1: print the parameters of the best classifier
    print(knn_grid_cv.best_estimator_.get_params())
    
    # Option 2: print results of all model combinations
    import pandas as pd
    res = pd.DataFrame(knn_grid_cv.cv_results_)
    print(res)
    

    【讨论】:

    • 感谢您解决这个问题。奇怪的是,9 已被确定为最佳 n_neighbors。但是,当我在没有 GridsearchCV 且 K =3 的情况下做一个单独的 KNN 模型(相同的 train_test_split)时,我的 y_pred 得到了更好的结果
    • 这可能是因为您在没有交叉验证的情况下测试性能。这也可能发生,因为您在声明 knn 或将数据拆分为训练和测试集时没有设置 random_state。基于邻居的模型的一个大问题是它们非常依赖训练数据,并且在从一个数据集切换到另一个数据集时往往会发生巨大变化。
    • @atyahoo 请参阅What should I do when someone answers my question?。我想知道这里怎么碰巧问了几个问题,得到了几个答案,却没有一个回答。
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2017-11-28
    • 2019-06-02
    • 2021-03-29
    • 2018-12-07
    • 2016-05-11
    • 2020-12-29
    相关资源
    最近更新 更多