Sklearn fbeta_score默认平均参数不适用于多类目标变量

Posted

技术标签:

【中文标题】Sklearn fbeta_score默认平均参数不适用于多类目标变量【英文标题】:Sklearn fbeta_score default average parameter not working with multiclass target variable 【发布时间】:2021-06-27 03:10:34 【问题描述】:

我想使用 f2-score 来评估我的模型,但是出现了错误。

from sklearn.metrics import fbeta_score, make_scorer
ftwo_scorer = make_scorer(fbeta_score, beta=2) # beta=2

你可以看到,我使用fbeta_scoremake_scorer 来定义我的指标。但是当我将此指标应用于fit 时,出现了错误。

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
svc = SVC()
parameters =  'C':[100,1000]
             #'gamma':[1e-5,1e-4,1e-3]
clf = GridSearchCV(svc, parameters, scoring=ftwo_scorer,cv=5)
clf.fit(Xtrain, Ytrain,)
Yval_pred = clf.predict(Xval)

错误信息:

ValueError                                Traceback (most recent call last)
<ipython-input-600-ebf059724dd4> in <module>
      4               #'gamma':[1e-5,1e-4,1e-3]
      5 clf = GridSearchCV(svc, parameters, scoring=ftwo_scorer,cv=5)
----> 6 clf.fit(Xtrain, Ytrain)
      7 Yval_pred = clf.predict(Xval)
……
ValueError: Target is multiclass but average='binary'. Please choose
another average setting, one of [None, 'micro', 'macro', 'weighted'].

你能帮帮我吗?

【问题讨论】:

【参考方案1】:

发生这种情况是因为您的目标变量Y 可能有两个以上的类。默认情况下fbeta_score 将平均值设置为二进制目标。

因此,由于错误建议将这些选项 [None, 'micro', 'macro', 'weighted'] 的不同 average 值传递给 make_scorer 函数,即

from sklearn.metrics import fbeta_score, make_scorer


ftwo_scorer = make_scorer(fbeta_score, beta=2, average='weighted')

【讨论】:

以上是关于Sklearn fbeta_score默认平均参数不适用于多类目标变量的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中回归器性能评估方法

sklearn.preprocessing.StandardScaler数据标准化

Sklearn:到每个集群的质心的平均距离

如何计算 Sklearn 中点到质心的平均距离的平均值? [复制]

sklearn 度量单位的准确性,平均绝对误差,回归问题的均方误差?

在sklearn中平均的SVM模型