朴素贝叶斯方法是一组基于Bayes定理的有监督学习算法,在给定数据标签的情况下,每对特征之间条件独立性假设。Bayes定理说明了如下关系,给定类别 y 和相关特征向量
到
:
使用简单的条件独立性假设
对于所有的 i, 这种关系可以简化为
由于
在给定输入的情况下是常数,我们可以使用以下分类规则:
并且我们可以利用最大后验概率(Maximum A Posteriori,MAP)估计
和
,前者是训练集中类别y的相对频率。
不同的朴素贝叶斯分类器的主要区别在于它们对
分布的假设。
尽管贝叶斯分类器的假设明显过于简单,但它们在许多实际情况下(在著名的文档分类和垃圾邮件过滤中)都表现良好,它们需要少量的训练数据来估计必要的参数。(理论证明朴素贝叶斯为何能很好地工作,以及它在哪种数据类型上工作,请参见以下参考资料。)
与更复杂的方法相比,朴素贝叶斯学习器和分类器是非常快速的。类条件特征分布的解耦意味着每个特征都可以被独立地估计为一维分布。反过来,这有助于减轻因维数灾难而产生的问题。
另一方面,尽管朴素贝叶斯被认为是一个不错的分类器,但它的结果是一个坏的估计量,因此不要太重视
用最大似然法估计参数
和
。
来参数化,其中n是特征的数量(在文本分类中,是词汇的大小),
是出现在属于类y的样本的特征i的概率
。参数
由最大似然的平滑版本来估计,即相对频率计数:
其中
是训练集T中属于类y的样本中特征i出现的次数,
是类y的所有特征的总数。
平滑因子(smoothing priors)
α
≥
0
考虑了学习样本中不存在的特征,并防止进一步计算中出现零概率。设置
α
=
1
称为Laplace(拉普拉斯)平滑,而
α
<
1
称为Lidstone平滑。
其中对所有不在类c
的文档j求和,
是文档j中项i的计数或tf-idf值,
是一个类似于MNB中的平滑超参数,并且
α
=
∑
i
α
i
。第二个归一化解决了MNB在较长文档中控制参数估计的问题。分类规则为:
即,将文档分配给补全匹配度最低(poorest)的项。
参考文献:
伯努利朴素贝叶斯不同于多项式朴素贝叶斯的规则,因为伯努利朴素贝叶斯显式地惩罚了作为类y的预测因子,对于不出现的特征i,多项式朴素贝叶斯会简单地忽略掉。
在文本分类的情况下,可以使用单词出现向量(而不是单词计数向量)来训练和使用该分类器。
其中
是属于c类的样本
中类别t出现的次数,
是c类的样本数,α是平滑参数,
是特征i的可用类别数。
![d879712082fc3d4f9caf728d73fc18c6.png](https://i-blog.csdnimg.cn/blog_migrate/eae0ce9e3e7cad6f97f624b1dc99e4c7.png)
![d71f36a3bd5d2819b2f4289310d48f00.png](https://i-blog.csdnimg.cn/blog_migrate/4fd084086c9f9f2bdcffe87511b01faf.png)
![fbaabff936b83f19cbb6662c5e4203dd.png](https://i-blog.csdnimg.cn/blog_migrate/bdfbc262705562c514d504980674e6b8.png)
![b4758efe7163036921baed4bac9f0573.png](https://i-blog.csdnimg.cn/blog_migrate/4a9a9976a5144beec87eb279e79a1c7e.png)
![ee3390ee8e94d4ff6106a7e31389258b.png](https://i-blog.csdnimg.cn/blog_migrate/437bb1069b65dbef186fe71b126b1217.png)
![3cca0d190e112c7a285e85456884a385.png](https://i-blog.csdnimg.cn/blog_migrate/fdbdb1217ade3fb4e21ca1e6f1400f17.png)
![32add4e718f7087212e5d89188675734.png](https://i-blog.csdnimg.cn/blog_migrate/9f9524b0515349254006a0e36e544486.png)
![357d919ff9b5722b56d8d29e23c4898c.png](https://i-blog.csdnimg.cn/blog_migrate/1df61725bed398de3364351e0cc0788f.png)
![8fbe04eba714406db7a450ae5508354c.png](https://i-blog.csdnimg.cn/blog_migrate/c7107fdc5657019a02eb4280c51c2b3f.png)
![8fbe04eba714406db7a450ae5508354c.png](https://i-blog.csdnimg.cn/blog_migrate/c7107fdc5657019a02eb4280c51c2b3f.png)
predict_proba
的概率输出。
参考文献:
- H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
1. 高斯(Gaussian)朴素贝叶斯
GaussianNB
实现了高斯朴素贝叶斯分类算法。假设特征的概率为高斯分布。
![fa967eddbd7711f69bb398f74f99ba4f.png](https://i-blog.csdnimg.cn/blog_migrate/f4090c1773ebb3b253e5e0c3544e7736.png)
![50d80b55306c47278e4526fe4191e747.png](https://i-blog.csdnimg.cn/blog_migrate/5fa6c5ed54fc7960280235d6c35ab217.png)
![f6fbd83414bdf20972fec2111e239164.png](https://i-blog.csdnimg.cn/blog_migrate/efe6b638bd5ea8b2d46e219e5b79c647.png)
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.naive_bayes import GaussianNB
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(X_train, y_train).predict(X_test)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4
2. 多项式(Multinomial)朴素贝叶斯
MultinomialNB
实现了服从多项式分布数据的朴素Bayes算法,是文本分类中使用的两个经典朴素Bayes变体之一(数据通常表示为词向量,尽管tf-idf向量在实践中也很有效)。对于每个类y,分布由向量
![cfe94f7a7a37663f67aa2d2a30a96473.png](https://i-blog.csdnimg.cn/blog_migrate/bbb7028f6fc170c639d339f9c527584e.png)
![2d4816ea99b2b45af6f2c60957a0d5c5.png](https://i-blog.csdnimg.cn/blog_migrate/b07ee14e4a5e3fde0952e98e64a1e293.png)
![c3e2d7dde84358beda01340c522fa260.png](https://i-blog.csdnimg.cn/blog_migrate/93d146ff1258954af2b2080aa1a07eab.png)
![01883833f8323da3f0f145d87dfd8b13.png](https://i-blog.csdnimg.cn/blog_migrate/37ae5b2c2075fe0016166e8225560060.png)
![a613bf2ced5e5fc96fdc393b8f956987.png](https://i-blog.csdnimg.cn/blog_migrate/f91e9b34ea2804bfc64e8df0dff60694.png)
![22f749cec7437a7339de309671145f00.png](https://i-blog.csdnimg.cn/blog_migrate/737f2674e4530f7dbbeaafb6c333ce4a.png)
![641c686f9e6c2c116185a04520815c25.png](https://i-blog.csdnimg.cn/blog_migrate/51883e440e1317fa6d67d6831119e7a4.png)
3. 补充(Complement)朴素贝叶斯
ComplementNB
实现了补充朴素Bayes(CNB)算法。CNB是标准多项式朴素Bayes(MNB)算法的一种改进,它特别适合于不平衡数据集。具体来说,CNB使用来自每个类的 complement 中的统计信息来计算模型的权重。CNB的发明者从经验上证明了CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上经常优于MNB(通常有相当大的幅度)。计算权重的步骤如下:
![6ae912fa05401a1843f258336807b92c.png](https://i-blog.csdnimg.cn/blog_migrate/fbef255780c721e9daa5bfa20a0e884a.png)
的文档j求和,
![4a69f0a972c796a3e1893b83b2bb7edd.png](https://i-blog.csdnimg.cn/blog_migrate/f427c4fdc91552ebe6e213b20081faf5.png)
![81f30221b576bf750ee71a9c80aea17d.png](https://i-blog.csdnimg.cn/blog_migrate/2abb8e9f08cf0abe221611aac1ea5673.png)
![02ea40c81bfd669976410b1840b97bd0.png](https://i-blog.csdnimg.cn/blog_migrate/743a84c77ffa963bb29943df08ec66e5.png)
- Rennie, J. D., Shih, L., Teevan, J., & Karger, D. R. (2003). Tackling the poor assumptions of naive bayes text classifiers. In ICML (Vol. 3, pp. 616-623).
4. 伯努利(Bernoulli)朴素贝叶斯
BernoulliNB
实现了用于多元Bernoulli分布数据的朴素Bayes训练和分类算法,即有多个特征,但每个特征都假定为二值(Bernoulli,boolean)变量。因此,此类算法要求样本以二值特征向量表示。如果传递任何其他类型的数据,
BernoulliNB
实例可以对其输入进行二值化(取决于
binarize
参数)。
伯努利朴素贝叶斯的决策规则基于
![dfddf7b616bd5908f18b5c649be39381.png](https://i-blog.csdnimg.cn/blog_migrate/79ee7b504973971e4b03bd13f3807e3f.png)
BernoulliNB
可能在一些数据集上表现得更好,尤其是那些短文档的数据集。如果时间允许,最好对两种模型进行评估。
参考文献:
- C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, pp. 234-265.
- A. McCallum and K. Nigam (1998). A comparison of event models for Naive Bayes text classification. Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
- V. Metsis, I. Androutsopoulos and G. Paliouras (2006). Spam filtering with Naive Bayes – Which Naive Bayes? 3rd Conf. on Email and Anti-Spam (CEAS).
5. 分类(Categorical)朴素贝叶斯
CategoricalNB
实现了用于分类分布数据的分类朴素贝叶斯算法。它假设每个由索引i描述的特征都有自己的分类分布。
对于训练集X中的每个特征i,
CategoricalNB
在类y的条件下,估计X的每个特征i的分类分布。样本的索引集定义为
=
{
1
,
…
,
m
}
,其中m是样本数。
给定类c的特征i中类别t的概率估计为:
![eeacd8048d513f7bd781a0aa6df1d731.png](https://i-blog.csdnimg.cn/blog_migrate/66f962551c086dfdda53ac46194d85b1.png)
![edef0471ad2e5785b8f481b34745e30f.png](https://i-blog.csdnimg.cn/blog_migrate/41c24bf8383cb356a8130492e878b61b.png)
![46cf413db33e64ae28cf39123ac63a45.png](https://i-blog.csdnimg.cn/blog_migrate/5f56f57f458b3a6b85860a9c7ae03cbb.png)
![9718576bb92ec9d12b7b3b1cc0be652d.png](https://i-blog.csdnimg.cn/blog_migrate/1bdaa176eff80444940dc6b9b617a2e2.png)
![4ae39f83036532f2df5a16bb5ad7477d.png](https://i-blog.csdnimg.cn/blog_migrate/6f17503a1116bf12c0c84355f1bb49c5.png)
CategoricalNB
假设对样本矩阵X进行了编码(例如在
OrdinalEncoder
的帮助下),因此每个特征i的所有类别都用数字(,,)表示,其中表示特征i的类别数。
6. Out-of-core 朴素贝叶斯模型拟合
朴素贝叶斯模型可以用来解决大规模的分类问题,在大规模的分类问题下,完整的训练集无法加载在内存中进行训练。为了处理这种情况,MultinomialNB
,
BernoulliNB
, 和
GaussianNB
实现了一个
partial_fit
方法,该方法可以像在Out-of-core classification of text documents中描述的那样,与其他分类器一起增量使用。所有朴素贝叶斯分类器都支持样本加权。
与
fit
方法相反,在第一次调用
partial_fit
的时候需要传递所有类标签列表。
有关scikit-learn中可用方案的概述,请参见 out-of-core learning文档https://urlify.cn/ymUJBn。
注意
朴素贝叶斯模型的
partial_fit
方法在调用时引入了一些计算开销。建议使用尽可能大的数据块大小,即可用RAM允许的大小。
本文由“壹伴编辑器”提供技术支持
☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏 文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:
欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)