前言
前面一段时间整理了很多关于树模型的文章,而接下来的篇章,主要是介绍关于概率模型的知识。
在这章中,将会出现各种各样新的名词,例如朴素贝叶斯、贝叶斯估计、极大似然估计等等,这些都是概率模型最基本的知识点,也是重中之重的基础部分。
深入理解朴素贝叶斯
将朴素贝叶斯拆解为两个不相关的名词:朴素 和 贝叶斯。为了更好的理解这两个概念,我们先来了解一些概率论的基础知识。
1.贝叶斯定理
朴素贝叶斯是基于贝叶斯定理提出的,那么贝叶斯定理又是由什么组成的呢?
为了解决这个问题,我们先了解几个专业的术语
独立事件: 考虑两个事件AAA和BBB。当事件AAA发生的概率不依赖于事件BBB发生时,则事件AAA和事件BBB是独立的事件。例如,我们有两个硬币,同时掷这两个硬币,那么两枚硬币的正面概率都是0.5,而其中任何一个硬币出现正反情况时都不会影响另外一个硬币的结果,因此,该事件是独立事件。与独立事件对立的事件是从属事件,最简单的例子就是从袋子中摸球不放回,下一次摸球出现的结果和上一次的结果有关,这种叫做从属事件。
边际概率: 边际概率非常容易理解,就是一个事件AAA发生的概率,不与任何参数有关,记为P(A)P(A)P(A)。
联合概率: 联合概率是描述不同事件AAA和事件BBB或者更多的事件同时发生的概率,P(A,B)P(A,B)P(A,B)或者P(B,A)P(B,A)P(B,A),其中P(A,B)=P(B,A)P(A,B)=P(B,A)P(A,B)=P(B,A)。
条件概率: 条件概率顾名思义就是在某种条件下发生事件的概率。如果事件AAA是在事件BBB的基础上发生的,那么可以记为P(A∣B)P(A|B)P(A∣B),即事件BBB发生的情况下事件AAA发生的概率。
若事件BBB能且只能与两两互不相容的事件A1,A2,⋯ ,An,⋯A_1,A_2,\cdots,A_n,\cdotsA1,A2,⋯,An,⋯之一同时发生,即:
B=∑i=1∞BAiB = \sum\limits_{i=1}^{\infty}{BA_i}B=i=1∑∞BAi
由于P(AiB)=P(B)P(Ai∣B)=P(Ai)P(B∣Ai)P(A_iB)=P(B)P(A_i|B) = P(A_i)P(B|A_i)P(AiB)=P(B)P(Ai∣B)=P(Ai)P(B∣Ai)
故
P(Ai∣B)=P(Ai)P(B∣Ai)P(B)P(A_i|B)=\frac{P(A_i)P(B|A_i)}{P(B)}P(Ai∣B)=P(B)P(Ai)P(B∣Ai)
上面的式子就是贝叶斯公式,这个公式非常重要,是理解朴素贝叶斯最关键的一步。
2.朴素贝叶斯
朴素贝叶斯法是基于贝叶斯定理(就是我们前面一节介绍的贝叶斯定理)与特征条件独立假设的分类方法。对于给定的数据集,首先基于特征条件独立假设学习输入输出的联合概率分布;然后基于此模型,对给定的输入xxx,利用贝叶斯定理求出后验概率最大的输出yyy。朴素贝叶斯法实现简单,学习与预测的效率都很高,是一种很常用的方法。
首先定义,训练样本集为:T={(x1,y1),(x2,y2),⋯ ,(xN,yN)}T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}T={(x1,y1),(x2,y2),⋯,(xN,yN)},由P(X,Y)P(X,Y)P(X,Y)独立同分布产生。朴素贝叶斯的学习第一步就是学习样本集的联合概率分布P(X,Y)P(X,Y)P(X,Y),对于什么是联合概率分布,如果你不理解,你就可以立即欸为学习一颗颗决策树,后面对测试数据进行预测时需要用到联合概率分布。
先验概率分布如下:
P(Y=ck), k=1,2,⋯ ,KP(Y=c_k),\,\,\,\,k=1,2,\cdots,KP(Y=ck),k=1,2,⋯,K
条件概率分布如下:
P(X=x∣Y=ck)=P(X(1)=x(1),⋯ ,X(n)=x(n)∣Y=ck), k=1,2,⋯ ,KP(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)}|Y=c_k),\,\,\,\,\,\,k=1,2,\cdots,KP(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck),k=1,2,⋯,K
于是学习得到联合概率分布P(X,Y)P(X,Y)P(X,Y)。
在前面一节我们知道,联合概率与条件概率和边际概率之间的关系可以描述为下面的式子:
P(B∣A)=P(B,A)P(A)P(B|A)=\frac{P(B,A)}{P(A)}P(B∣A)=P(A)P(B,A)
于是得到P(B,A)=P(B∣A)⋅P(A)P(B,A)=P(B|A)\cdot P(A)P(B,A)=P(B∣A)⋅P(A),对应到上面先验概率就是P(A)P(A)P(A),条件概率就是P(B∣A)P(B|A)P(B∣A)。
下面对上述定义的条件概率进行细致的分析,如果真的和上面形容的那样,那么该模型的参数就太多了。这是因为,当特征xjx_jxj的取值有很多个时,例如可以取SjS_jSj个(这里讨论的特征是离散特征,连续特征以后再分析)。YYY的取值有KKK种,那么该模型的参数就有K∏j=1nSjK\prod\limits_{j = 1}^n {{S_j}}Kj=1∏nSj,学习困难太大了。
那么有什么办法能够简化上述的条件概率呢?
那就是朴素贝叶斯另一个关键的地方:朴素。朴素有天真、普通的意思,在朴素贝叶斯分类器中,朴素最大的作用就是对条件概率分布作了条件独立性的假设。当然在真实情况下,各个特征之间不可能是独立的,而在朴素贝叶斯分类器中却做了这么强的假设。有的人肯定会说,朴素贝叶斯的方法存在很大漏洞!分类效果肯定不好,恰恰相反,朴素贝叶斯最神奇的地方就在于其大大简化了模型且分类效果出奇的好!名称朴素效果可一点不“朴素”。
基于此,我们可以借助条件独立性的假设来对条件概率分布做简化,简化如下:
P(X=x∣Y=ck)=P(X(1)=x(1),⋯ ,X(n)=x(n)∣Y=ck)=∏j=1nP(X(j)=x(j)∣Y=ck)
\begin{aligned}
P(X=x|Y=c_k)&=P(X^{(1)}=x^{(1)},\cdots,X^{(n)}=x^{(n)}|Y=c_k)\\
&=\prod\limits_{j = 1}^n {{P(X^{(j)}=x^{(j)}|Y = c_k)}}
\end{aligned}
P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
这里是朴素贝叶斯最重要的步骤,条件独立假设使朴素贝叶斯算法变得简单,但有的时候会损失一定的分类准确率毕竟天下没有免费的午餐。
好,到这里朴素贝叶斯需要从数据中学习的东西全部介绍完了,那么肯定有人就会问,学习这些概率有什么用呢?
朴素贝叶斯模型就是由条件概率分布和先验概率分布组成的,就好比集成树模型是由一颗颗学习好的树组成的。
对于一个新输入的测试集xxx,我们需要通过学习成功的朴素贝叶斯模型计算出后验概率分布P(Y=ck∣X=x)P(Y=c_k|X = x)P(Y=ck∣X=x),将后验概率最大的类作为xxx的类输出。(几个重要的点 。1、这里的xxx表示的是一个向量;2、后验概率分布指的是一个概率分布,也就是很多个概率组成的数据。3、输出的结果是比较得出的,在所有输出的概率中选择最大的概率类别)
后验概率分布与贝叶斯定理
上面说过,我们需要计算后验概率分布P(Y=ck∣X=x)P(Y=c_k|X = x)P(Y=ck∣X=x),这个式子和前面介绍的条件概率分布P(X=x∣Y=ck)P(X=x|Y=c_k)P(X=x∣Y=ck)是相对的,那么怎么才能由后者求得前者呢?这个就需要结合前面学习的贝叶斯定理,即:
P(Ai∣B)=P(Ai)P(B∣Ai)P(B)P(A_i|B)=\frac{P(A_i)P(B|A_i)}{P(B)}P(Ai∣B)=P(B)P(Ai)P(B∣Ai)
为什么说这个定理重要呢,那就是将P(Ai∣B)P(A_i|B)P(Ai∣B)换为P(Y=ck∣X=x)P(Y=c_k|X=x)P(Y=ck∣X=x),将P(B∣Ai)P(B|A_i)P(B∣Ai)换为P(X=x∣Y=ck)P(X=x|Y=c_k)P(X=x∣Y=ck),将P(Ai)P(A_i)P(Ai)换为P(Y=ck)P(Y=c_k)P(Y=ck),那么P(B)P(B)P(B)又可以表示为什么呢?这里需要知道另一个比较重要的定理,那就是全概率公式,具体如下:
P(B)=∑i=1∞P(Ai)P(B∣Ai)P(B)=\sum\limits_{i=1}^{\infty}{P(A_i)P(B|A_i)}P(B)=i=1∑∞P(Ai)P(B∣Ai)
至于这个式子是怎么来的,我们不做详细的介绍,有兴趣的可以去看概率论教材。
最终,我们得到下面的贝叶斯公式:
P(Y=ck∣X=x)=P(X=x∣Y=ck)P(Y=ck)∑kP(X=x∣Y=ck)P(Y=ck)P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum\limits_{k}{P(X=x|Y=c_k)P(Y=c_k)}}P(Y=ck∣X=x)=k∑P(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)
特别注意!分母是一个恒等式,即计算概率分布所用到的分母都是一样的,那么我们可以将分母舍弃,得到:
P(Y=ck∣X=x)=P(X=x∣Y=ck)P(Y=ck)P(Y=c_k|X=x)=P(X=x|Y=c_k)P(Y=c_k)P(Y=ck∣X=x)=P(X=x∣Y=ck)P(Y=ck)
而等式右边的第一部分不就是前面化简的条件概率分布吗,带入得到:
P(Y=ck∣X=x)=P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=c_k|X=x)=P(Y=c_k)\prod\limits_{j}{P(X^{(j)}=x^{(j)}|Y=c_k)}P(Y=ck∣X=x)=P(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
注意这里的等式左边是针对标签YYY的一个取值ckc_kck,对于所有的类别,都需要计算他们的概率,然后选择概率最大的类别,数学表示如下:
y=argmaxckP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)y= \mathop {\arg \max }\limits_{{c_k}}{P(Y=c_k)\prod\limits_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}y=ckargmaxP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
到此,朴素贝叶斯的全部内容就介绍完毕!
3.朴素贝叶斯的参数估计方法
上面一小节,我们详细介绍了朴素贝叶斯是如何推导出的,但是并没有介绍联合概率分布是怎么计算的。在这一节,我们通过极大似然估计给出计算联合概率分布的方法。
由于联合概率分布是由先验概率分布和条件概率分布计算得到,那么先验概率分布的极大似然估计是:
P(Y=ck)=∑i=1NI(yi=ck)N, k=1,2,⋯ ,KP(Y=c_k)=\frac{\sum\limits_{i=1}^NI(y_i=c_k)}{N},\,\,\,\,\,\,k=1,2,\cdots,KP(Y=ck)=Ni=1∑NI(yi=ck),k=1,2,⋯,K
设第jjj个特征x(j)x^{(j)}x(j)的可能取值集合为{aj1,aj2,⋯ ,ajSj}\{a_{j1},a_{j2},\cdots,a_{jS_j}\}{aj1,aj2,⋯,ajSj},条件概率P(X(j)=ajl∣Y=ck)P(X^{(j)}=a_{jl}|Y = c_k)P(X(j)=ajl∣Y=ck)的极大似然估计是:
P(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N{I(x_i^{(j)}=a_{jl},y_i=c_k)}}{\sum\limits_{i=1}^N{I(y_i=c_k)}}P(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)i=1∑NI(xi(j)=ajl,yi=ck)
式中,xi(j)x_i^{(j)}xi(j)是第iii个样本的第jjj个特征;ajla_{jl}ajl是第jjj个特征的可能取的第lll个值;III为指示函数,其实就是满足条件值为1,不满足值为0的意思。
通过上面定义的两个式子,就可以计算出朴素贝叶斯的联合概率分布。
4.实例分析
学习任何算法都离不开实例分析,本节的实例参考李航老师的《统计学习方法》中的例题4.1,具体的我用图片形式放在下面了
这个例题非常简单,但是非常有意义,训练集中共有三个特征,且三个特征都是离散变量,取值的种类都不是很多。
3.贝叶斯估计
贝叶斯估计,从名字上大致猜到,这是一种估计参数的方法,前面了解到了极大似然估计法,那在这里为什么又要学习一个贝叶斯估计呢?那肯定是存在极大似然估计不能解决的情况,所以需要引入贝叶斯估计。
那么什么情况是极大似然估计解决不了,而必须用到贝叶斯估计呢?我们先来看一下极大似然估计的式子,就拿条件概率的估计式举例:
P(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N{I(x_i^{(j)}=a_{jl},y_i=c_k)}}{\sum\limits_{i=1}^N{I(y_i=c_k)}}P(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)i=1∑NI(xi(j)=ajl,yi=ck)
这个式子存在一个致命的问题,那就是存在分子为0的情况。之所以为什么会出现,来看,分子是∑i=1NI(xi(j)=ajl,yi=ck)\sum\limits_{i=1}^N{I(x_i^{(j)}=a_{jl},y_i=c_k)}i=1∑NI(xi(j)=ajl,yi=ck),其中I()I()I()是表示函数,如果III中的情况不存在,则值为0,而分子是所有样本点的累加情况。假如,对于yi=cky_i=c_kyi=ck,xij=ajlx_i^{j}=a_{jl}xij=ajl的情况一个样本都没有,那么分子就是0,而训练集训练出的模型此概率为0,那如果遇到样本点满足这个情况,模型就无法给出答案,也即学习失败。
为了解决这个问题,引入了贝叶斯估计,其核心思想是引入一个参数λ\lambdaλ,如下:
Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)+λ∑i=1NI(yi=ck)+SjλP_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum\limits_{i=1}^N{I(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}}{\sum\limits_{i=1}^N{I(y_i=c_k)+S_j\lambda}}Pλ(X(j)=ajl∣Y=ck)=i=1∑NI(yi=ck)+Sjλi=1∑NI(xi(j)=ajl,yi=ck)+λ
其中λ>0\lambda>0λ>0,当λ=0\lambda=0λ=0贝叶斯估计变为极大似然估计,当λ=1\lambda=1λ=1,这个时候称为拉普拉斯平滑,对于所有的样本,都满足如下条件:
Pλ(X(j)=ajl∣Y=ck)>0∑l=1SjPλ(X(j)=ajl∣Y=ck)=1P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)>0\\
\sum\limits_{l=1}^{S_j}P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=1
Pλ(X(j)=ajl∣Y=ck)>0l=1∑SjPλ(X(j)=ajl∣Y=ck)=1
上面第一个式子很好理解,就是在贝叶斯估计中,所有的概率值都是大于0的,不存在小于0的概率值,这也是贝叶斯估计的优势;第二个式子就是当YYY取值为ckc_kck时,此时所有的xxx的概率和为1,即举个例子,当YYY取值为1时,xxx取值为1,2,3,那么这三个概率的总和为1。其实这也很好理解,因为对于第jjj个特征,有SjS_jSj个取值,而在贝叶斯估计中分母就是加了一个SjS_jSj,所以SjS_jSj个分子中的λ\lambdaλ相加就消去了。
对于先验概率的贝叶斯估计为:
Pλ(T=ck)=∑i=1NI(yi=ck)+λN+KλP_{\lambda}(T=c_k)=\frac{\sum\limits_{i=1}^N{I(y_i=c_k)+\lambda}}{N+K\lambda}Pλ(T=ck)=N+Kλi=1∑NI(yi=ck)+λ
总结
到这里,关于贝叶斯估计基本知识就结束了,但是并没有完全结束,因为我们还没有讨论当特征取值为连续值时的概率分布又是如何。这个问题等以后在探讨。其实贝叶斯估计的内容完全不止这么一点,更多的推导内容感兴趣可以自己百度。
写完这篇文章,我对贝叶斯分类器的工作原理大致有了了解,其实就是一个概率模型,首先针对训练集学习一个联合概率分布,然后对于每一个输入xxx,求其在这个模型下的后验概率分布,基于后验概率分布找到最优解。