多项式朴素贝叶斯-Sklearn

时间:2018-07-16 18:26:27

标签: python scikit-learn naivebayes

import numpy as np
from sklearn.naive_bayes import MultinomialNB
X = np.array([[0.25, 0.73], [0.12, 0.42], [0.53, 0.92], [0.11, 0.32]])
y = np.array([0, 0, 0, 1])
mnb = MultinomialNB()
mnb.fit(X, y)
mnb.predict([[0.11, 0.32]])

->它预测0

它不应该预测1吗?

2 个答案:

答案 0 :(得分:1)

不一定。您不能仅仅因为模型看到了观察就可以假设它会正确预测相应的标签。在高偏差算法like Naive Bayes中尤其如此。高偏差模型往往会过分简化Xy之间的关系,而您在这里看到的就是这种情况的产物。最重要的是,您只适合4个样本,对于学习稳健的关系的模型而言,这太少了。

如果您好奇模型是如何精确地创建这些预测的,那么多项式朴素贝叶斯会学习每个类的联合对数似然率。您实际上可以使用拟合模型来计算这些可能性:

>>> jll = mnb._joint_log_likelihood(X)
>>> jll
array([[-0.87974542, -2.02766662],
       [-0.60540174, -1.73662711],
       [-1.24051492, -2.36300468],
       [-0.54761186, -1.66776584]])

predict阶段开始,获取类的argmax,这是类标签预测的来源:

>>> mnb.classes_[np.argmax(jll, axis=1)]
array([0, 0, 0, 0])

您可以看到,按照目前的状态,该模型将为您提供的所有示例预测0

答案 1 :(得分:0)

这取决于。在这里,您在拟合/训练过程中只使用了属于类别1的一个样本。另外,每个样本只有4个功能,并且只有4个样本,因此,培训效果很差

import numpy as np
from sklearn.naive_bayes import MultinomialNB
X = np.array([[0.25, 0.73], [0.12, 0.42], [0.53, 0.92], [0.11, 0.32]])
y = np.array([0, 0, 0, 1])
mnb = MultinomialNB()
mnb.fit(X, y)

mnb.predict([[0.11, 0.32]])
array([0])
mnb.predict([[0.25, 0.73]])
array([0])

模型学习规则,并且可以成功预测类别0 ,但不能预测类别1 。这也称为特异性和敏感性之间的权衡。我们也通过说模型不能推广规则来指代这一点。