为啥在 Sklearn 的不同指标上有两种不同的结果
Posted
技术标签:
【中文标题】为啥在 Sklearn 的不同指标上有两种不同的结果【英文标题】:Why there are two different results on different metrics in Sklearn为什么在 Sklearn 的不同指标上有两种不同的结果 【发布时间】:2016-10-24 08:35:02 【问题描述】:当我通过 metrics.precision_score、metrics.recall_score、metrics.f1 score 分别使用 metrics.classification_report 中的(recall、precision、fi-score)和相同的 metriceses 时,它们之间有什么区别。
请有人看一下这段代码并解释一下区别
from sklearn.svm import LinearSVC
clf_svm_linear = LinearSVC(C=20.0)
clf_svm_linear.fit(X_train, y_train)
y_pred = clf_svm_linear.predict(X_test)
print ' Results on Validation data'
print metrics.classification_report(y_test, y_pred, target_names=['No Diabetes', 'Diabetes'])
print "==================================================================="
print "The accuracy on validation dataset of Linear SVM: \t", metrics.accuracy_score(y_test, y_pred)
print "Precision on validation dataset of Linear SVM: \t", metrics.precision_score(y_test, y_pred)
print "Recall on validation dataset of Linear SVM : \t", metrics.recall_score(y_test, y_pred)
print "F1 score on validation dataset of Linear SVM: \t", metrics.f1_score(y_test, y_pred)
当运行上面的代码时,我得到了如图所示的结果 为什么当我独立打印他们的分数时,报告上的平均/总分与精度、召回率和 f1 分数不匹配。
【问题讨论】:
所有metrics.something_score()
方法中都有一个可选参数。设置average=macro
以获得班级分数的未加权平均值。
【参考方案1】:
precision_score 不是平均值,它是其中一类是正类(在您的情况下是糖尿病)的精确度,这就是为什么您对精确度的调用对应于糖尿病的精确度总结,同样地 - 这些家伙的回忆和 f1。对不对称指标取平均值使其平衡,它与“常规”指标不同。
为了平均,你会打电话
print 0.5 * (metrics.precision_score(y_test, y_pred, pos_label='No Diabetes') +
metrics.precision_score(y_test, y_pred, pos_label='Diabetes'))
【讨论】:
当我报告结果时,我应该考虑一个“常规”指标。 frommetrics.classification_report 这取决于您要报告什么。每个指标衡量一些有意义的东西,从你的问题的角度报告什么是合理的,这是一个完全不同的故事。【参考方案2】:请参阅documentation on these metrics。
【讨论】:
以上是关于为啥在 Sklearn 的不同指标上有两种不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 python 中获取 sklearn 中的***谓词的结果不同?
为啥 `sklearn` 和 `statsmodels` 的 OLS 回归实现给出不同的 R^2?
为啥 CPU(使用 SKLearn)和 GPU(使用 RAPID)上的 RandomForestClassifier 获得不同的分数,非常不同?