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

  统计/机器学习 贝叶斯 监督式学习 Python    浏览次数:3799        分享
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



  相关主题

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

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

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

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

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

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

flat priors是什么意思?   3回答

贝叶斯里的先验分布,后验分布是什么意思?   0回答

高斯分布的后验分布是什么?   1回答

怎么理解贝叶斯优化里的acquisition function?   0回答

laplace光滑什么意思   1回答

关于朴素贝叶斯特征工程、特征选择的问题   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!