Python:熊猫混淆矩阵问题

时间:2017-11-20 16:39:40

标签: python pandas

我不知道如何为这个问题写出更好的标题。它的工作原理如下:我有一个填充了一些数据的CSV文件。 CSV文件如下所示:

14 tests runed: 6 passed and 8 failed with accuracy: 42.00%
Picture name    ; Detected as       ; Status
categ1_0.jpg    ; categ8=0.875931   ; Failed
categ1_1.jpg    ; categ8=0.553985   ; Failed
categ2_0.jpg    ; categ2=0.994332   ; Passed
categ2_1.jpg    ; categ2=0.994736   ; Passed
categ3_0.jpg    ; categ3=0.97933    ; Passed
categ3_1.jpg    ; categ3=0.825793   ; Failed
categ4_0.jpg    ; categ4=0.63532    ; Failed
categ4_1.jpg    ; categ4=0.520756   ; Failed
categ5_0.jpg    ; categ5=0.999963   ; Failed
categ5_1.jpg    ; categ5=0.999827   ; Failed
categ6_0.jpg    ; categ6=0.99825    ; Passed
categ6_1.jpg    ; categ6=0.475022   ; Failed
categ7_0.jpg    ; categ7=0.9987     ; Passed
categ7_1.jpg    ; categ7=0.982103   ; Passed

在此之外,我使用此python代码(代码工作)提取混淆矩阵:

import csv
import argparse
import pandas as pd

parser = argparse.ArgumentParser(description='Creating confusion matrix.')
parser.add_argument('-i', '--input', help='Input path/to/file.csv', required=True)
parser.add_argument('-ca', '--categ-path', nargs='+', help='Name of categories (do not separe by other characters)', required=True)
parser.add_argument('-oh', '--output-html', help='Output path/to/confusion_matrix.html', required=True)
args = parser.parse_args()

data = csv.reader(open(args.input, 'r'), delimiter=";", quotechar='|')
next(data)
next(data)

true_data = []
pred_data = []

for row in data:
    if len(row) >= 2:
        true_data.append(row[0])
        pred_data.append(row[1])

true_data = [s.strip().split('_')[0] for s in true_data]
pred_data = [s.strip().split('=')[0] for s in pred_data]

y_true = pd.Series(true_data, name="Actual")
y_pred = pd.Series(pred_data, name="Predicted")

df_confusion = pd.crosstab(y_true, y_pred)
df_confusion.to_html(args.output_html)

但是,如果我更改以下行:

y_true = pd.Series(args.categ_path, name="Actual")

它不再起作用。当我这样说时,我指的是它没有显示整个Predicted类别。例如,如果工作版本中的预测类别为categ8 | categ2 | categ3 | etc(所有来自Detected as列的类别),则在非工作版本中,我将只有3个类别(并非所有类别)

我想要完成的是在命令行中提供真正的类别名称,而不是从CSV文件中获取它们。

1 个答案:

答案 0 :(得分:0)

我明白了。如果有人遇到同样的问题:真实(实际)结果必须具有与预测结果相同的条目数。

一个人根本不能指望一个模型以20种不同的方式解释1张图片,具有相同的信心:)