2017-09-15 8 views
3

私はtn、fp、fn、tpとそれが完全に動作する時間のほとんどを抽出するためにsklearn.metrics.confusion_matrix(y_actual, y_predict)を使用しています。sklearn.metrics.confusion_matrix()は常にTP、TN、FP、FNを返すようにするには?

from sklearn.metrics import confusion_matrix 

y_actual, y_predict = [1,1,1,1], [0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [0 0 4 0] # ok 

y_actual, y_predict = [1,1,1,1],[0,1,0,1] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [0 0 2 2] # ok 

しかし、いくつかのケースではconfusion_matrix()は常にそれらの情報を返さないと、以下のように私はとValueErrorになるだろう。

from sklearn.metrics import confusion_matrix 

y_actual, y_predict = [0,0,0,0],[0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [4] # ValueError: not enough values to unpack (expected 4, got 1) 

y_actual, y_predict = [1,1,1,1],[1,1,1,1] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict).ravel() 
>>> [4] # ValueError: not enough values to unpack (expected 4, got 1) 

私の一時的な解決策は、それらの情報を抽出するために私自身の関数を書くことです。 confusion_matrix()に常にtn、fp、fn、tpの出力を返すような方法はありますか?

おかげ

答えて

5

この問題は、あなたの入力行列に含まれていることができますユニークなラベルの数に関係しています。あなたの2番目のブロック例では、(正確に)1つのクラス(それぞれ0または1)を持つ混乱行列を構築しています。

いずれかが予測されない場合でも両方のクラスを出力させるには、label属性を使用します。

y_actual, y_predict = [0,0,0,0],[0,0,0,0] 
tn, fp, fn, tp = confusion_matrix(y_actual, y_predict, labels=[0,1]).ravel() 
>> array([[4, 0], 
      [0, 0]]) 
+0

これは完璧!どうもありがとうございました。 –

+0

うれしかった!それがあなたの問題を解決したら、答えを受け入れることを忘れないでください! – kdd

関連する問題