2017-11-20 20 views
0

この問題のより良いタイトルを書く方法はわかりません。これは次のように動作します。私はいくつかのデータを入力したCSVファイルを持っています。 CSVファイルは次のようになります。このうちPython:pandas confusion matrix issue

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") 

これはもう機能しません。私がこれを言うとき、私はそれが予測されたカテゴリ全体を表示しないという事実を指しています。たとえば、作業バージョンの予測カテゴリがDetected asカラムから取られたcateg8 | categ2 | categ3 | etcである場合、非稼働バージョンでは、それらのカテゴリのうち3つだけ(すべてではない)が表示されます。

私が達成したいのは、実際のカテゴリ名をCSVファイルから取り出すのではなく、コマンドラインで指定することです。

答えて

0

私はそれを理解しました。誰かが同じ問題に遭遇した場合、真の(実際の)結果は、予測された結果と同じ数のエントリーを持たなければならない。

1つの画像がモデルによって20種類の異なる方法で解釈されるとは、単純には考えられません。