积跬步以致千里,积怠惰以致深渊
注:本篇文章在整理时主要参考了 周志华 的《机器学习》。
主要内容
通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。
先验概率:指根据以往经验和分析得到的概率;
后验概率:通过调查或其它方式获取新的附加信息,利用贝叶斯公式对先验概率进行修正,而后得到的概率。
举例说明:想象有 A、B、C 三个不透明的碗倒扣在桌面上,已知其中有(且仅有)一个瓷碗下面盖住一个鸡蛋。此时请问,鸡蛋在 A 碗下面的概率是多少?答曰 1/3。紧接着,有人揭开了 C 碗,发现 C 碗下面没有蛋。此时再问:鸡蛋在 A 碗下面的概率是多少?答曰 1/2。注意,由于有“揭开C碗发现鸡蛋不在C碗下面”这个新情况,对于“鸡蛋在 A 碗下面”这件事的主观概率由原来的 1/3 上升到了1/2。这里的先验概率就是 1/3,后验概率是 1/2。
也就是说“先”和“后”是相对于引起主观概率变化的那个新情况而言的。
贝叶斯决策
假设 n维特征向量:x=<x1,x2,...,xn> ;类别标签集合:y∈{c1,c2,...,ck} ;特征向量x属于类别ci的概率:P(y=ci | x)。
我们决策的目标是最小化分类错误率,贝叶斯最优分类器要对每个样本 x,选择能使后验概率 P( y=ci | x )最大的类别 c 标记。可在现实任务中后验概率通常难以直接获得,依据贝叶斯定理 P( y=ci | x ) 可写为:
将求后验概率P(y=ci | x)的问题转变为求先验概率P(y=ci)和条件概率P(x | y=ci)。
P( y=ci )
类先验概率 P( y=ci ) 表达了样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时,P(c) 可通过各类样本出现的频率来进行估计。
P( x | y=ci )
因为对于类条件概率 P( x | y=ci ) 来说,由于它涉及关于 x 所有属性的联合概率,直接根据样本出现的频率来估计将会遇到严重的困难(想象一下,d 个属性就会有 2 的 d 次方种可能的取值,在现实中,这个种类数往往大于训练样本)。
极大似然估计
针对这种情况,类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。实际上,概率分布的训练过程就是参数估计(parameter estimation)过程。对于条件概率 P( x | y=ci ),我们可以采用极大似然估计来根据数据采样来估计概率分布参数。对参数进行极大似然估计,就是试图在参数所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
需注意的是,这种参数化的方法虽然能使类条件概率估计变得相对简单,但估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。
极大似然估计是对类条件概率的分布形式进行假设,然后通过计算来对概率分布参数进行近似的方法,其是在对联合概率上的求解。但是,我们要对数据进行准确分类是否真的需要进行这么复杂的求解过程呢?本章针对样本属性间的独立性不同介绍了不同的使用贝叶斯决策论构建分类器的方法,下边我将一一进行介绍。
朴素贝叶斯分类器
朴素贝叶斯分类器(naive Bayes classifier)是采用了“属性条件独立性假设”的一种分类器:其通过对已知类别,假设所有属性相互独立,来避开联合概率这个障碍。因为这个假设在大多数情况都是不成立的,这也正是“朴素(naive)”的来源。(假设我们需要胸围、腰围、臀围来描述一个人的特征,很显然特征属性之间不是独立的)在属性条件独立的假设基础下,类条件概率可表示为:
其中 d 为属性数目,xi 为 x 在第 i 个属性上的取值。
显然,朴素贝叶斯分类器的训练过程就是基于训练集 D 来估计类先验概率 P(c), 并为每个属性估计条件概率 P( xi | c )。
对离散属性而言,令 Dc 表示数据集在类别 c 上的样本数,Dc,xi 表示 Dc 中在第 i 个属性上取值为 xi 的样本组成的集合, 则条件概率 P( xi | c) 可估计为。
对连续属性可考虑概率密度函数,假定p(xi|c)~N(μc,i, σ^2c,i),其中μc,i和σ^2c,i分别是第c类样本在第i个属性上取值的均值和方差,则:
拉普拉斯修正
若某个属性值在训练集中没有与某个类同时出现过,则直接进行概率估计和判别连乘式计算出的概率值为零(即,当其中任意一个属性的概率 P( xi | c ) 为0时,会导致总的类条件概率 P( x | c ) 为0)。因此,无论该样本的其他属性是什么,哪怕在其他属性上明显是“是”,分类结果都将是“否”,这显然不太合理。
为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常要进行“平滑(smoothing)”,常用“拉普拉斯修正(Laplacian correction)”。具体来说,另N表示训练集D中可能的类别数,Ni表示第i个属性可能的取值数,则:
拉普拉斯修正避免了因训练集样本不充分而导致概率估值为零的问题,并且在训练集变大时,修正过程所引入的先验(prior)的影响也会逐渐变得可忽略,使得估值渐趋向于实际概率值。
上式的计算结果通过简单的统计工作即可得到,这大大的降低了训练的难度。
半朴素贝叶斯分类器
朴素贝叶斯分类器采用了属性条件独立性假设,但在现实任务中,这个假设往往很难成立。于是尝试对条件独立性假设进行一定程度的放松,产生了一类成为“半朴素贝叶斯分类器(semi-naive Bayes classifiers)”的学习方法。
基本思想:适当考虑一部分属性间的相互依赖信息,从而既不需进行完全联合概率计算,又不至于彻底忽略了比较强的属性以来关系。
独依赖估计(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)
总结
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)“平滑”处理是解决零这个特殊值对结果不利影响的一个好策略
10)当遇到不完整的训练样本时,可通过使用EM算法对模型参数进行估计来解决