使用 GridSearchCV 进行超参数调整
Posted
技术标签:
【中文标题】使用 GridSearchCV 进行超参数调整【英文标题】:hyperparameter tuning using 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)
【问题讨论】:
【参考方案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?。我想知道这里怎么碰巧问了几个问题,得到了几个答案,却没有一个回答。以上是关于使用 GridSearchCV 进行超参数调整的主要内容,如果未能解决你的问题,请参考以下文章
实现 GridSearchCV 和 Pipelines 以执行 KNN 算法的超参数调整
ValueError 在 Scikit 中找到最佳超参数时使用 GridSearchCV 学习 LogisticRegression