朴素贝叶斯

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。

条件概率就是事件X在另外一个事件Y已经发生条件下的概率。条件概率表示为P(X|Y)。

三种朴素贝叶斯算法

不同的朴素贝叶斯算法,主要是对P(xi|y)的分布假设不同,进而采用不同的参数估计方式。我们能够发现,朴素贝叶斯算法,主要就是计算P(xi|y),一旦P(xi|y)确定,最终属于每个类别的概率,自然也就迎刃而解了。

高斯型朴素贝叶斯(GaussianNB)

适用于连续变量,其假定各个特征xi在各个类别y下是正态分布的。

伯努利型朴素贝叶斯(BernoulliNB)

这个算法假设样本每个特征只有两种可能,比如:0、1。

适用于离散变量,通常需要对数据做预处理,即把样本特征二值化转换为0和1。

多项式型朴素贝叶斯(MultinomailNB)

适用于多元离散变量。

比较

一般来说,如果样本特征的分布大部分是连续值,适用GaussianNB会比较好。如果样本特征的分布大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

优点

1,朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率

2,对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练

3,对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点

1,理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小的时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

2,需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

3,由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

4,对输入数据的表达形式很敏感。

实现

对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

基于伯努利的sklearn实现

基于伯努利不用sklearn的python实现

参考1参考2

Last updated

Was this helpful?