从精确度,召回率,f1-score计算准确度 - scikit-learn

时间:2017-02-04 13:41:14

标签: scikit-learn svm precision-recall

我犯了一个大错。我打印出scikit-learn svm准确度的输出为:

str(metrics.classification_report(trainExpected, trainPredict, digits=6))

现在我需要从以下输出计算准确度:

              precision    recall  f1-score   support

1             0.000000  0.000000  0.000000      1259
2             0.500397  1.000000  0.667019      1261
avg / total   0.250397  0.500397  0.333774      2520

是否可以从这些值计算准确度?

PS:我不想再花一天时间来获取模型的输出。我刚刚意识到这个错误,希望我不需要从头开始。

2 个答案:

答案 0 :(得分:0)

无需花费更多时间。 metrics module包含您需要的所有内容,并且您已经计算了预测值。这是一线改变。

print(metrics.accuracy_score(trainExpected, trainPredict))

我建议您花一些时间阅读链接页面,以了解有关评估模型的更多信息。

我确实认为你手头有一个更大的问题 - 你的1课程的预测值为零,尽管有平衡的课程。您可能在数据,建模策略或代码中遇到问题,而您必须处理这些问题。

答案 1 :(得分:0)

您可以根据精度,召回率和正确/误报次数或在您的情况下支持的准确性(即使由于分子或分母为0而导致精度或召回率为0)也可以计算出准确性。

TruePositive+FalseNegative=Support_True
TrueNegative+FalsePositive=Support_False
Precision=TruePositive/(TruePositive+FalsePositive) if TruePositive+FalsePositive!=0 else 0
Recall=TruePositive/(TruePositive+FalseNegative) if TruePositive+FalseNegative!=0 else 0
Accuracy=(TruePositive+TrueNegative)/(TruePositive+TrueNegative+FalsePositive+FalseNegative)

-或- 例如,给定TruePositive / TrueNegative计数:

TPP=TruePositive/Precision=TruePositive+FalsePositive if Precision!=0 and TruePositive!=0 else TPP=0
TPR=TruePositive/Recall=TruePositive+FalseNegative if Recall!=0 and TruePositive!=0 else TPR=0

在上面,当TruePositive == 0时,如果没有有关FalseNegative / FalsePositive的更多信息,则无法进行计算。因此,支持会更好。

Accuracy=(TruePositive+TrueNegative)/(TPP+TPR-TruePositive+TrueNegative)

但是,在您的情况下,我们给予了支持,因此我们使用了召回权:

Recall=TruePositive/Support_True if Support_True!=0 else 0
TruePositive=Recall*Support_True, likewise TrueNegative=Recall_False*Support_False in all cases
Accuracy=(Recall*Support_True+Recall_False*Support_False)/(Support_True + Support_False)

在您的情况下,(0*1259+1*1261)/(1259+1261)=0.500397恰好是只预测一个班级时的期望。在这种情况下,相应的精度得分将变为精度。

像其他海报所说的那样,最好使用图书馆。但这也听起来像是一个数学问题,因此可以使用。