朴素贝叶斯分类器 naive_bayes.MultinomialNB() 为啥和手算的结果不一致

  统计/机器学习 贝叶斯 监督式学习 Python    浏览次数:7088        分享
0

这是题目。

然后题目的答案是


用python代码如下

X1 = np.array([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3])
X2 = np.array([1,2,2,1,1,1,2,2,3,3,3,2,2,3,3])
X_train = list(zip(X1,X2))
y_train = [-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1]
X_test = [[2,1]]
MNBclf = naive_bayes.MultinomialNB()
MNBclf.fit(X_train,y_train)
print(MNBclf.predict(X_test))
print(MNBclf.predict_proba(X_test))

这是结果

[1]
[[ 0.40579081 0.59420919]]

为什么会和书里的不一样

 

a651021213   2018-08-17 18:02



   1个回答 
2

MultinormialNB应该用onehotcode。


import numpy as np
import sklearn.naive_bayes  as nb
import matplotlib.pyplot as plt
from sklearn import preprocessing
X1 = np.array([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3])
X2 = np.array([1,2,2,1,1,1,2,2,3,3,3,2,2,3,3])
X_train = list(zip(X1,X2))
enc = preprocessing.OneHotEncoder()
enc.fit(X_train)
X_train=enc.transform(X_train).toarray()
print(X_train)
y_train = np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])
X_test = [[2,1]]
X_test = enc.transform(X_test).toarray()
print(X_test)
MNBclf = nb.MultinomialNB(alpha=1E-10)
# MNBclf = nb.GaussianNB()
MNBclf.fit(X_train,y_train)
print(MNBclf.predict(X_test))
print(MNBclf.predict_proba(X_test))

输出是

[-1]
[[0.75 0.25]]

如果不换成one hot,可以用nb.GaussianNB()

SofaSofa数据科学社区DS面试题库 DS面经

Zealing   2018-08-18 06:35



  相关讨论

朴素贝叶斯是线性分类器吗?

贝叶斯网络和朴素贝叶斯有什么区别?

用贝叶斯怎么输出模型的预测准确率?

朴素贝叶斯中的朴素是什么意思?

如何用python实现贝叶斯网络优化lightgbm超参数?

sklearn朴素贝叶斯的多项式和伯努利模型实现有啥不同

sklearn朴素贝叶斯分类里GaussianNB和BernoulliNB的区别?

朴素贝叶斯可以用来做回归吗?

如何用EM算法实现朴素贝叶斯法的非监督学习

用sklearn朴素贝叶斯返回预测概率

  随便看看

K-means怎么选K?

关于方差膨胀因子(VIF)的问题

如何清空pandas dataframe里的全部数据但是保留列名?

推荐开放数据库

numpy.full这个函数有什么用?