2016-02-03 15 views
6

Ich kann nicht herausfinden, ob ich meine binäre Klassifizierung korrekt eingerichtet habe. Ich habe die positive Klasse 1 und die negative 0 markiert. Es ist jedoch mein Verständnis, dass scikit-learn standardmäßig die Klasse 0 als positive Klasse in ihrer Konfusionsmatrix verwendet (also die Umkehrung, wie ich sie eingerichtet habe). Das ist verwirrend für mich. Ist die oberste Zeile in der Standardeinstellung von scikit-learn die positive oder negative Klasse? Lässt die Verwirrung Matrix Ausgang annehmen:Scikit-lernen Verwirrung Matrix

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

Wie es aus wie in einer Konfusionsmatrix aussehen würde? Sind die tatsächlichen Instanzen die Zeilen oder die Spalten in scikit-learn?

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

Antwort

10

scikit Arten Etiketten in aufsteigender Reihenfolge, so 0en sind erste Spalte/Zeile und 1'en sind zu lernen, die zweite

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

Diese im docs geschrieben wird:

Labels: Array, shape = [n_classes], optional Liste der Beschriftungen zum Indizieren der Matrix. Dies kann verwendet werden, um eine Teilmenge von Etiketten neu anzuordnen oder auszuwählen. Wenn keine angegeben ist, werden diejenigen, die mindestens einmal in y_true oder y_pred vorkommen, in sortierter Reihenfolge verwendet.

So können Sie dieses Verhalten ändern, indem Sie Etiketten bereitstellt

>>> 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 nennen Und tatsächlich/vorhergesagt werden oredered genau wie in Ihren Bildern - Vorhersagen sind in Spalten und Istwerten in Reihen

>>> 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]]) 
  • erfüllt: 0, vorhergesagt: 0 (Wert: 3, Position [0, 0])
  • wahr: 5, vorhergesagt: 0 (Wert: 2, Position [1, 0])
  • wahr: 0, vorhergesagt: 5 (Wert: 0, Position [0, 1])
  • wahr: 5, vorhergesagt : 5 (Wert: 1, Position [1, 1])
+0

Sie haben mir gerade so viel Zeit erspart. Vielen Dank. – Chuck