原理:
在假定属性之间相互独立的条件下,对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,然后找出最大的条件概率对应的类别。
条件独立公式:如果X和Y相互独立,则有:
条件概率公式:
或者说:
接着看全概率公式:
然后很容易得出贝叶斯公式:
我们只要计算出所有的K个条件概率,找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。
优点:
- 发源于古典数学理论,有稳定的分类效果
- 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类
缺点:
- 朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是很难成立的,在属性个数比较多或是属性之间相关性较大时,分类效果不好。
- 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率
- 对输入数据的表达形式很敏感。比如我们的数据有两个特征A和B,第一个特征是a,a,b,b,如果第二个特征我们用的是d,e,f,g这样的形式,那么其实还好,数据相关性不一定那么强.如果之前对数据的表达形式做了整理,比如d,e发现其实很接近,我们归成了一类de, f和g也归成了一类fg,那么第二个特征就是de,de,fg,fg,这样就和第一个特征强相关了,不独立了。也就是特征的表达形式是很敏感的,因为它会对独立性假设有影响。
三种算法:
GaussianNB:如果样本特征的分布大部分是连续值,使用GaussianNB会比较好
class sklearn.naive_bayes.GaussianNB(priors=None)
- priors:先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)。
对象
- class_prior_:每个样本的概率
- class_count:每个类别的样本数量
- theta_:每个类别中每个特征的均值
- sigma_:每个类别中每个特征的方差
MultinomialNB:如果样本特征的大部分是多元离散值,使用MultinomialNB比较合适
class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
- alpha:先验平滑因子,默认等于1,当等于1时表示拉普拉斯平滑。
- fit_prior:是否去学习类的先验概率,默认是True
- class_pr