使用BernoulliNB(naive bayes classifier)scikit在python中学习的简单示例-无法解释分类

2024-04-20 13:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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,0]=>;2上训练了模型之后,我期待“2”作为答案。

为什么把Y替换成

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

给出另一个“2”类的答案(正确的答案)?这不只是一个班级标签吗?

有人能解释一下吗?


Tags: 答案代码fromimportversionnpsklearnscikit
2条回答

默认情况下,alpha是一个平滑参数。正如msw所说,你的训练设备非常小。由于平滑,没有留下任何信息。如果将alpha设置为一个很小的值,则应该会看到预期的结果。

您的训练集太小,如所示

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()应用于结果以使其更可读。很明显,概率甚至不接近相等,事实上很好地分类了训练集。

相关问题 更多 >