使用BernoulliNB(朴素贝叶斯分类器)scikit学习的简单例子无法解释分类



使用scikit学习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]=>2上训练模型后,我期望得到"2"作为答案。

为什么用代替Y

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

给另一类"2"作为答案(正确的答案)?这不只是一个阶级标签吗?

有人能解释一下吗?

默认情况下,alpha平滑参数为1。正如msw所说,你的训练场地很小。由于进行了平滑处理,因此不会留下任何信息。如果您将alpha设置为一个非常小的值,您应该会看到您期望的结果。

显示您的训练集太小

clf.predict_proba(X)

产生

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

这表明分类器认为所有分类都是等概率的。与文献中显示的predict_proba()产生的伯努利NB样本进行比较

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

其中我将CCD_ 2应用于结果以使它们更可读。显然,概率甚至不接近相等,并且事实上对训练集进行了很好的分类。

相关内容

  • 没有找到相关文章

最新更新