使用Gridsearch获得最佳F1分数

我目前正在使用GridSearchCV来寻找最佳的超参数以获得最高的F1分数。

from sklearn.metrics import f1_score, make_scorerf1 = 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_属性将在同一个字典/框架中显示两个分数。你可能还想加入一个更连续的评分标准,比如对数损失。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注