2016-02-03 46 views
6

バイナリ分類の問題が正しく設定されているかどうかはわかりません。私は、正のクラス1と負の0のラベルを付けました。しかし、デフォルトでは、scikit-learnはその混同行列の正のクラスとしてクラス0を使用することを理解しています。これは私にとって紛らわしいものです。 scikit-learnのデフォルト設定では、一番上の行は肯定的なクラスか否定的なクラスですか?Scikit-learn confusion matrix

confusion_matrix(y_test, preds) 
[ [30 5] 
    [2 42] ] 

どのようにそれは混同行列に次のようになります。 は混同行列の出力とさせて頂きますか!実際のインスタンスはscikit-learnの行または列ですか?

  prediction      prediction 
      0  1       1  0 
     ----- -----      ----- ----- 
     0 | TN | FP  (OR)   1 | TP | FP 
actual ----- -----    actual ----- ----- 
     1 | FN | TP      0 | FN | TN 

答えて

10

従って0は、最初の列/行と1であり、昇順にソートラベルを学ぶscikit第1

>>> from sklearn.metrics import confusion_matrix as cm 
>>> y_test = [1, 0, 0] 
>>> y_pred = [1, 0, 0] 
>>> cm(y_test, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> y_pred = [4, 0, 0] 
>>> y_test = [4, 0, 0] 
>>> cm(y_test, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> y_test = [-2, 0, 0] 
>>> y_pred = [-2, 0, 0] 
>>> cm(y_test, y_pred) 
array([[1, 0], 
     [0, 2]]) 
>>> 

ありこれはdocsで書かれている:

ラベル。 array、shape = [n_classes]、オプション 行列のインデックスを付けるラベルのリスト。これは、ラベルのサブセットを並べ替えたり選択したりするために使用されます。 が指定されていない場合、y_trueまたはy_predに少なくとも1回表示されるのはで、並べ替え順はです。

は、このようにあなたは

>>> y_test = [1, 0, 0] 
>>> y_pred = [1, 0, 0] 
>>> cm(y_pred, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> cm(y_pred, y_pred, labels=[1, 0]) 
array([[1, 0], 
     [0, 2]]) 

を呼び出すconfusion_matrixするラベルを提供することにより、この動作を変更することができ、および/予測実際には、ちょうどあなたのイメージのようにorederedされている - 予測は、行の列と実際の値である

>>> y_test = [5, 5, 5, 0, 0, 0] 
>>> y_pred = [5, 0, 0, 0, 0, 0] 
>>> cm(y_test, y_pred) 
array([[3, 0], 
     [2, 1]]) 
  • true:0、予測:0(値:3、位置[0、0])
  • 真:5、予測:0(値:2、位置[1、0])
  • 真:0、予測:5(値:0、位置[0,1])
  • 真:5、予測:5(値:1、位置[1,1])
+0

あなたは私をずっと保存しました。ありがとうございました。 – Chuck