用于多类分类的 sklearn 指标

Posted

技术标签:

【中文标题】用于多类分类的 sklearn 指标【英文标题】:sklearn metrics for multiclass classification 【发布时间】:2018-02-04 00:44:41 【问题描述】:

我已经使用 sklearn 进行了 GaussianNB 分类。我尝试使用以下代码计算指标:

print accuracy_score(y_test, y_pred)
print precision_score(y_test, y_pred)

准确度得分正常,但精确度得分计算显示错误:

ValueError:目标是多类但平均值='二进制'。请选择其他平均设置。

由于目标是多类的,我可以得到精度、召回等指标分数吗?

【问题讨论】:

【参考方案1】:

函数调用precision_score(y_test, y_pred)等价于precision_score(y_test, y_pred, pos_label=1, average='binary')。 文档 (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html) 告诉我们:

'二进制':

仅报告由 pos_label 指定的类的结果。这仅适用于目标 (y_true,pred) 是二进制的。

所以问题是您的标签不是二进制的,而可能是一次性编码的。幸运的是,还有其他选项可以处理您的数据:

precision_score(y_test, y_pred, average=None) 将返回每个类的精度分数,而

precision_score(y_test, y_pred, average='micro') 将返回总比率 tp/(tp + fp)

如果您选择除binary 之外的另一个average 选项,pos_label 参数将被忽略。

【讨论】:

很好的答案,sklearn 文档缺少的一件事是在平均值 = 无时指定类的顺序。没有什么是不可能计算出来的,但如果能把它也包括进来就好了。 @TommasoGuerrini,完全同意。我最终进入了这个页面,因为我无法弄清楚 sklearn 输出精度分数的顺序...... @ml4294 感谢您的澄清 我想知道我的question 是否属于这种情况?

以上是关于用于多类分类的 sklearn 指标的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.metrics.roc_curve 用于多类分类

sklearn 多类 svm 函数

用于文本分类的 SkLearn 模型

使用 sklearn 中的 OneVsRestClassifier 将自定义的二元分类调整为多类分类

多类文本分类期间 xgboost sklearn 中的 feature_names 不匹配

sklearn 多类 roc auc 分数