1. 章节主要内容
贝叶斯分类器是机器学习领域应用很广、效果不错,且算法相对通俗易懂的分类器,并且章节中的一些概念和知识在其它的机器学习算法中也经常的出现,所以对贝叶斯分类器很好的理解是很有必要的。
1)贝叶斯分类器的理论框架是什么?
贝叶斯分类器的理论框架基于贝叶斯决策论(Bayesian decision theory),而贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
具体来说,若我们决策的目标是最小化分类错误率,贝叶斯最优分类器要对每个样本 x,选择能使后验概率 P( c | x )最大的类别 c 标记。可在现实任务中后验概率通常难以直接获得,贝叶斯分类器使用的策略是“生成型模型”,即使用贝叶斯定理:
P( c | x ) = P( c, x ) / P( x ) = P( c )P( x | c ) / P( x ) 式(1)
将求后验概率P(c|x)的问题转变为求先验概率P(c)和条件概率P(x|c)。
2)P( c )和 P( x | c ) 如何求得
[1]P( c )
类先验概率 P(c) 表达了样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时,P(c) 可通过各类样本出现的频率来进行估计
[2]P( x | c )
因为对于类条件概率 P( x | c ) 来说,由于它涉及关于 x 所有属性的联合概率,直接根据样本出现的频率来估计将会遇到严重的困难(想象一下,d 个属性就会有 2 的 d 次方种可能的取值,在现实中,这个种类数往往大于训练样本)。针对这种情况,类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。对于条件概率 P( x | c ),我们可以采用极大似然估计来根据数据采样来估计概率分布参数。对参数 t 进行极大似然估计,就是试图在 t 所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
需注意的是,这种参数化的方法虽然能使类条件概率估计变得相对简单,但估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。
极大似然估计是对类条件概率的分布形式进行假设,然后通过计算来对概率分布参数进行近似的方法,其是在对联合概率上的求解。但是,我们要对数据进行准确分类是否真的需要要进行这么复杂的求解过程呢?本章针对样本属性间的独立性不同介绍了不同的使用贝叶斯决策论构建分类器的方法,下边我将一一进行介绍。
3)样本属性条件独立时的 P( x | c ) 求解
[1]朴素贝叶斯分类器
朴素贝叶斯分类器(naive Bayes classifier)是采用了“属性条件独立性假设”的一种分类器:其通过对已知类别,假设所有属性相互独立,来避开联合概率这个障碍。在属性条件独立的假设基础下,类条件概率可表示为:
P( x | c ) = P( x1 | c ) * P( x2 | c ) * ... * P( xd | c )
其中 d 为属性数目,xi 为 x 在第 i 个属性上的取值。
显然,朴素贝叶斯分类器的训练过程就是基于训练集 D 来估计类先验概率 P(c), 并为每个属性估计条件概率 P( xi | c )。
令 Dc 表示数据集在类别 c 上的样本数,Dc,xi 表示 Dc 中在第 i 个属性上取值为 xi 的样本组成的集合, 则条件概率 P( xi | c) 可估计为
P( xi | c ) = |Dc,xi| / |Dc| 式(2)
上式的计算结果可以通过简单的统计工作即可得到,这大大的降低了训练的难度。
[2]概率估计“平滑”处理
在属性条件独立假设下,类条件概率表示为了每个单独属性的概率的乘积,当其中任意一个属性的概率 P( xi | c ) 为0时,会导致总的类条件概率 P( x | c ) 为0,这显然不太合理。为了避免其它属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常要进行“平滑”处理,具体来说就是对分子和分母分别加上一个合适的数值,使得单独属性的类条件概率不为零。比如“拉普拉斯修正”,令 Ni 表示第 i 个属性可能的取值数,则式(2)可修正为:
P( xi | c ) = ( |Dc,xi| + 1 ) / ( |Dc| + Ni ) 式(3)
4)样本属性独依赖时的 P( x | c ) 求解
朴素贝叶斯分类器是建立在属性条件独立性假设的基础上的,但在现实任务中这个假设往往很难成立,所以人们尝试对属性条件独立性假设进行一定程度的放松,由此产生了一类称为“半朴素贝叶斯分类器”的学习方法。
独依赖估计(One-Dependent Estimator,简称ODE)是半朴素分类器最常用的一种策略,顾名思义,所谓“独依赖”就是假设每个属性在类别之外最多仅依赖于一个其它属性。这时类条件概率可转化为:
P( x | c ) = P( x1 | c, pa1 ) * P( x2 | c, pa2 ) * ... * P( xd | c, pad )
其中 pai 为属性 xi 所依赖的属性,称为 xi 的父属性。对每个属性,若其父属性已知,则可采用类似式(3)的办法来估计概率值 P( xi | c, pai )。
于是,问题的关键就转化为如何确定每个属性的父属性,不同的做法产生不同的独依赖分类器。
[1]所有属性都依赖于同一个属性:SPODE(Super-Parent ODE)
[2]最大带权生成树算法基础上构建依赖:TAN(Tree Augmented naive Bayes)
[3]对每个属性构建SPODE,并将结果集成起来作为最终结果:AODE(Averaged One-Dependent Estimator)
需注意的是,当依赖属性个数变多时,需要的训练样本数量将以指数增加。因此,若训练数据非常充分,泛化性能能有可能提升;但在有限样本条件下,则又会陷入估计高阶联合概率的泥沼
5)样本属性相关性未知时的 P( x | c ) 求解
在计算 P( x | c ) 时,由于不知道属性之间的具体相关性,所以对于依赖属性的个数和依赖关系很难进行选择。贝叶斯网是一个有效的算法,能对属性之间的依赖关系进行计算和评估,以找出一个最佳的分类模型。
[1]贝叶斯网的介绍
贝叶斯网(Bayesian Network)亦称“信念网”(belief network),它借助有向图来刻画属性之间的依赖关系,并使用条件概率表来描述属性的联合概率分布。
具体来说,一个贝叶斯网由结构 G 和参数 O 两部分构成,G 是个有向无环图,每个点是一个属性,每一条边代表一个直接依赖关系;参数 O 包含了每个属性的条件概率表。
所以一个训练好的贝叶斯网样知道了样本属性的最好依赖关系,以及不同依赖之间的条件概率,并能利用这些信息来对我们关心的属性进行预测。
[2]贝叶斯网的联合概率分布
在一个确定的贝叶斯网中,给定父结点集,贝叶斯网假设每个属性与它的非后裔属性独立,则对于属性x1, x2, ..., xd的联合概率分布定义为:
即属性的联合概率分布是每个具体属性在其父结点集下的条件概率的乘积
[3]贝叶斯网络的学习
若网络结构已知,即属性间的依赖关系已知,则贝叶斯网的学习过程相对简单,只需通过对训练样本“计数”,估计出每个结点的条件概率表即可。但在现实应用中我们往往并不知晓网络结构,于是,贝叶斯网学习的首要任务就是根据训练数据集来找出结构最“恰当”的贝叶斯网。具体来说,我们先定义一个评分函数,以此来评估贝叶斯网与训练数据的契合程度,然后基于这个评分函数来寻找结构最优的贝叶斯网。
不幸的是,从所有可能的网络结构空间搜索最优贝叶斯网结构是一个NP难问题,难以快说求解。有两种常用的策略能在有限时间内求得近似解:
第一种是贪心法,例如从某个网络结构出发,每次调整一条边,直到评分函数值不再降低为止
第二种是通过给网络结构施加约束来削减搜索空间,例如将网络结构限定为树形结构等。
[4]贝叶斯网的推断
在训练好贝叶斯网后就可以用来回答“查询”,即通过一些属性变量的观测值来推测其它属性变量的取值。
最理想的是直接根据贝叶斯网定义的联合概率分布来精确计算后验概率,不幸的是,这样的推断已被证明是NP难的。此时需借助“近似推断”,通过降低精度要求,在有限时间内求得近似解。在现实应用中,贝叶斯网的近似推断常使用吉布斯采样来完成。
比如,对已知的观察属性 E 的取值 e ,我们要判断在属性 Q 上会出现取值 q 的概率是多少,即求 P( q | e ) 的值,运用贝叶斯网 + 吉布斯采样的推断过程可以总结为以下几步:
a)对 Q 进行随机取值获得属性 Q 上的初始状态 q0
b)将当前的 Q 上的取值与 e 结合,并使用贝叶斯网去推断下一时刻的 Q 上取值为多少
c)判断新生成的 Q 与我们要预测的 q 是否一致,一致则计数器 n 加一
c)重复步骤 b)- c)T次,通过计算 n / T 我们可以近似得到 P( q | e ) 的值
6)训练样本不完整时的处理方法
在之前的讨论中,我们一直假设训练样本所有的属性值都已被观测到,但在现实情况中,我们往往会遇到“不完整”的训练样本,这些样本的不完整性体现在其存在“未观测”的变量。因为训练样本中存在未观测的变量,所以之前对概率分布的概率似然估计就无法进行计算了。
EM(Expectation-Maximization)算法是常用的估计参数隐变量的利器,它是一种迭代式的方法,其基本思想就和它的名字一样分为两个步骤,第一步(E步)求隐变量的期望;第二步(M步)寻找参数最大似然估计;不断重复第一、第二步直到收敛到局部最优解
2. 基本知识
1)“判别式模型”(discriminative models)
直接通过建模P(c|x)来预测类别c的模型就是判别式模型,主要算法:决策树、BP神经网络、支持向量机等
2)“生成式模型”(generative models)
先对联合概率分布P(x,c)建模,然后再由此获得P(c|x)的模型就是生成式模型,主要算法:朴素贝叶斯、贝叶斯网络、马尔可夫随机场
3)大数定律(law of large numbers)
这是一种描述当试验次数很大时所呈现的概率性质的定律。通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。偶然中包含着某种必然。
4)极大似然估计(Maximum Likelihood Estimation)
根据数据采样来估计概率分布参数的经典方法,比如对参数 t 进行极大似然估计,就是试图在 t 所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
5)吉布斯采样(Gibbs sampling)
吉布斯采样是一种随机采样方法,首先根据已知初始值 e 产生一个初始点 q0,然后进行 T 次采样,每次根据第 t-1 次的结果 q(t-1) 生成一个新的第 t 次的采样样本 qt,每次采样后与查询变量 q 进行比对,一致则计数器 n 加一。T 次采样结束后, n 除以 T 的值可作为后验概率 P( q | e ) 的近似估算
6)EM(Expectation-Maximization)算法
EM算法使用两个步骤交替计算:第一步是期望(E)步,利用当前估计的参数值来计算对数似然的期望值;第二步是最大化(M)步,寻找能使 E 步产生的似然期望最大化的参数值。然后,新得到的参数值重新被用于 E 步并开始下一轮的计算,直到收敛到局部最优解。
3. 总结
1)贝叶斯分类器是基于贝叶斯决策论的基础上构建的,目的是对每个样本 x,选择能使后验概率 P( c | x )最大的类别标记
2)现实中 P( c | x ) 较难获得,所以将求后验概率 P( c | x ) 的问题转变为求先验概率 P( c ) 和条件概率 P( x | c )
3)根据大数定律,P( c ) 可通过各类样本出现的频率来进行估计
4)在完全遵守“属性条件独立性假设”时,类条件概率 P( x | c ) 可通过每个属性单独的条件概率的乘积得到
5)在适当放松“属性条件独立性假设”时,类条件概率 P( x | c ) 可通过每个属性在其父结点下的条件概率的乘积得到
6)在不清楚属性的条件独立性情况时,贝叶斯网是一个有效的算法,能对属性之间的依赖关系进行计算和评估,以找出一个最佳的分类模型
7)贝叶斯网学习的首要任务就是根据训练数据集来找出结构最“恰当”的贝叶斯网结构
8)“平滑”处理是解决零这个特殊值对结果不利影响的一个好策略
9)当遇到不完整的训练样本时,可通过使用EM算法对模型参数进行估计来解决