10

neden aşağıdaki önemsiz kod parçacığı:Basit bir örnek - açıklayamaz sınıflandırma 0.10</p> <p>scikit-öğrenme kullanma

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

Baskı üzerinden bir cevap "1"? Modeli [0,0,0,0,0] => 2 olarak eğittim, cevap olarak "2" yi bekliyordum.

Ve neden

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

ile Y yerine bir cevap (doğru bir) gibi farklı bir sınıf "2" Give geliyor? Bu sadece bir sınıf etiketi değil mi?

Birisi buna ışık tutabilir mi? sınıflandırıcı equiprobable gibi tüm sınıflandırmaları gördüğünü gösterir

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

verir

clf.predict_proba(X) 

tarafından gösterilebilir olarak

+0

Haklısınız, değişen Y değişmemelidir. Mevcut usta ile çoğaltabilirim. Sanırım bu kararsız sınıflandırıcı ile ilgili. –

+0

0.18.2 kullanarak, alfa değiştirmeden 2 alıyorum. – Aaron

cevap

5

Sizin eğitim seti çok küçük. olan verimleri predict_proba()BernoulliNB belgelerinde gösterilen örnek ile karşılaştır: I sonuçlara numpy.exp() uygulanan

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

onları daha okunabilir hale getirmek için. Açıkçası, olasılıklar eşit hatta eşit değildir ve aslında eğitim setini iyi sınıflandırır.

8

Varsayılan olarak, alfa, düzeltme parametresi birdir. Msw dediği gibi, eğitim setin çok küçük. Düzeltme nedeniyle hiçbir bilgi kalmamıştır. Alfa'yı çok küçük bir değere ayarlarsanız, beklediğiniz sonucu görmelisiniz.

İlgili konular