算法简介
朴素贝叶斯分类器是与线性模型非常相识的一种分类器,但是它的训练速度往往更快,这种高效率所付出的代价是朴素贝叶斯模型的泛化能力要比线性模型要稍差。朴素贝叶斯模型高效的原因在于,他通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据。scikit-learn中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB和MultinomialNB。GaussianNB可以用于任意连续的数据,而BernoulliNB假定输入数据为二分类数据,MuitinomialNB假定输入数据为计数数据(比如一个单词在句子中出现的次数)。BernoulliNB和MultinomialNB主要用于文本数据分类。
贝叶斯定理:
![](https://img.haomeiwen.com/i19378470/4690803f730dfa9b.png)
算法示例
import numpy as np
from sklearn.naive_bayes import GaussianNB
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2], [3,3]])
Y = np.array([1, 1, 1, 2, 2, 2, 2])
# print(X)
guassian = GaussianNB().fit(X, Y)
print("training set score:{:.3f}".format(guassian.score(X, Y)))
输出结果:
training set score:1.000
算法优缺点
BernoulliNB和MultinomialNB都只有一个alpha参数用于控制模型复杂度。alpha的工作原理是,算法向数据中增加alpha这么多的虚拟数据点,这些点对所有特征都取正值,这样可以将统计数据“平滑化”。alpha值越大,平滑越强,模型复杂度就越低。算法对alpha值的鲁棒性相对较好,也就是说,alpha值对模型性能并不重要,但调整这个参数通常可以使精度略有提高。
GaussianNB主要用于高维数据,而另外两个模型通常用于稀疏计数数据,比如文本。MultinomialNB的性能通常要优于BernoulliNB,特别是在包含很多非零特征的数据集上。
朴素贝叶斯模型的许多优点和缺点都与线性模型相同,他的训练和预测速度都很快,训练过程也比较容易理解。该模型对高维稀疏矩阵数据的效果很好,对参数的鲁棒性也相对较好。朴素贝叶斯模型是很好的基准模型,常用于非常大的数据集,在这些数据集上即使训练线性模型也可能需要花费大量的时间。
网友评论