从准确率、召回率、f1-score 计算准确率 - scikit-learn
Calculating accuracy from precision, recall, f1-score - scikit-learn
我犯了一个大错。我将 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:我不想再花一天时间来获取模型的输出。我刚刚意识到这个错误希望我不需要从头开始。
不需要花更多的时间在上面。 metrics
module 中包含您需要的所有内容,并且您已经计算了预测值。这是一行更改。
print(metrics.accuracy_score(trainExpected, trainPredict))
我建议您花一些时间阅读链接页面,以了解有关评估模型的更多信息。
我确实认为你手头有一个更大的问题——你的 1
class 的预测值为零,尽管 classes 是平衡的。您可能在必须处理的数据、建模策略或代码中遇到问题。
您可以根据精确度、召回率和 true/false 阳性的数量或您的案例支持来计算准确度(即使由于分子或分母为 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
这正是您在仅预测一个 class 时所期望的结果。在这种情况下,相应的精度分数成为准确度。
就像其他发帖人说的,最好使用图书馆。但是因为这听起来也可能是一个数学问题,所以可以使用它。
我犯了一个大错。我将 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:我不想再花一天时间来获取模型的输出。我刚刚意识到这个错误希望我不需要从头开始。
不需要花更多的时间在上面。 metrics
module 中包含您需要的所有内容,并且您已经计算了预测值。这是一行更改。
print(metrics.accuracy_score(trainExpected, trainPredict))
我建议您花一些时间阅读链接页面,以了解有关评估模型的更多信息。
我确实认为你手头有一个更大的问题——你的 1
class 的预测值为零,尽管 classes 是平衡的。您可能在必须处理的数据、建模策略或代码中遇到问题。
您可以根据精确度、召回率和 true/false 阳性的数量或您的案例支持来计算准确度(即使由于分子或分母为 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
这正是您在仅预测一个 class 时所期望的结果。在这种情况下,相应的精度分数成为准确度。
就像其他发帖人说的,最好使用图书馆。但是因为这听起来也可能是一个数学问题,所以可以使用它。