11

scikit-learn 0.10 の使用

次の簡単なコード スニペットはなぜですか。

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

「1」の答えを出力しますか?[0,0,0,0,0] => 2 でモデルをトレーニングしたので、答えとして「2」を期待していました。

そして、なぜ Y を

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

答えとして別のクラス「2」を与えてください (正しいもの) ? これは単なるクラスのラベルではありませんか?

誰かがこれに光を当てることができますか?

4

2 に答える 2

8

デフォルトでは、平滑化パラメータのアルファは 1 です。msw が言ったように、トレーニング セットは非常に小さいです。平滑化により、情報は残りません。alpha を非常に小さな値に設定すると、期待どおりの結果が得られるはずです。

于 2012-08-05T11:49:14.040 に答える
5

で示されるように、トレーニング セットが小さすぎます。

clf.predict_proba(X)

利回り

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

これは、分類子がすべての分類を等確率と見なしていることを示しています。BernoulliNBのドキュメントに示されているサンプルと比較すると、次の結果がpredict_proba()得られます。

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

numpy.exp()結果を読みやすくするために結果に適用した場所。明らかに、確率は等しくなく、実際にはトレーニング セットを適切に分類しています。

于 2012-08-04T12:30:54.210 に答える