1.
朴素贝叶斯,从名字上就可以明显感觉到这是和概率有着很大关系的一个算法。我们在这里只谈二分类的问题,我觉得如果你会通过贝叶斯解决二分类问题,那多分类问题也不是一件难事了。
(0)贝叶斯公式
P(Y,X)=P(Y|X)×P(X)=P(X|Y)×P(Y) ,这个就是传说中的贝叶斯公式。
(1)如何通过概率去解决一个分类问题?现在如果有人问你这么一个问题:你需要知道哪些概率你就可以预测出这个样本是属于哪个类别的了?
你可能会说:如果告诉我这个样本属于各个类别的概率,我找到那个概率最大的,然后我就可以很响亮的说这个样本是属于这个类别的了。朴素贝叶斯就是这个么做的,它算出这个样本属于各个类别的概率,然后找到概率最大的那个类别作为输出。我们用概率化的语言去解释:这个样本最有可能属于这个类别,所以我们认为这个样本的类别就是这个概率最大的类别。贝叶斯的做法和我们直觉上的思路是一致的。
(2)具体化(1)所说的问题
假设现在有一个样本
X=[x1,x2,....xn]
(这里[ ]里面的是这个样本X的n个特征),这个样本可能属于+1或者-1类。我们要去判断这个样本属于哪一类?你会怎么做?
你可能会去求样本X属于+1类别的概率。这个怎么表述出来呢?我们用这么一个式子去描述
P(Y=+1∣X=[x1,x2,....xn])
,解释为:在已知
X=[x1,x2,....xn]
的前提下,Y=+1出现的概率是多少。
可能会有人会有疑惑这个概率为什么不是
P(Y=+1,X=[x1,x2,....xn])
这个呢?我在刚开始看贝叶斯的时候也在疑惑这个问题,
P(Y=+1,X=[x1,x2,....xn])
这个表示的意思是:
X=[x1,x2,....xn]
和Y=+1同时发生的概率,这个感觉上不就是样本X属于+1类别的概率么?
P(Y=+1,X=[x1,x2,....xn])
和
P(Y=+1∣X=[x1,x2,....xn])
到底有什么区别的呢?我们通过贝叶斯公式展开
P(Y=+1,X=x1,x2,....xn])=P(Y=+1∣X=[x1,x2,....xn])×P(X=[x1,x2,....xn])
这个时候我们可以看到那个联合概率是条件概率和
P(X=[x1,x2,....xn])
的乘积,我们可以直观的看出来联合概率和条件概率的区别:
X=[x1,x2,....xn]
到底是已知还是未知的?如果是已知的话,就是条件概率;如果是未知的话,就是联合概率(公式中可以看到,它多乘了一项
P(X=[x1,x2,....xn])
)。我们现在是已经知道
X=[x1,x2,....xn]
,去求X属于+1类别的概率,所以它是一个条件概率。当你分不清这个概率什么意思的时候,把公式写出来,这个过程可能会帮助到你。
(3)
如果你很清楚上面所说的内容,那么就可以很愉快的告诉你,你一定会理解朴素贝叶斯算法的,放轻松,继续看下去就行了。关于上面说的内容,如果有疑惑的话,我觉得应该先把疑惑解决掉,再继续你前进的步伐。清楚为什么你要这么做!!!!
2
(1)
我们在1里面已经说了,要先去求
P(Y=+1∣X=[x1,x2,....xn])
,问题来了怎么求?
我们可以用贝叶斯公式对这个条件概率进行形式上的变化。
P(Y=+1∣X=[x1,x2,....xn])=P(Y=+1,X=[x1,x2,....xn])P(X=[x1,x2,....xn])=P(X=[x1,x2,....xn]∣Y=+1)×P(Y=+1)P(X=[x1,x2,....xn])利用贝叶斯公式
我们在这里可以发现我们还是不容易求出这个概率到底是多少。所以朴素贝叶斯做了一个很强的假设:假设X的各个特征是相互独立的。意思就是样本的每个特征和其他特征都是完全没有关系的,没有相关性的。这是一个不讲道理的假设,不过通过这个假设可以让朴素贝叶斯算法非常的简洁高效,也正是因为这个假设,所以才在贝叶斯前面加上朴素两个字。
现在接着上式把这个假设代入进去:
=P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)P(X=[x1,x2,....xn])根据特征相互独立把P(X=[x1,x2,....xn]∣Y=+1)分解成连乘=P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)+P(Y=−1)×∏i=ni=1P(Xi=xi∣Y=−1)对分母进行分解
我们在这里通过极大似然估计去计算这里面的每一项的概率值。(我们会在最后介绍极大似然估计)
P(Y=+1)
是训练集中+1类别的样本出现的概率,用类别+1的样本个数除以训练集的样本总数。
P(Y=−1)
同样的求法。
P(Xi=xi∣Y=+1)
是类别为+1的样本中
Xi=xi
出现的概率,用类别为+1并且的样本第i个特征是
xi
的样本数量除以类别为+1的样本个数。
P(Xi=xi∣Y=+1)=P(Xi=xi,Y=+1)P(Y=+1)=#(Xi=xi,Y=+1)#(Y=+1)#代表个数
P(Xi=xi∣Y=−1)
同样的求法。
这些都是很基本的概率计算。
(2)
从(1)中的推导可以得到
P(Y=+1∣X=[x1,x2,....xn])=P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)+P(Y=−1)×∏i=ni=1P(Xi=xi∣Y=−1)
P(Y=−1∣X=[x1,x2,....xn])=P(Y=−1)×∏i=ni=1P(Xi=xi∣Y=−1)P(Y=+1)×∏i=ni=1P(Xi=xi∣Y=+1)+P(Y=−1)×∏i=ni=1P(Xi=xi∣Y=−1)
我们会计算这两个概率分别是多少,找到较大的那一个。我们可以发现这两个式子中的分母是一样的,不会影响到这两个概率的大小关系,所以我们只需要直接比较这两个式子的分子大小即可。
(3)拉普拉斯平滑(Laplace smoothing)
P(Y=+1)和P(Xi=xi∣Y=+1)
可能会出现为0的情况,现在假设训练集中就真没有-1类别的样本,那么我们通过上面的计算方法进行计算就会得到
P(Y=−1)=0
。这个时候就要考虑了:在(2)中所写的公式会出现分母为0的情况,还有就是类别为-1的概率真的是0么?这时就需要加入拉普拉斯平滑了。
令
P(Xi=xi∣Y=+1)==#(Xi=xi,Y=+1)+λ#(Y=+1)+Kλλ>0,通常我们令λ=1。K表示样本的第i个特征总共有K种可能性
为什么要这么做?
这么做可以保证两点:
第一:
P(Xi=xi∣Y=+1)>0
第二:
∑Kl=1P(样本的第i个特征为xil∣Y=+1)=1
xil表示第i个特征的第l种可能性,l=[1,2...K]。
我觉得有必要举个例子了。
假设现在样本的第i个特征有5种可能:1,2,3,4,5,
我们就令K=5,通过拉普拉斯平滑,我们可以有以下保证:
P(Xi=1|Y=+1)>0,P(Xi=2|Y=+1)>0,P(Xi=3|Y=+1)>0,P(Xi=4|Y=+1)>0,P(Xi=5|Y=+1)>0P(Xi=1|Y=+1)+P(Xi=2|Y=+1)+P(Xi=3|Y=+1)+P(Xi=4|Y=+1)+P(Xi=5|Y=+1)=1
同理令
P(Y=+1)=#(Y=+1)+λ#(训练集总个数N)+2λ在这里只会出现+1和−1这两种情况
同样可以做到类似上面两点的保证。
P(Y=+1)>0
P(Y=+1)+P(Y=−1)=1
注:如果某天你遇到了一个新的问题,你想加入拉普拉斯平滑,但是你又不确定K是多少?你可以去算一下当上面所说的概率和为1的时候,K是多少,这个K的值就是拉普拉斯平滑里的K的值。
4
关于朴素贝叶斯算法的总结就结束了。如果你有时间的话,建议把《机器学习实战》里面的关于朴素贝叶斯的程序敲一遍!!!如果不熟悉python的话,建议百度搜索《机器学习实战笔记》,已经有人在博客中写了代码的注释。
一个具体的题目帮助你更好的理解:
不考虑拉普拉斯平滑:
考虑拉普拉斯平滑:
5.一些关于朴素贝叶斯的思考
(1)极大似然估计(Maximum Likelihood Estimate,MLE)
极大似然估计是参数估计的方法之一。 用一个例子说明极大似然估计:我们如何根据一些观测值去估计这个事件发生的概率。我们一般的做法是:找到能让这些观测值最有可能出现的那个概率作为我们的估计值。假设现在有这么一组观测值:发生,发生,没发生,发生。接下来需要估计这个事件发生的概率,我们的估计值是四分之三。当事件发生的概率是四分之三的时候,这组观测值发生的可能性最大,不信的话,你可以算一下试一试。极大似然估计有一套固定的步骤:
在很多地方都体现着这种极大似然估计的思想。在第一篇文章——学习理论中,讲到估计大瓶中的橘色小球的概率,我们通过抽取一小部分小球,然后用这些小球中橘色小球的个数除以小球总数当做橘色小球的概率。这个例子中也就透露出极大似然估计的思想。为什么要用“这些小球中橘色小球的个数除以小球总数当做橘色小球的概”?我从大瓶中抽取出来一组小球可以有很多颜色组合,可是我偏偏就是抽取到了这一组,我就认为这一组合出现的概率很大。所以我估计橘色小球的概率的时候,这个估计值要满足一点:使这组小球出现的概率最大。这是符合我们的直观感觉的。我们通过建立似然函数求最大值,求出来这个估计值是这组小球中橘色小球的个数除以小球总数。
网上有很多对极大似然估计意义思想的总结,我是越看越迷糊。除了那些,我又想不到更好的描述方式,所以我这里就简单的写了这几个例子,希望你对极大似然估计能有所体会吧。
(2)关于生成模型和判别模型
判别模型是直接对f(X)或者
P(Y|X)
进行建模,一步到位。
生成模型是先求出来
P(X,Y)
然后再去求
P(Y|X)
。我们的朴素贝叶斯就是生成模型,它把求
P(Y|X)
的问题转换成了求
P(X,Y)
的问题。
(3)
怎么用第一讲_学习理论的知识解释贝叶斯算法?贝叶斯算法怎么保证E_in趋近0和E_inE_out很接近的?
补充:(今天突然想到一点)
解释一下,朴素贝叶斯算法是怎么保证E_in趋近0的。
举个例子:
假设现在有
P(Y=1|X)=0.8,P(Y=−1|X)=0.2
我们可以用0-1 loss function去衡量下错误的代价。
如果我们预测类别是+1,
那么可能发生错误的代价是0.2(即0.2*1)。
如果我们预测类别是-1,
那么可能发生错误的代价是0.8(即0.8*1,发生错误的概率乘以错误的代价)。
我们可以看出来应该把那个概率较大的类别当做我们的预测类别,因为发生错误的代价较小,这也就是朴素贝叶斯所做的。
我们就可以理解成朴素贝叶斯的模型是
f(x)=argmaxP(Y|X)
。
在0-1损失函数的衡量下,如果将朴素贝叶斯的模型应用到训练集上,可以保证在训练集上的所有样本的错误代价和最小,从而保证了E_in趋近0。
我觉得这样解释是有点牵强的,别的更好的我也想不到了。如果有人很清楚这个问题的话,希望能告诉我。