朴素贝叶斯算法是有监督的学习算法,解决的是分类问题,如客户是否流失、是否值得投资、信用等级评定等多分类问题。该算法的优点在于简单易懂、学习效率高、在某些领域的分类问题中能够与决策树、神经网络相媲美。但由于该算法以自变量之间的独立(条件特征独立)性和连续变量的正态性假设为前提,就会导致算法精度在某种程度上受影响。
贝叶斯决策理论
假设现在我们有一个数据集,它由两类数据组成,数据分布如下图所示:
我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率,用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率,那么对于一个新数据点(x,y),可以用下面的规则来判断它的类别:
- 如果p1(x,y)>p2(x,y),那么类别为1
- 如果p1(x,y)<p2(x,y),那么类别为2
也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。
要搞明白朴素贝叶斯分类器,我们首先要搞明白几个概念:先验概率、后验概率、条件概率、贝叶斯定理。
先验概率:
事件发生前的预判概率。可以是基于历史数据的统计,可以由背景常识得出,也可以是人的主观观点给出。一般都是单独事件概率,如P(A),P(B)。
后验概率:
事件发生后求的反向条件概率;或者说,基于先验概率求得的反向条件概率。概率形式与条件概率相同。
条件概率:
一个事件发生后另一个事件发生的概率。一般的形式为P(A|B)表示事件B发生的条件下事件A发生的概率。
贝叶斯定理:
在贝叶斯定理中:
P(c|x)是后验概率,一般是我们求解的目标。表示当拥有x这个条件后c的概率,由于有x这个条件,后验概率可能与先验概率不同;
P(x|c)是条件概率,又叫似然概率,它表示在承认先验的条件下另一个与之相关的随机变量的表现,一般是通过历史数据统计得到(即通过一个已知的小样本统计得到),注意它也是后验概率,但是在计算贝叶斯公式时是已知量。
P(c) 是先验概率,它表示我们对一个随机变量概率最初的认识,一般都是人主观给出的。贝叶斯中的先验概率一般特指它。
P(x)其实也是先验概率,只是在贝叶斯公式中往往被认为是已知的,因此它一般被当做一个常量看待。
P(x,c)是联合概率,即x和c同时发生时的概率。
如果要更直观地看P(c|x),我们可以换种表达形式,把它写成:P(类别|特征)。
其中特征x可以是一个向量,即有很多个特征:
同理,c也可以是一个向量。
举例:
c可以取值c1,c2,c3,假设下列条件已知:
那么我们可以计算下列p(c|x):
由于p(c1|x)、p(c2|x)、p(c3|x)的和必为1,我们可以得到oa+pb+qc=m,因为oa,pb,qc的值都是可以计算出来的,m自然也就得到了。
属性条件独立性假设:
当我们想估计上面的P(c|x)时,它往往是所有特征上的联合概率,难以从有限的训练样本直接估计而得。
因此我们采用了一种属性条件独立性假设:对已知类别,假设所有属性相互独立。或者说,假设每个属性独立地对分类结果发生影响。
如果两个事件A和B是相互独立的,那么有:
x可以写成:
故p(c|x)可写成:
注意p(x)=。
由于分母是常量,与c无关,故我们计算c的各种取值的可能性时并不会对各结果的相对大小产生影响。因此可以忽略。
贝叶斯信念网络
贝叶斯网络由一个有向无环图(DAG)和条件概率表(CPT)组成。 贝叶斯网络通过一个有向无环图来表示一组随机变量跟它们的条件依赖关系,使用条件概率表(Conditional Probability Table , 简称CPT)来描述属性的联合概率分布。
具体来说,一个贝叶斯网B由结构G和参数两部分构成。即。G是一个有向无环图,其每个结点对应于一个属性,若两个属性有直接依赖关系,则它们由一条边连接起来;参数定量描述这种依赖关系,假设属性Xi在G中的父结点集为。
包含了每个属性的条件概率表。
举例:
西瓜问题的一种贝叶斯网结构和属性" 根蒂"的条件概率表。从图中网络结构可看出," 色泽" 直接依赖于"好瓜"和"甜度",而"根蒂"则直接依赖于"甜度"。进一步从条件概率表能得到"根蒂"对"甜度"量化依赖关系,如P(根蒂=硬挺|甜度=高) =0.1等。
贝叶斯网结构有效地表达了属性间的条件独立性.。给定父结点集,贝叶斯网假设每个属性与它的非后裔属性独立,于是将属性的联合概率分布定义为:
如果是上面这个例子,则:
x3和x4在给定x1的取值时独立,x4和x5在给定x2的取值时独立。
贝叶斯网中三个变量之间的典型依赖关系:
在"同父" (common parent) 结构中,给定父结点x1的取值,则x3与x4条件独立。在"顺序"结构中,给定x的值,则y与z条件独立。v型结构(vstructure)亦称"冲撞"结构,给定子结点x4的取值,x1与x2必不独立;奇妙的是,若x4的取值完全未知,则V型结构下x1与x2却是相互独立的,这样的独立性称为"边际独立性"。
一个变量取值的确定与否,能对另两个变量间的独立性发生影响,这个现象并非V型结构所特有。如在同父结构中,若x1的取值未知,则x3和x4就不独立;在顺序结构中,若x值不给定,则y和z就不独立。
为了分析有向图中变量间的条件独立性,可使用"有向分离" (D-separation)。
我们把有向图转变为一个无向图:找出有向图中的所有V型结构,在V型结构的两个父结点之间加上一条无向边;将所有有向边改为无向边。产生的无向图称为"道德圈" (moral graph) 。
举例:
对上面的例子
进行有向分离,可得其道德图如下:
此时我们可得x1取值确定时x3和x4独立,x2取值确定时x4和x5独立,x1取值确定时x2和x3独立,x1取值确定时x3和x5独立,x2取值确定时x3和x5独立。
若网络结构己知,即属性间的依赖关系己知,则贝叶斯网的学习过程相对简单,只需通过对训练样本"计数",估计出每个结点的条件概率表即可。但在现实应用中我们往往并不知晓网络结构,于是,贝叶斯网学习的首要任务就是根据训练数据集来找出结构最"恰当"的贝叶斯网。"评分搜索"是求解这一问题的常用办法。
具体来说,我们先定义一个评分函数(score function) ,以此来评估贝叶斯网与训练数据的契合程度,然后基于这个评分函数来寻找结构最优的贝叶斯网。
对贝叶斯网学习而言,模型就是一个贝叶斯网,同时,每个贝叶斯网描述了一个在训练数据上的概率分布,自有一套编码机制能使那些经常出现的样本有更短的编码。我们应选择那个综合编码长度(包括描述网络和编码数据)最短的贝叶斯网,这就是"最小描述长度" (Minimal Description Length,简称MDL) 准则。
给定训练集, 贝叶斯网在D上的评分函数可写为:
(注意这里我们把类别也看作一个属性,xi是一个包括示例和类别的向量)
是贝叶斯网的参数个数;表示描述每个参数所需的字节数。
是贝叶斯网B 的对数似然。
也就是说,的第一项是计算编码贝叶斯网B所需的字节数,第二项是计算B所对应的概率分布需多少字节来描述D。
若,即每个参数用1字节描述,则得到AIC (Akaike Information Criterion)评分函数:
若,即每个参数用字节描述,则得到BIC (Bayesian Information Criterion)评分函数:
若,即不计算对网络进行编码的长度,则评分函数退化为负对数似然,相应的,学习任务退化为极大似然估计。
若贝叶斯网的网络结构G固定,则评分函数的第一项为常数。此时,最小化等价于对参数的极大似然估计。
由和可知:
参数能直接在训练、数据D上通过经验估计获得。是D上的经验分布。
为了最小化评分函数, 只需对网络结构进行搜索,而候选结构的最优参数可直接在训练集上计算得到。不幸的是,从所有可能的网络结构空间搜索最优贝叶斯网结构是一个NP难问题,难以快速求解。
有两种常用的策略能在有限时间内求得近似解:
第一种是贪心法,例如从某个网络结构出发,每次调整一条边(增加、删除或调整方向),直到评分函数值不再降低为止;
第二种是通过给网络结构施加约束来削减搜索空间,例如将网络结构限定为树形结构等。
贝叶斯网训练好之后就能用来回答"查询" (query),即通过一些属性变量的观测值来推测其他属性变量的取值。通过已知变量观测值来推测待查询变量的过程称为"推断" (inference) ,己知变量观测值称为"证据" (evidence)。
最理想的是直接根据贝叶斯网定义的联合概率分布来精确计算后验概率,不幸的是,这样的"精确推断"己被证明是NP难的。
在现实应用中,贝叶斯网的近似推断常使用吉布斯采样(Gibbs sampling)完成:
令为待查询变量,为证据变量,已知其取值为。
目标是计算后验概率,其中是待查询变量的一组取值。
吉布斯采样算法先随机产生一个与证据E=e一致的样本q0作为初始点,然后每步从当前样本出发产生下一个样本。
具体来说,在第t次采样中,算法先假设,然后对非证据变量逐个进行采样改变其取值,采样概率根据贝叶斯网B和其他变量的当前取值(即Z=z)计算获得。假定经过T次采样得到的与q一致的样本共有个,则可近似估算出后验概率:
实质上,吉布斯采样是在贝叶斯网所有变量的联合状态空间与证据E=e一致的子空间中进行"随机漫步" (random walk)。每一步仅依赖于前一步的状态,这是一个"马尔可夫链" (Markov chain)。在一定条件下,无论从什么初始状态开始,马尔可夫链第t步的状态分布在时必收敛于一个平稳分布(stationary distribution),对于吉布斯采样来说,这个分布恰好是。
由于马尔可夫链通常需很长时间才能趋于平稳分布,因此吉布斯采样算法的收敛速度较慢。此外若贝叶斯网中存在极端概率"0" 或"1" ,则不能保证马尔可夫链存在平稳分布,此时吉布斯采样会给出错误的估计结果。
贝叶斯网络实例:
其中smoking表示吸烟,其概率用P(S)表示,lung Cancer表示肺癌,一个人在吸烟的情况下得肺癌的概率用P(C|S)表示,X-ray表示需要照医学上的X光,肺癌可能会导致需要照X光,吸烟也有可能会导致需要照X光(所以smoking也是X-ray的一个原因),所以,因吸烟且得肺癌而需要照X光的概率用P(X|C,S)表示。
Bronchitis表示支气管炎,一个人在吸烟的情况下得支气管炎的概率用P(B|S),dyspnoea表示呼吸困难,支气管炎可能会导致呼吸困难,肺癌也有可能会导致呼吸困难(所以lung Cancer也是dyspnoea的一个原因),因吸烟且得了支气管炎导致呼吸困难的概率用P(D|C,B)表示。
lung Cancer肺癌简记为C,Bronchitis支气管炎简记为B,dyspnoea呼吸困难简记为D,且C = 0表示lung Cancer不发生的概率,C = 1表示lung Cancer发生的概率,B等于0(B不发生)或1(B发生)也类似于C,同样的,D=1表示D发生的概率,D=0表示D不发生的概率,便可得到dyspnoea的一张概率表,如上图的最右下角所示。
对于上图,在一个人已经呼吸困难(dyspnoea)的情况下,其抽烟(smoking)的概率是多少呢?(即求p(s|d=1))
计算公式:
上式中:
第一行到第二行的展开请看贝叶斯网中三个变量之间的典型依赖关系和下面的西瓜举例。
第二行:对联合概率关于b,x,c求和(在d=1的条件下),从而消去b,x,c,得到s和d=1的联合概率。
第三行:最开始,所有变量都在sigma(d=1,b,x,c)的后面(sigma表示对“求和”的称谓),但由于P(s)和“d=1,b,x,c”都没关系,所以,可以提到式子的最前面。而且P(b|s)和x、c没关系,所以,也可以把它提出来,放到sigma(b)的后面,从而式子的右边剩下sigma(x)和sigma(c)。
Variable elimination表示的是变量消除的意思。
因子图:
将一个具有多变量的全局函数因子分解,得到几个局部函数的乘积,以此为基础得到的一个双向图叫做因子图(Factor Graph)。通俗来讲,所谓因子图就是对函数进行因子分解得到的一种概率图。
假定对于函数,有下式成立:
其中,其对应的因子图包括:
变量节点;
因子(函数)节点;
边通过下列因式分解结果得到:在因子(函数)节点和变量节点之间存在边的充要条件是存在。
举例:
现在有一个全局函数,其因式分解方程为:
其中fA,fB,fC,fD,fE为各函数,表示变量之间的关系,可以是条件概率也可以是其他关系(如马尔可夫随机场Markov Random Fields中的势函数)。
为了方便表示,可以写成:
其对应的因子图为:
上述因子图可以简化为:
所以,在因子图中,所有的顶点不是变量节点就是函数节点,边线表示它们之间的函数关系。
因子图和贝叶斯网络和马尔科夫随机场(Markov Random Fields)一样,也是概率图的一种。
在概率图中,求某个变量的边缘分布是常见的问题。这问题有很多求解方法,其中之一就是把贝叶斯网络或马尔科夫随机场转换成因子图,然后用sum-product算法求解。换言之,基于因子图可以用sum-product 算法高效的求各个变量的边缘分布。
举例:
给定下图所示的贝叶斯网络或马尔科夫随机场:
根据各个变量对应的关系,可得:
其对应的因子图为(以下两种因子图的表示方式皆可):
贝叶斯网络构造因子图的方法:
贝叶斯网络中的一个因子对应因子图中的一个结点;
贝叶斯网络中的每一个变量在因子图上对应边或者半边;
结点g和边x相连当且仅当变量x出现在因子g中。
Sum-product算法:
对于下图所示的因子图:
如何由联合概率分布求边缘概率分布呢?
联合概率和边缘概率的概念:
联合概率表示两个事件共同发生的概率。A与B的联合概率表示为或。
边缘概率(又称先验概率)是某个事件发生的概率。边缘概率是这样得到的:在联合概率中,把最终结果中不需要的那些事件合并成其事件的全概率而消失(对离散随机变量用求和得全概率,对连续随机变量用积分得全概率)。这称为边缘化(marginalization)。A的边缘概率表示为P(A),B的边缘概率表示为P(B)。
事实上,某个随机变量fk的边缘概率可由x1,x2,x3, ..., xn的联合概率求到,具体公式为:
即对xk外的其它变量的概率求和,最终剩下xk的概率。
如何计算上式呢?
如果f能被分解如下:
借鉴分配率,我们可以提取公因子:
变量的边缘概率等于所有与他相连的函数传递过来的消息的积,所以计算得到:
上面可以分为两步:
第一步:对于f的分解图,根据蓝色虚线框、红色虚线框围住的两个box外部的消息传递;
于是可得:
第二步:根据蓝色虚线框、红色虚线框围住的两个box内部的消息传递;
根据,我们有:
上述计算过程将一个概率分布写成两个因子的乘积,而这两个因子可以继续分解或者通过已知得到。这种利用消息传递的观念计算概率的方法便是sum-product算法。