10

Mit 0,10Einfaches Beispiel mit BernoulliNB (Bayes-Klassifikator) Scikit-Learn in Python - erklären kann nicht Klassifizierung

Scikit-Learn Warum funktioniert das folgende triviale Code-Schnipsel:

from sklearn.naive_bayes import * 

import sklearn 
from sklearn.naive_bayes import * 

print sklearn.__version__ 

X = np.array([ [1, 1, 1, 1, 1], 
       [0, 0, 0, 0, 0] ]) 
print "X: ", X 
Y = np.array([ 1, 2 ]) 
print "Y: ", Y 

clf = BernoulliNB() 
clf.fit(X, Y) 
print "Prediction:", clf.predict([0, 0, 0, 0, 0])  

Drucken Sie eine Antwort "1"? Nachdem ich das Modell auf [0,0,0,0,0] => 2 trainiert hatte, erwartete ich "2" als Antwort.

Und warum ersetzt Y mit

Y = np.array([ 3, 2 ]) 

Geben Sie eine andere Klasse "2" als Antwort (die richtigen)? Ist das nicht nur ein Klassenlabel?

Kann jemand etwas Licht darauf werfen?

+0

Sie haben Recht, Änderung Y sollte nichts ändern. Ich könnte mit dem aktuellen Master reproduzieren. Ich denke, das hat damit zu tun, dass der Klassifikator unentschlossen ist. –

+0

Mit 0.18.2 bekomme ich 2 ohne Alpha zu ändern. – Aaron

Antwort

5

Ihr Trainingssatz ist zu klein, wie durch

clf.predict_proba(X) 

gezeigt werden, die

array([[ 0.5, 0.5], 
     [ 0.5, 0.5]]) 

ergibt, die zeigen, dass der Klassifikator alle Einstufungen als equiprobable betrachtet. Vergleichen Sie mit der Probe in der Dokumentation gezeigt für BernoulliNB für die predict_proba() ergibt:

array([[ 2.71828146, 1.00000008, 1.00000004, 1.00000002, 1.  ], 
     [ 1.00000006, 2.7182802 , 1.00000004, 1.00000042, 1.00000007], 
     [ 1.00000003, 1.00000005, 2.71828149, 1.  , 1.00000003], 
     [ 1.00000371, 1.00000794, 1.00000008, 2.71824811, 1.00000068], 
     [ 1.00000007, 1.0000028 , 1.00000149, 2.71822455, 1.00001671], 
     [ 1.  , 1.00000007, 1.00000003, 1.00000027, 2.71828083]]) 

wo ich numpy.exp() zu den Ergebnissen angewendet sie besser lesbar zu machen. Offensichtlich sind die Wahrscheinlichkeiten nicht einmal annähernd gleich und klassifizieren den Trainingssatz tatsächlich gut.

8

Standardmäßig ist Alpha der Glättungsparameter eins. Wie gesagt, Ihr Trainingsset ist sehr klein. Aufgrund der Glättung bleiben keine Informationen übrig. Wenn Sie Alpha auf einen sehr kleinen Wert setzen, sollten Sie das erwartete Ergebnis sehen.