nov*_*ieq 1 python classification machine-learning scikit-learn
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB, MultinomialNB, BernoulliNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred).sum()))
mnb = MultinomialNB()
y_pred_mnb = mnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred_mnb).sum()))
bnb = BernoulliNB()
y_pred_bnb = bnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred_bnb).sum()))
Run Code Online (Sandbox Code Playgroud)
输出结果如下:
总共150分
中错误标记的点数:6总共150点中错误标记的点数:7总共150点
中错误标记点数:100
伯努利朴素贝叶斯分类器错误标记100,这比其他人更多.你能解释一下原因吗?
简而言之,高斯朴素贝叶斯模型通常用于连续数据(其中每个特征是实数),其中基础数据分布被假定为高斯(正态)分布.
在多项朴素贝叶斯模型计算(多久一个文档中出现某个字为例)某个事件在数据集中出现的频率.
该伯努利朴素贝叶斯模型类似于多项朴素贝叶斯模型,但不是计数多久发生的事件,它只是描述是否发生的事件(例如是否在文档中出现某个词,它没有按如果它发生一次或100000次都很重要
现在专门针对包含实值数据的虹膜数据集,GaussianNB将是最合适的模型.MultinomialNB最合适的典型示例是文本分类.
因此,考虑到数据集和每个模型的特征,伯努利朴素贝叶斯模型的表现并不令人惊讶.更大的惊喜是,多项式朴素贝叶斯模型几乎与高斯模型一样好,尽管它对这个数据集(实际值数据)是不合适的选择.然而,查看数据(我鼓励你这样做)应该给你正确的提示为什么Multinomial Naive Bayes模型可以达到如此好的性能.
对于伯努利朴素贝叶斯模型进行了深入的比较和多项朴素贝叶斯模型文本分类,我建议你阅读本文件.
您可能还想查看关于朴素贝叶斯的优秀scikit-learn文档,以了解不同模型的概述,最后但并非最不重要的是,朴素贝叶斯分类器上的维基百科页面也提供了一个很好的概述.
更新:
正如mbatchkarov下面评论中指出的那样,您正在测试和培训相同的数据,这被认为是非常糟糕的做法,因此无法从上述结果中得出明确的结论.考虑使用交叉验证或至少将数据拆分为训练块和测试块.