多项式幼稚的贝叶斯分类问题,需要归一化



使用多项式幼稚贝叶斯不起作用的分类,请参阅代码

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction import DictVectorizer
import numpy as np
# training data
data = [
{'house': 100, 'street': 50, 'shop': 25, 'car': 100, 'tree': 20},
{'house': 5, 'street': 5, 'shop': 0, 'car': 10, 'tree': 500, 'river': 1}
] 
dv = DictVectorizer(sparse=False)
X = dv.fit_transform(data)
Y = np.array([10, 20])

mnb=MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
mnb.fit(X, Y)
# test data
test_data1 = [
{'testname': 0, 'street': 0, 'shop': 0, 'car': 0, 'Hi': 0, 'Blue': 5},
]

print (mnb.predict(dv.transform(test_data1)) )

输出是[10],但我期望它是[20]。

这里有什么问题,我的理解?

您的测试集给出了10和20的相同概率。这是一个幼稚贝叶斯如何计算每个输出类别概率的示例。https://medium.com/syncedreview/applying-multinomial-naive-bayes-to-nlp-problems-a-practical-epplanation-4f5271768ebf

在您的示例中,测试数据中的所有属性都没有出现在培训数据中(街道,商店和汽车单词的概率为0(。

尝试运行代码

#Return probability estimates for the test vector X.
print (mnb.predict_proba(dv.transform(test_data1)) ) 

两个类的精度为0.5。因此,该模型返回10.

的第一类

最新更新