Scikit learn 根据精确度、回忆、f1成绩计算准确度-scikit学习

Scikit learn 根据精确度、回忆、f1成绩计算准确度-scikit学习,scikit-learn,svm,precision-recall,Scikit Learn,Svm,Precision Recall,我犯了一个巨大的错误。我将scikit学习svm精度的输出打印为: str(metrics.classification_report(trainExpected, trainPredict, digits=6)) 现在,我需要根据以下输出计算精度: precision recall f1-score support 1 0.000000 0.000000 0.000000 1259 2 0

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

不需要花更多的时间。
metrics
中包含了您需要的一切,并且您已经计算了预测值。这是一次换行

print(metrics.accuracy_score(trainExpected, trainPredict))
我建议您花一些时间阅读链接页面,以了解更多有关评估模型的一般信息


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

不需要花更多的时间。
metrics
中包含了您需要的一切,并且您已经计算了预测值。这是一次换行

print(metrics.accuracy_score(trainExpected, trainPredict))
我建议您花一些时间阅读链接页面,以了解更多有关评估模型的一般信息


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

您可以根据精度、召回率和真/假阳性数或您的案例支持计算准确度(即使由于分子或分母为0,精度或召回率为0)

-或- 给定真正/真负计数,例如:

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/FalseNegative的更多信息,则不可能进行计算。因此,支持更好

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
这正是您在仅预测一个类时所期望的。在这种情况下,相应的精度分数成为精度


正如另一张海报所说,最好使用图书馆。但是,由于这听起来可能也是一个数学问题,因此可以使用它。

您可以根据精确度、召回率和真/假阳性数或在您的案例支持中计算准确度(即使由于分子或分母为0,精确度或召回率为0)

-或- 给定真正/真负计数,例如:

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/FalseNegative的更多信息,则不可能进行计算。因此,支持更好

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
这正是您在仅预测一个类时所期望的。在这种情况下,相应的精度分数成为精度


正如另一张海报所说,最好使用图书馆。但是,由于这听起来可能也是一个数学问题,所以可以使用它。

你的预测值是正确的,我一开始没有看到这一点。我使用大量的样本和功能,这需要很多时间。我所说的花费时间实际上是等待每个输入的输出。一行更改是正确的,但我试图找到一种计算这些值准确性的方法(通过解析这些结果中的值),以避免从头开始并将分数写入文件。谢谢你的回答。你的预测值是正确的,一开始我没有看到。我使用大量的样本和功能,这需要很多时间。我所说的花费时间实际上是等待每个输入的输出。一行更改是正确的,但我试图找到一种计算这些值准确性的方法(通过解析这些结果中的值),以避免从头开始并将分数写入文件。谢谢你的回答。