朴素贝叶斯
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
条件概率就是事件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实现
Last updated
Was this helpful?