使用 Gridsearch 获得最佳 f1 分数

Getting best f1 score using Gridsearch

我目前正在 运行 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 作为评分后最佳超参数和最佳准确度保持不变,但我使用它有误吗?

这不足为奇,特别是如果您的 类 不是太不平衡的话。而且我没有立即发现您的代码有任何问题。

要添加一些支持证据表明事情按预期进行,请查看两个记分器的 knn_cv.cv_results_(如果将该字典转换为 pandas 数据框,可能最容易检查)。事实上,您可以指定多个得分手,这样 cv_results_ 属性将在同一个 dictionary/frame 中显示两个得分。您可能想要输入更连续的分数,例如对数损失。