MultinomialNB 如何计算概率预测?

时间:2021-08-01 01:15:32

标签: python scikit-learn naivebayes

来自 scikit-learn 的

MultinomialNB 为一些简单的用例提供了意想不到的输出。

import numpy as np
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

docs = ['aa','aa','','','aa']
y    = np.array([1,1,1,1,2])

vec = CountVectorizer()
X = vec.fit_transform(docs)
clf = MultinomialNB(alpha=1e-10).fit(X, y)
X_test = vec.transform(['aa'])
print(clf.predict_proba(X_test)[0, 0])
# >> 0.8

鉴于我理解 P(y|X) 在这种情况下近似为 P(x='aa'|y=1) * P(y=1) = 2/4 * 4/5 = 0.4,因此我期望 0.4。所以 P(X) 被忽略

现在,documentationthis stackoverflow discussion 让我觉得计算真的是 P(x='aa'| all words in y=1 samples) * P(y=1) = 2/2 * 4/5 = 0.8

但是,如果您运行上面相同的示例,但使用 docs = ['aa','aa','bb','bb','aa'],这将不起作用,它给出 0.6666667 作为输出。

在这个新案例中,我希望两个公式都给出 (2/4 * 2/4) * 4/5 = 0.2。我有 (2/4 * 2/4),因为在独立性假设下,P(X|y) 项是当 y=1 时有“aa”和没有“bb”的乘积。

感谢任何澄清。

0 个答案:

没有答案