用于多类分类的 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 中的 OneVsRestClassifier 将自定义的二元分类调整为多类分类