无法解释对玩具数据的朴素贝叶斯预测

时间:2019-06-04 00:24:18

标签: scikit-learn naivebayes

我用汤姆·米切尔(Tom Mitchell)的《机器学习》一书中的玩具数据测试了sklearn的朴素贝叶斯。 结果出乎意料。

根据计算,第一个实例应分类为“否”,但它的类别为“是”。 先验概率和后验概率可以找到here

我尝试使用alpha = 1和alpha = 0,结果是相同的。

我在多项式朴素贝叶斯的sklearn实现中缺少某些内容吗?

MWE:

weather = '''Rainy Hot High False No
Rainy Hot High True No
Overcast Hot High False Yes
Sunny Mild High False Yes
Sunny Cool Normal False Yes
Sunny Cool Normal True No
Overcast Cool Normal True Yes
Rainy Mild High False No
Rainy Cool Normal False Yes
Sunny Mild Normal False Yes
Rainy Mild Normal True Yes
Overcast Mild High True Yes
Overcast Hot Normal False Yes
Sunny Mild High True No'''

def cats_to_nums(cats):
  voc = sorted(list(set(cats)))
  mapping = { c:i for (i, c) in enumerate(voc) }
  return [ mapping[c] for c in cats ]

def transpose(list_of_lists):
  return list(map(list, zip(*list_of_lists)))

data = [ s.split() for s in weather.split('\n') ]
tr_data = [ cats_to_nums(feat_vals) for feat_vals in transpose(data) ]
skdata   = transpose(tr_data)
feats = [ s[:-1] for s in skdata ]
glabs = [ s[-1] for s in skdata ]
#print(skdata) 

from sklearn.naive_bayes import MultinomialNB
nb_clf = MultinomialNB()
nb_clf.fit(feats, glabs)

nb_clf.predict([[1, 1, 0, 0]])  # returns 1 ("Yes") but should return 0 ("No")

0 个答案:

没有答案