Не может объяснить наивный байесовский прогноз по игрушечным данным - PullRequest
0 голосов
/ 04 июня 2019

Я тестировал Наивного Байеса из sklearn на игрушечных данных из книги Тома Митчелла «Машинное обучение». Результаты неожиданны.

Самый первый экземпляр должен быть классифицирован как "Нет" в соответствии с расчетами, но он получает класс "Да". Априорные и последующие вероятности можно найти здесь

Я пытался с альфа = 1 и альфа = 0, результат тот же.

Я что-то упускаю в склеарновой реализации полиномиального Наивного Байеса?

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")
...