为啥在 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 的不同指标上有两种不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn 指标值与 Keras 值非常不同

为啥以两种不同方式应用随机森林分类器的特征选择结果不同

为啥在 python 中获取 sklearn 中的***谓词的结果不同?

为啥我自己的逻辑回归实现与 sklearn 不同?

为啥 `sklearn` 和 `statsmodels` 的 OLS 回归实现给出不同的 R^2?

为啥 CPU(使用 SKLearn)和 GPU(使用 RAPID)上的 RandomForestClassifier 获得不同的分数,非常不同?