我目前正在运行GridSearchCV来查找f1分数的最佳超参数。
from sklearn.metrics import f1_score, make_scorer
f1 = make_scorer(f1_score, average='micro')
grid = {'n_neighbors':np.arange(1,16),
'p':np.arange(1,3),
'weights':['uniform','distance'],
'algorithm':['auto']
}
knn = KNeighborsClassifier()
knn_cv = GridSearchCV(knn,grid,cv=3, verbose = 3, scoring= f1)
knn_cv.fit(X_train_res,y_train_res)
print("Hyperparameters:",knn_cv.best_params_)
print("Train Score:",knn_cv.best_score_)
result_train["GridSearch-Best-Train"] = knn_cv.best_score_虽然我注意到在使用f1作为评分后,最好的超参数和最好的准确性保持不变,但我是否错误地使用了它?
发布于 2021-02-12 23:13:17
这并不令人惊讶,特别是如果你的类不是太不平衡的话。我看不出你的代码有什么问题。
要添加一些支持证据,证明事情正在按预期工作,请查看两个评分者的knn_cv.cv_results_ (如果将该字典转换为pandas数据帧,可能最容易进行检查)。实际上,您可以指定多个记分器,以便cv_results_属性将显示同一字典/帧中的两个分数。你可能想要抛出一个更连续的分数,比如原木损失。
https://stackoverflow.com/questions/66161265
复制相似问题