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吗?
发布于 2018-07-17 02:56:17
不一定。您不能假设,仅仅因为一个模型看到了一个观察值,它就会正确地预测相应的标签。在高偏置算法like Naive Bayes中尤其如此。高偏差模型往往会过度简化X和y之间的关系,您在这里看到的就是这种关系的产物。最重要的是,你只拟合了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。
发布于 2018-07-17 02:44:44
它取决于。在这里,您在拟合/训练期间仅使用属于1类的one sample 。而且,对于每个样本,你只有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类。这也被称为特异性和敏感性之间的权衡。我们也通过说模型不能泛化规则来引用它。
https://stackoverflow.com/questions/51368026
复制相似问题