目录
- 朴素贝叶斯相关知识点回顾
- 1.1. 什么是朴素贝叶斯分类器
- 1.2. 朴素贝叶斯推断
- 1.3. 朴素贝叶斯学习
- sklearn中朴素贝叶斯类库的简介
- 2.1. GaussianNB类
- 2.2. MultinomialNB类
- 2.3. BernoulliNB类
这是《西瓜书带学训练营·实战任务》系列的第四篇笔记
1. 朴素贝叶斯相关知识点回顾
1.1. 什么是朴素贝叶斯分类器
判别式模型(discriminative models):像决策树、BP神经网络、支持向量机等,都可以归入判别式模型,它们都是直接学习出输出Y与特征X的关系,如:
- 决策函数 Y=f(X)
- 条件概率 P(Y|X)
生成式模型 (gernerative models):先对联合概率分布 P(X,Y) 进行建模,然后再由此获得P(Y|X) = P(X,Y)/P(X)
贝叶斯学派的思想:
贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。数据大家好理解,被频率学派攻击的是先验概率,一般来说先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布的模型,比如正态分布,beta分布等。这个假设一般没有特定的依据,因此一直被频率学派认为很荒谬。虽然难以从严密的数学逻辑里推出贝叶斯学派的逻辑,但是在很多实际应用中,贝叶斯理论很好用,比如垃圾邮件分类,文本分类
如何对P(X,Y)进行建模?
假如我们的分类模型样本是:
(x(1)1,x(1)2,...x(1)n,y1), (x(2)1,x(2)2,...x(2)n,y2),...(x(m)1,x(m)2, ..., x(m)n,ym)
则
P(X, Y) = P(Y) * P( X = (x1, x2, ..., xn) | Y )
其中
P( X = (x1, x2, ..., xn) | Y ) = P( x1 | Y) * P( x2 | Y, x1) * ... P( xn | Y, x1, ... , xn-1)
这是一个超级复杂的有n个维度的条件分布,很难求出
朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:
P( X = (x1, x2, ..., xn) | Y ) = P( x1 | Y) * P( x2 | Y) * ... * P( xn | Y)
1.2. 朴素贝叶斯推断
1.3. 朴素贝叶斯学习
需要从训练样本中学习到以下两个参数:
-
先验概率 P(c)
P(c)表示了样本空间中各类样本所占的比例
根据大数定律,当训练集中包含充足的独立同分布样本时,P(c)可根据各类样本出现的频率来估计
-
类条件概率(又称为似然) P(xi | c)
(1)如果 xi 是离散的,可以假设 xi符合多项式分布,这样得到 P(xi | c) 是在样本类别 c 中,特征 xi 出现的频率
(2)如果 xi 是连续属性,可以假设 P(xi | c) ~ N( μc,i , σ2c,i )
2. sklearn中朴素贝叶斯类库的简介
在scikit-learn中,一共有3个朴素贝叶斯的分类算法类
GaussianNB:先验为高斯分布的朴素贝叶斯
MultinomialNB:先验为多项式分布的朴素贝叶斯
BernoulliNB:先验为伯努利分布的朴素贝叶斯
这三个类适用的分类场景各不相同
一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好
如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适
如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
2.1. GaussianNB类
GaussianNB类的主要参数仅有一个,即先验概率priors
这个值默认不给出,如果不给出此时P(Y=c)= mc / m,如果给出的话就以priors 为准
在使用GaussianNB的fit方法拟合数据后,我们可以进行预测。此时预测有三种方法
predict方法:就是我们最常用的预测方法,直接给出测试集的预测类别输出;
predict_proba方法:给出测试集样本在各个类别上预测的概率;
predict_log_proba方法:和predict_proba类似,它会给出测试集样本在各个类别上预测的概率的一个对数转化;
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
#拟合数据
clf.fit(X, Y)
#进行预测
clf.predict([[-0.8, -1]])
2.2. MultinomialNB类
MultinomialNB假设特征的先验概率为多项式分布,即如下式:
MultinomialNB参数比GaussianNB多,但是一共也只有仅仅3个
-
参数alpha:为上面的常数λ。如果你没有特别的需要,用默认的1即可。如果发现拟合的不好,需要调优时,可以选择稍大于1或者稍小于1的数
-
参数fit_prior:是否要考虑先验概率,如果是false,则所有的样本类别输出都有相同的类别先验概率;否则可以自己用第三个参数class_prior输入先验概率,或者不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率
-
参数class_prior:输入先验概率,若不输入第三个参数class_prior让MultinomialNB自己从训练集样本来计算先验概率
2.3. BernoulliNB类
其中,x i 只能取0或1
BernoulliNB一共有4个参数,其中3个参数的名字和意义和MultinomialNB完全相同
唯一增加的一个参数是binarize,这个参数主要是用来帮BernoulliNB处理二项分布的。如果不输入,则BernoulliNB认为每个数据特征都已经是二元的。否则的话,小于binarize的会归为一类,大于binarize的会归为另外一类
参考资料:
(1) 周志华《机器学习》
网友评论