朴素贝叶斯分类器
朴素贝叶斯分类器是一种与线性模型非常相类似的一种分类器。
- 它的训练速度比线性模型更快,但是泛化能力要强。
- 主要思想:通过独立查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据
- scikit-learn实现了三种朴素贝叶斯分类器:1、GaussianNB分类器(高斯)、2、BernoulliNB分类器(伯努利)、3、MultinomNB分类器(多项式)
1、BernoulliNB分类器(伯努利)
-
该分类器输入数据为二分类数据,主要用于文本数据分类,计算每个类别中每个特征不为0的元素个数。
-
下面是书本中的一个例子,计算每个类别的样本的每个特征所含1的数量:
X = np.array([[0,1,0,1], [1,0,1,1], [0,0,0,1], [1,0,1,0]]) y = np.array([0,1,0,1]) counts = {} for label in np.unique(y): counts[label] = X[y==label].sum(axis=0) #X[y==label]会选出数据中类别为label的样本,之后做跨行求和
-
输出
{0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}
-
📣
这个例子很形象地说明了BernoulliNB分类器的主要思想是计算每个类别中每个特征不为0的元素个数(把这个作为类别的统计数据),
若想要做出预测,需要将数据点与每个类别的统计数据进行比较,将最匹配的类别作为预测结果。 -
而GaussianNB分类器(高斯)、MultinomNB分类器(多项式)也是对每个类别中每个特征计算统计数据,但是计算方式不同罢了,下文会详述。
2、GaussianNB分类器(高斯)
GaussianNB可应用于任意连续数据,
-
主要用于高维数据,
-
计算的时候会保存每个类别中每个特征的平均值和标准差。
-
运用sklearn.naive_bayes.GaussianNB模块实现GaussianNB
- 📣
使用GaussianNB分类器在鸢尾花数据集的测试集上的精度竟然达到了1,比之前的线性模型,KNN都更高
3、MultinomNB分类器(多项式)
MultinomNB假定输入数据为基数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数),
- 主要用于文本数据分类。
- 计算类别中每个特征的平均值。
4、优点、缺点和参数
BernoulliNB和MultinomNB有一个参数alpha用于控制模型复杂度。
- alpha越大,平滑化越强,模型复杂度越低。
- 算法对alpha值的鲁棒性相对较好,因此,alpha值对模型性能并不是很重要,但是调整这个参数通常会使精度有所提高
👍注意
-
1、GaussianNB主要用于高维数据
- 连续数据
-
2、BernoulliNB和MultinomNB主要用于稀疏计数数据,比如文本。
- MultinomNB在包含很多非零特征的数据集(大型文档)上性能优于BernoulliNB
-
3、训练速度和预测速度都很快,贝叶斯模型是很好的基准模型,常用于非常大的数据集
参考文献
《Pyhon机器学习基础教程》P53-P54