【问题标题】:Calculating accuracy from precision, recall, f1-score - scikit-learn从精度、召回率、f1-score 计算准确率 - scikit-learn
【发布时间】:2017-06-21 19:38:26
【问题描述】:

我犯了一个大错。我将 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:我不想再花一天时间来获取模型的输出。我刚刚意识到这个错误希望我不需要从头开始。

【问题讨论】:

    标签: scikit-learn svm precision-recall


    【解决方案1】:

    您可以根据精度、召回率和真/假阳性数或在您的案例支持中计算准确度(即使由于分子或分母为 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 这正是您在只预测一个类时所期望的。在这种情况下,相应的精度分数成为准确度。

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

    【讨论】:

      【解决方案2】:

      无需花费更多时间。 metrics module 包含您需要的一切,并且您已经计算了预测值。这是一个单行更改。

      print(metrics.accuracy_score(trainExpected, trainPredict))
      

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

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

      【讨论】:

      • 你的预测值是正确的,我一开始没有看到。我使用大量样本和功能,这需要很多时间。我所说的花时间实际上是等待每个输入的输出。一行更改是正确的,但我试图找到一种计算方法来计算这些值的准确性(通过从这些结果中解析值),以免从头开始并将分数写入文件。感谢您的回答。
      猜你喜欢
      • 2015-10-03
      • 2012-01-07
      • 2022-12-17
      • 2023-03-29
      • 1970-01-01
      • 2019-12-14
      • 2015-12-05
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多