为什么在 Sklearn 中不同的指标有两个不同的结果
Why there are two different results on different metrics in Sklearn
metrics.classification_report 中的(recall、precison、fi-score)和我分别使用 metrics.precision_score、metrics.recall_score、metrics.f1 score 时相同的指标有什么区别.
有人可以看看这段代码并解释其中的区别吗
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)
当运行上面的代码我得到了如图所示的结果
当我独立打印他们的分数时,为什么报告上的 avg/total 与精度、召回率和 f1 分数不匹配。
precision_score 不是平均值,它是精确度,其中 类 之一是阳性(在您的情况下是糖尿病),这这就是为什么您对精确度的调用对应于摘要中糖尿病的精确度,以及类似地 - 这些人的召回率和 f1。取不对称指标的平均值使其平衡,它与 "regular" 指标不同。
为了得到平均值,你会调用
print 0.5 * (metrics.precision_score(y_test, y_pred, pos_label='No Diabetes') +
metrics.precision_score(y_test, y_pred, pos_label='Diabetes'))
metrics.classification_report 中的(recall、precison、fi-score)和我分别使用 metrics.precision_score、metrics.recall_score、metrics.f1 score 时相同的指标有什么区别.
有人可以看看这段代码并解释其中的区别吗
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)
当运行上面的代码我得到了如图所示的结果
当我独立打印他们的分数时,为什么报告上的 avg/total 与精度、召回率和 f1 分数不匹配。
precision_score 不是平均值,它是精确度,其中 类 之一是阳性(在您的情况下是糖尿病),这这就是为什么您对精确度的调用对应于摘要中糖尿病的精确度,以及类似地 - 这些人的召回率和 f1。取不对称指标的平均值使其平衡,它与 "regular" 指标不同。
为了得到平均值,你会调用
print 0.5 * (metrics.precision_score(y_test, y_pred, pos_label='No Diabetes') +
metrics.precision_score(y_test, y_pred, pos_label='Diabetes'))