使用GridSearchCV进行多指标评估

10

我正在尝试在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)

我的错误出现在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.

此外,如果你能解释多度量评估或者给我推荐一些能够解释这个问题的人,我将不胜感激!
谢谢。


请同时发布您看到的错误。 - Chris
1个回答

17

f1 是一个用于二分类的度量标准。对于多类别分类,您需要使用基于不同聚合的平均 f1 值。您可以在 Sklearn 的这里找到可用的评分列表。

试试吧!

scoring = ['accuracy','f1_macro']

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

2
非常感谢!那个起作用了。现在,我正在尝试理解:我的knn分类器现在尝试优化超参数,以准确度和f1得分作为总体指标? - Tanner Clark
7
不,它只会优化“refit”中存在的得分器。因此,在上述代码中,“accuracy”正在被优化。“f1”仅被监视。 - Vivek Kumar
如果出现像我一样的类型错误,那是因为refit默认为True,所以如果你使用多个评分器,你要么将其声明为False,要么使用单个评分器(可以是一个值或一个评分函数),但你必须使用关键字。 - petsol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接