问题描述
来自 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,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) 被忽略
现在,documentation 和 this stackoverflow discussion 让我觉得计算真的是 P(x='aa'| all words in y=1 samples) * P(y=1) = 2/2 * 4/5 = 0.8
。
但是,如果您运行上面相同的示例,但使用 docs = ['aa','bb','aa']
,这将不起作用,它给出 0.6666667 作为输出。
在这个新案例中,我希望两个公式都给出 (2/4 * 2/4) * 4/5 = 0.2
。我有 (2/4 * 2/4)
,因为在独立性假设下,P(X|y) 项是当 y=1 时有“aa”和没有“bb”的乘积。
感谢任何澄清。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)