在 GridSearchCV 中使用多指标评估

Tan*_*ark 3 python scikit-learn gridsearchcv

我试图在 GridSearchCV 中使用多个指标。我的项目需要多个指标,包括“准确性”和“f1 分数”。然而,在遵循 sklearn 模型和在线帖子之后,我似乎无法让我的工作。这是我的代码:

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import f1_score
clf = KNeighborsClassifier()

param_grid = {'n_neighbors': range(1,30), 'algorithm': ['auto','ball_tree','kd_tree', 'brute'], 'weights': ['uniform', 'distance'],'p': range(1,5)}

#Metrics for Evualation:
met_grid= ['accuracy', 'f1'] #The metric codes from sklearn

custom_knn = GridSearchCV(clf, param_grid, scoring=met_grid, refit='accuracy', return_train_score=True)

custom_knn.fit(X_train, y_train)
y_pred = custom_knn.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

我的错误发生在custom_knn.fit(X_train,y_train). 此外,如果您注释掉scoring=met_grid, refit='accuracy', return_train_score=True,它就可以工作。这是我的错误:

ValueError: Target is multiclass but average='binary'. Please choose another average setting.
Run Code Online (Sandbox Code Playgroud)

此外,如果您能解释多个指标评估或将我推荐给可以的人,那将不胜感激!
谢谢

Ven*_*lam 10

f1是一个二元分类度量。对于多类分类,您必须使用averaged f1基于不同的聚合。您可以在此处找到 Sklearn 中可用的详尽评分列表。

尝试这个!

scoring = ['accuracy','f1_macro']

custom_knn = GridSearchCV(clf, param_grid, scoring=scoring, 
                          refit='accuracy', return_train_score=True,cv =3)
Run Code Online (Sandbox Code Playgroud)

  • @TannerClark 不,它只会优化“改装”中存在的得分手。所以在上面的代码中,正在优化 `accuracy`。`f1` 只是被监控。 (3认同)
  • 非常感谢你!那行得通。现在,尝试理解:我的 knn 分类器现在正在尝试以准确度和 f1 分数作为总体指标来优化超参数? (2认同)