首页 > 解决方案 > 如何计算打印结果中的字母?

问题描述

我正在尝试计算代码以从单热 MNIST 字母数据中找到准确度得分。我想计算 MNIST 数据中每个标签的准确率,因为我对精度、召回率和 f1 分数使用相同的值。y_true是数据框[88800, 26]。首先,我定义了真阳性、真阴性和其他。我的代码是:

for i in y_true:
x=y_true[i]
y=y_pred[i]
    for j in range(len(x)):
       if (x.values[j] == 1) and (y.values[j] == 1):
           print("True Positive", y_pred.columns[i-1])
       elif (x.values[j] == 0) and (y.values[j] == 0):
           print("True Negative", y_pred.columns[i-1])
       elif (x.values[j] == 0) and (y.values[j] == 1):
           print("False Positive", y_pred.columns[i-1])
       else:
           print("False Negative", y_pred.columns[i-1])

输出是:

True Positive 1
True Positive 1
True Negative 1
...
True Negative 26

直到每个标签为 1 和 26 的行。但是,我意识到,我无法从打印结果中计算每个标签有多少真阳性、真阴性、假阳性和假阴性。我不知道如何计算它。是否可以从打印结果中计算?

标签: pythoncount

解决方案


您可以Counter在您的代码中使用:

from collections import Counter

   c = Counter()


   for j in range(len(x)):
       if (x.values[j] == 1) and (y.values[j] == 1):
           print("True Positive", y_pred.columns[i-1])
           c.update([f'"True Positive" {y_pred.columns[i-1]}'])
       elif (x.values[j] == 0) and (y.values[j] == 0):
           print("True Negative", y_pred.columns[i-1])
           c.update([f'"True Negative" {y_pred.columns[i-1]}'])
       elif (x.values[j] == 0) and (y.values[j] == 1):
           print("False Positive", y_pred.columns[i-1])
           c.update([f'"False Positive" {y_pred.columns[i-1]}'])
       else:
           print("False Negative", y_pred.columns[i-1])
           c.update([f'"False Negative" {y_pred.columns[i-1]}'])

在此之后,这c将是您想要的输出。

要打印输出,请使用:

for k,v in dict(c).items():
    print(k,':',v)

推荐阅读