多项朴素贝叶斯分类问题,需要归一化吗?
Multinomial naive bayes classification problem, normalization required?
使用多项式朴素贝叶斯的分类不起作用,请参阅代码
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-explanation-4f5271768ebf
在你的例子中,none个测试数据中的属性出现在训练数据中(单词street、shop和car的概率为0)。
尝试运行代码
#Return probability estimates for the test vector X.
print (mnb.predict_proba(dv.transform(test_data1)) )
两个 classes 的准确度都是 0.5。
所以模型 returns 第一个 class 即 10。
使用多项式朴素贝叶斯的分类不起作用,请参阅代码
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-explanation-4f5271768ebf
在你的例子中,none个测试数据中的属性出现在训练数据中(单词street、shop和car的概率为0)。
尝试运行代码
#Return probability estimates for the test vector X.
print (mnb.predict_proba(dv.transform(test_data1)) )
两个 classes 的准确度都是 0.5。 所以模型 returns 第一个 class 即 10。