第5 章 贝叶斯分 类 本章重点 .最大后验概率的意义。 .生成方法与判别方法的定义。 .高斯判别分析的原理。 .高斯判别分析与线性判别分析的关系。 .朴素贝叶斯的原理及应用。微课视频 感知机是从训练数据中学习一个用于分类的超平面,对于新的数据(样本), 可用得到的 超平面判断其类别。而losiy|通过学习 itc回归则是将分类当成一个条件概率p(x)问题, 得到相应的概率分布。lgc回归直接给定了条件概率的分布,这是一种比较简单的情 ogisti 形,更一般的概率分类方法是通过贝叶斯理论得到,即在给定样本 x 时,使得概率p(y|x) 最大,这也称为贝叶斯分类方法(或贝叶斯分类器), 这种方法与贝叶斯决策理论有关。贝叶 斯分类器可以给出分类结果的概率。在一些机器学习应用中,给出结果出现的概率会更有 意义,如在诊断疾病时,给出病人可能患某种疾病的概率比直接给出他是否患病更有意义。 在介绍贝叶斯分类器前,先介绍贝叶斯决策理论。 贝叶斯决策理论(Bayesdecisiontheory)是关于信息不完全的情况下应该如何进行决 策的理论,是统计学习中的一个基本方法。它与著名数学家ThomasBayes提出的贝叶斯 理论相关。贝叶斯理论是为了解决逆概率问题而提出的,即如何通过发生的事件反推造成 该事件发生的原因。该理论在ThomasBayes生前并没有受重视,而是在他去世以后,他的 好友在重新翻阅他生前的论文时发现了他提出的这一理论。在贝叶斯决策理论中,决策者 会根据历史的数据学习其中的规律,掌握其变化的可能状况及各种状况的分布情况,对部分 未知信息进行概率或者期望估计,并根据估计的概率或期望做出最优决策。对于分类问题, 贝叶斯决策理论要考虑如何基于已有的概率和误分类损失得到最优的类标记。 贝叶斯分类是贝叶斯学习的一种具体应用。贝叶斯学习是指利用贝叶斯决策理论对未 知知识进行学习的过程,这是一种基于概率的学习方法,该方法采用概率表示所有形式的不 确定性,通过概率规则实现学习和推理。 不同的贝叶斯分类方法的差异通常在于概率估计方法和风险估计方法的差异。例如, 朴素贝叶斯分类和贝叶斯网的主要差别在于对条件概率的估计方法不同。基于贝叶斯决策 理论的贝叶斯分类方法是机器学习和模式识别中的一个基本方法,尤其是朴素贝叶斯分类 方法,能够有效地对海量数据进行分析建模,构造相应的分类器,能对未知数据进行分类 识别。 第5章 贝叶斯分类 67 下面举例说明贝叶斯决策理论在分类中的应用。 假设由n 个样本构成训练数据集为X=[x1,x2,…,xn],样本的类标记向量为y=[y1, y2,…,yn],另外假设这些样本有k 个类,即c=[c1,c2,…,ck ]。若用0-1损失函数(loss function)来度量分类决策函数f(X)的分类误差,则有 L (yi,f (xi ) ) = 1, yi ≠f (xi ) {0, yi =f(xi) 定义分类决策函数f(X)的期望风险函数: R (f ) =E [L (y,f (X ) ) ] =ΣK k=1 [L c( k ,f (X ) )p c( k |X ) ] 为了让期望风险最小化,只需要对每个样本的期望风险最小化,也就是说,对于任意一 个样本x,则要最小化下面的目标函数: minΣK k=1 [L c( k ,yi )p c( k |x) ] (5.1) 由式(5.1)可以得到下面的结果 max ck p c( k |x) (5.2) 由式(5.2)可以看出:要让决策函数的期望风险最小,将p c( k|x) 中最大的ck 作为类 别。在某些情况下,p c( k|x) 也称为后验概率(posteriorprobability)。后验概率是统计学 上的概念,它与先验分布有关。后验概率是指在给出相关证据或数据后所得到的条件概率, 后验概率分布通常是未知的,需要通过数据才能推导出来。 从式(5.2)可知,要让分类决策函数的期望风险最小,首先要得到p c( k|x) 的分布。通 常有两种方法可以用来获得这种概率分布。 (1)判别方法(discriminativeapproach):其对应的模型为判别模型。 (2)生成方法(generativeapproach):其对应的模型为生成模型。 判别方法会直接用决策函数(如感知机等)或p c( k|x) 的分布函数(如logistic回归等, 也称为概率判别模型)来得到预测模型;而生成方法会通过贝叶斯定理来学习p(ck|x),即 p(ck |x)= p(x|ck)p c( k ) p(x) 式中,p(ck)称为先验概率(priorprobability),当训练集中包括足够多的独立同分布样本 时,它的分布通常由训练样本中各个类别所占比得到;而p(x|ck)称为后验概率;p(x)是归 一化证据因子。在样本给定的情况下,证据因子与类标记无关。典型的生成模型有高斯判 别分析、朴素贝叶斯和隐马尔可夫模型等。 判别方法和生成方法都是用来获取后验概率的,它们之间的区别:判别方法直接假定 p(ck|x)的形式,然后通过一种学习策略(如极大似然估计)来学习该函数的参数;生成方法 则不是这样,它通过计算p(x|ck),然后通过贝叶斯定理得到p(ck|x)。p(x|ck )表示样本 x 是由某个分布函数产成(生成)的,这就是该方法被称为生成模型的原因。生成方法是按 不同的类别学习模型,例如,狗和猫是不同的类,它们的特征会有所不同,因此可针对狗和猫 分别学习相应的模型,然后在测试时,看测试样本属于哪类的概率大,就将其归到哪类中。 简单地说,判别方法和生成方法的区别:判别方法假定了p(ck|x)的分布;而生成方法则会 通过计算p(x|ck)和p(ck),然后通过贝叶斯定理计算p(ck|x)。 68 机器学习实用教程(微课版) 本章将介绍两种经典的生成模型:高斯判别分析和朴素贝叶斯。 5.1 高斯判别分析 高斯判别分析(Gaussiandiscriminantanalysis,GDA)是一种生成模型。对于一个二分 类问题,假设训练数据集为X=[x1,x2,…,xn],相应的类标记为y= [y1,y2,…,yn ] ,yi∈ {0,1}。假设多元高斯分布为 N (μ,Σ)= 1 (2π)d/2|Σ|1/2e{ -12 ( (x-μ)TΣ-1(x-μ)) 式中,Σ 为协方差矩阵;|Σ|为协方差矩阵的行列式;μ 为均值向量。定义概率分布为 p(x|y =0)=N (μ0,Σ) {p(x|y =1)=N (μ1,Σ) (5.3) 从式(5.3)可以看出,这两类数据是由两个多元高斯分布生成的,这两个多元高斯分布 的协方差是一样,但均值向量不同。图5.1为具有相同协方差矩阵、不同均值的两个二元高 斯分布的等高线示意图。 图5.1 具有相同协方差矩阵、不同均值的两个二元高斯分布的等高线示意图 若假定类标记服从伯努利分布,即p y( ) =θy (1-θ)1-y ,其中θ 为伯努利分布的参数。 由贝叶斯定理可知,p(y|x)=p (x,y ) p(x) ,而p(x)通常为固定值,为了得到p(y|x),可通过 最大后验概率估计得到高斯判别模型的参数,具体的目标函数为 maxL (μ0,μ1,Σ,θ) =lnΠm i=1 p (xi,yi,θ;μ0,μ1,Σ ) =lnΠm i=1 p(xi|yi;μ0,μ1,Σ)p(yi;θ) (5.4) 对式(5.4)中的各个参数求偏导,并令其为0,就可得到所估计的参数,即 第5章 贝叶斯分类 69 θ^=1 nΣn i=1 I(yi =1) μ^0 =Σn i=1 I(yi =1)xi Σn i=1 I(yi =0) μ^1 =Σn i=1 I(yi =1)xi Σn i=1 I(yi =1) Σ^=1n Σn i=1 xi -μyi ( ) xi -μyi ( ) T ì . í ......... ......... (5.5) 式中,I(yi=1)为当yi=1时,返回为1,否则返回为0。μyi 表示与类标记yi 一样的μ,如当 yi=1,则μyi =μ1。 在得到高斯判别模型的所有参数后,可以通过下面的公式预测新样本x 的类别,即 p (yk |x) =p(x|yk)p(yk)=N (μk ,Σ )^θ = 1 (2π)d/2|Σ|1/2e -12 . ( (x-μ)TΣ-1(x-μ)) è . . .÷θ^ (5.6) 将式(5.5)的结果代入式(5.6),然后取对数,并去掉常量,则有 lnp yk |x ( ) =xTΣ^-1μ^k -12 μ^kΣ^-1μ^k -12 xΣ^-1x +lnθ^ (5.7) 可用式(5.7)计算样本x 属于yk 的概率,将x 归入概率最大的那一类。在式(5.7)中, Σ^-1μ^k 是一个向量,可以令其等于wk ;-12 μ^kΣ^-1μ^k -12 xΣ^-1x+lnθ^为常量,也可以令其 等于bk ,则式(5.7)可以改写为 lnp (yk |x) =wkxT +bk (5.8) 从式(5.8)可以看出,对样本x 的分类问题,最终转换成通过一个超平面进行判断,因此该方 法称为线性判别分析(lineardiscriminantanalysis,LDA)。 这里讨论的是二分类问题,因此只需要一个超平面。如果有K 个类,则需要K -1个 超平面。图5.2是用线性判别分析对数据分类,白色的斜线为分类超平面,这两类数据是由 相同协方差、不同均值的高斯分布生成的,给出了一个用线性判别分析进行分类的示意图。 讨论上面的问题,假定两个类别的数据分别由两个多元高斯函数生成,这两个高斯函数 的协方差矩阵一样,只是均值向量不一样。若它们的协方差矩阵不一样,均值向量也不一 样,所得到的方法称为二次判别法(quadraticdiscriminantanalysis,QDA)。 在sklearn的discriminant_analysis包中,提供了一个可以执行线性判别分析的类: LinearDiscriminantAnalysis。可用下面的方法来实例化该类: lda=LinearDiscriminantAnalysis(solver="svd") 在实例化这个类后,要以调用fit()方法训练模型,并用predict()方法预测样本的类别。 具体的调用例子如下: 70 机器学习实用教程(微课版) 图5.2 用线性判别分析对数据分类 y_pred=lda.fit(X,y).predict(X) 在sklearn 的discriminant_analysis 包中也提供用于执行二次判别分析的类: QuadraticDiscriminantAnalysis。其具体使用方法与LinearDiscriminantAnalysis类一样。 从上面介绍的内容可以看出:可由高斯判别分析推导出线性判别分析,但无法从线性 判别分析推导出高斯判别分析。高斯判别分析是一种生成方法,而线性判别分析是一种判 别方法,这说明生成方法和判别方法在某些情况下是有联系的。在第4章介绍logistic回归 时,通过高斯判别模型和贝叶斯公式推导出了logistic回归。这也说明在某些情况下生成 方法和判别方法会有联系。若假设p(x|y=1)和p(x|y=0)为两个不同的泊松分布,则 通过类似的方式也可以得到logistic回归。这就说明logistic回归可用来对由高斯分布和 泊松分布所产生的数据进行分类。而高斯判别分析只能对基于高斯分布的数据进行有效分 类,不能对基于泊松分布的数据进行有效分类。但需要注意的是通过logistic回归却得不 到高斯判别模型。 5.2 朴素贝叶斯 通过贝叶斯定理学习p c( k|x) 时,最重要的一步是计算后验概率p(x|ck ),5.1节在介 绍高斯判别模型时,假定p(x|ck)的分布为多元高斯分布,但在很多情况下并不知道p(x| ck)的真实分布,这时只有直接求p(x|ck)。假设样本x 包含m 个特征,即x=[f1,f2,…, fm ],则有 p(x|ck)=p(f1,f2,…,fm |ck) (5.9) 式(5.9)是一个联合概率分布,并不知道这些特征之间的关系,因此要得到相应的概率 分布是一件非常困难的事情。假设这些特征都是相互独立(也称为属性条件独立性假设 (attributeconditionalindependenceassumption)),则有 p(x|ck)=Πm i=1 p(fi|ck) 第5章 贝叶斯分类 71 在这种假设条件下计算p c( k|x) 的方法称为朴素贝叶斯(naiveBayes)方法。所得到的分类 器称为朴素贝叶斯分类器(na.veBayesclassifier)。在这种假设条件下,式(5.2)为 max ck p c( k |xi ) =max ck p(ck)Πm i=1 p(fi|ck) (5.10) 从式(5.10)可以看出,若要得到朴素贝叶斯分类器,则必须要从训练数据集中估计先验概率 p(ck),同时还需要针对每个特征计算相应的条件概率p(fi|ck )。下面介绍计算这两种概 率的方法。 假设训练数据集X=[(x1,y1 ) ,(x2,y2 ) ,…,(xn ,yn ) ],其中第i 个样本xi 有m 个特 征,即 x =[f1,f2,…,fm ] 第i 个特征可能的取值为fi∈{vi1,vi2,…,viSi },训练数据集中的样本总共有K 个类, 因此第i 个类标记的可能值为yi∈{c1,c2,…,ck}。 (1)计算先验概率的公式为 p c( k ) =Σn i=1 I(yi =ck ) n , k =1,2,…,K (5.11) 计算第i 个特征的条件概率为 p (fi =vil|ck ) =Σn i=1 I(fi =vil,yi =ck ) Σn i=1 I(yi =ck ) (5.12) 式中,k=1,2,…,K ;i=1,2,…,n;l=1,2,…,Si。 (2)计算给定样本x 属于第ck 类的概率 p(x|ck)=p(ck)Πm i=1 p(fi|ck) 式中,k=1,2,…,K 。 (3)根据最大后验概率确定样本x 的类别,即 y =argmax ck p c( k |x) =max ck p(ck)Πm i=1 p(fi|ck) 上面介绍朴素贝叶斯分类器的具体实现过程时,假定特征的取值是离散型。但在实际 应用中,特征经常取连续值,如将人的身高作为特征时,其取值的类型为连续型。对于这种 取连续值的特征,在计算其条件概率时,可以假设相应的分布,例如,若第i 个特征fi 取连 续值,则可假设其条件概率密度为 p (fi|ck ) = 1 2πσ2k e-(fi-μk )2 2σ2k 式中,μk 为类别为ck 时所对应的特征fi 的样本均值,而σk 则为相应的样本方差。下面举 例说明μk 和σk 的计算方法。 假设有一个训练数据集,样本的类别为“男性”和“女性”,构成每个样本的特征分别为身 高和体重,具体信息如表5.1所示。 72 机器学习实用教程(微课版) 表5.1 身高和体重数据 性别身高/cm 体重/kg 男性178 90 男性183 85 男性170 75 男性165 63 女性160 55 女性165 60 女性162 55 女性158 50 女性163 58 计算每个类别对应的不同特征的均值和方差,其结果如表5.2所示。 表5.2 计算得到的均值与方差 性别身高的均值/cm 身高的方差/cm 体重的均值/kg 体重的方差/kg 男性174 64.66 78.25 142.25 女性161.6 7.3 55.6 14.3 在计算p(身高|男性)的条件概率时,其均值和方差分别为174cm 和64.66cm。 上面介绍的这种朴素贝叶斯称为高斯朴素贝叶斯(GaussiannaiveBayes),在sklearn 的naive_bayes包中有一个GaussianNB类,实例化这个类后就可以训练高斯朴素贝叶斯模 型。朴素贝叶斯还有其他一些变种,如假定第i 个特征fi 只取两种值:0和1。取0的概率 为p,则会得到伯努利朴素贝叶斯。这时计算条件概率的公式为 p (fi =0|ck ) =p(ck)p p (fi =1|ck ) =p c( k ) (1-p) 同样在sklearn的naive_bayes包中有一个BernoulliNB类,实例化这个类后就可以训 练伯努利朴素贝叶斯模型。 下面的示例介绍如何用朴素贝叶斯根据天气情况预测用户是否外出爬山。样本主要由 两个特征组成:天气和气温。具体数据如表5.3所示。 表5.3 天气与人们是否爬山的数据 天气气温爬山天气气温爬山 天晴高否多云中是 多云中是天晴中是 下雨中否多云低是 下雨低否下雨高否 多云高否 第5章 贝叶斯分类 73 这两个特征涉及的内容都是文字,需要将其转换成数值才能传递给朴素贝叶斯算法处 理。在sklearn中,有一个名为preprocessing的包,这里面有一个LabelEncoder类,可对这 个类进行实例化,然后调用fit_transform()方法将每个特征中的不同文字转换成数字。 例如: weather=['高','中','中','低'] LabEncoder=preprocessing.LabelEncoder() W=LabEncoder.fit_transform(weather) 变量W 为列表(list)类型,相应的值为 [2 0 0 1] 按上面的方式可将表5.3中两个特征转换成数字,然后用Python的zip()函数将它们合并 成数字表示的样本。zip()函数能将两个列表合并成元组(tuple)。例如: A=[1,2,3] B=[4,5,6] Zipped=zip(A,B) 可通过list(Zipped)查看变量Zipped的值,其运行的结果如下: [(1, 4), (2, 5), (3, 6)] 再将类别也转换为数字,这样就可以调用naive_bayes包中的相关算法进行学习。由 于这个例子中的数据很简单,因此也可以手工来实现朴素贝叶斯。其计算步骤如下。 (1)分别计算爬山和不爬山的先验概率。 p(爬山=是)=49 p(爬山=否)=59 (2)针对两个特征的不同取值,分别计算在爬山和不爬山的条件下相应的概率: p(天晴|爬山=是)=14 p(多云|爬山=是)=34 p(下雨|爬山=是)=0 p(气温=高|爬山=是)=0 p(气温=中|爬山=是)=34 p(气温=低|爬山=是)=14 p(天晴|爬山=否)=15 p(多云|爬山=否)=15 p 下雨|爬山=否( ) =35 p(气温=高|爬山=否)=35 p(气温=中|爬山=否)=15 p(气温=低|爬山=否)=15 要预测给定样本(天晴,气温低)是否会爬山,则可通过下面的方式来计算: p(爬山=是)p(天晴|爬山=是)p(气温=低|爬山=是)=49 ×14 ×14 = 4 144= 1 36 74 机器学习实用教程(微课版) p(爬山=否)p(天晴|爬山=否)p(气温=低|爬山=否)=59 ×15 ×15 = 5 225= 1 45 由于p(爬山=是)p(天晴|爬山=是)p(气温=低|爬山=是)大,因此预测的结果为 “要爬山”。 在计算上面的各种条件概率时,有可能出现概率值为0的情况,这会影响后面的分类结 果。为了解决这个问题,可以将式(5.11)和式(5.12)分别修改为 p c( k ) =Σn i=1 I(yi =ck ) +λ n +K , k =1,2,…,K 和 p (fi =vil|ck ) =Σn i=1 I(fi =vil,yi =ck ) +λ Σn i=1 I(yi =ck ) +Siλ 当λ=1时,称为拉普拉斯光滑(Laplacesmoothing);当λ=0时,则就是经典的朴素贝叶斯 的计算方法。 这里给出了朴素贝叶斯的简单实现过程。目前,贝叶斯分类已被广泛地应用于垃圾邮 件分类、拼写纠正和医疗诊断等,并获得了不错的效果。 5.3 改进的朴素贝叶斯 朴素贝叶斯假设各个特征之间是条件独立的,但在现实应用中,这种假设通常很难成 立。假设特征之间存在各种关系就得到了各种改进的朴素贝叶斯方法。下面简单介绍这些 改进的方法。 (1)半朴素贝叶斯分类器(semi-naiveBayesclassifiers)。它就是一种改进的朴素贝叶 斯分类器,它的基本思想是考虑一部分特征之间的相互依赖关系。经典的半朴素贝叶斯分 类器会假定每个特征最多依赖一个其他特征,这种假设称为独依赖估计(one-dependent estimator,ODE)。独依赖估计又分很多种情形,如所有特征都依赖同一个特征,这种方法 称为超父独依赖估计(superparentODE)。 (2)贝叶斯网(Bayesnetwork),也称为信念网(beliefnetwork),由JudeaPearl在1985 年首先提出,它通过有向无环图来描述特征之间的关系。贝叶斯网是一种概率图模型 (probabilitygraphmodel,PGM),它通常由两部分组成:贝叶斯网的结构和贝叶斯网的参 数。若特征之间有依赖关系,则用一条边连接起来,参数用来描述这种依赖关系。贝叶斯网 的困难在于无法完全知道网络结构,因此,贝叶斯网的学习首先要找出与训练数据集样本结 构一致的网络结构。贝叶斯网结构学习算法主要有3种:①基于依赖统计分析的方法。该 方法通常利用统计或信息论的方法分析特征之间的依赖关系,从而获得最优的网络结构。 而节点之间的依赖关系通常由两点的互信息或者条件互信息决定。②基于评分搜索的方 法。该方法由评分函数和搜索算子两部分构成,评分函数评价网络结构与训练样本结构的 相似程度,搜索算子决定对网络结构空间的搜索过程。③混合方法。这种方法将上述两种 第5章 贝叶斯分类 75 方法结合在一起,通过统计分析缩小网络结构空间,再对缩小后的网络结构空间进行评分搜 索,从而得到最优的网络结构。 人们通常称有固定结构的贝叶斯网为静态贝叶斯网,还有一类贝叶斯网的结构会不断 变化,人们称其为动态贝叶斯网(dynamicBayesiannetwork)。隐马尔可夫模型(hidden Markovmodel,HMM)是结构最简单的动态贝叶斯网,这是一种著名的有向图模型,主要用 于时序数据建模,在自然语言处理、语音识别等领域有着广泛的应用。 5.4 总结 本章首先以贝叶斯决策理论为基础,得出分类问题的期望风险最小其实就是最大化后 验概率,然后介绍了计算后验概率的两种方法:判别方法和生成方法。本章介绍了两种典 型的生成方法:高斯判别分析和朴素贝叶斯。高斯判别分析方法假设似然函数服从多元正 态分布,这些正态分布有相同的协方差矩阵,不同的均值向量,然后通过最大似然估计得到 正态分布的参数。由高斯判别分析可以得到线性判别分析,这表明生成方法和判别方法有 时会有一定联系。朴素贝叶斯方法假设特征之间是条件独立的,在这个假设下计算后验概 率。这是一个很强的假设条件,后来研究人员适当放宽了这个假设条件,得到了多种改进的 朴素贝叶斯方法,如半朴素贝叶斯方法等。朴素贝叶斯方法在邮件分类、拼写纠正等领域有 着广泛的应用。 5.5 习题 (1)如何得到式(5.2)? (2)Fisher线性判别分析(FLDA)是一个著名的监督学习方法。这种方法的基本思想: 将样本点投影到一条直线或超平面上,使得投影后同类样本尽量靠在一起,而不同类的样本 之间尽量分开。对于一个分类问题,FLDA 方法会先将样本投影到向量w 上,然后分别计 算类间(between-class)散度矩阵SB 和类内(within-class)散度矩阵SW ,然后求解下面这个 目标函数来得到w,即 max w f(w)= wTSBw wTSWw (5.13) ① 写出SB 和SW 的具体形式。 ② 给出式(5.13)的求解方法 ③ 假设有一个训练数据集,它的样本总共分为两类,每个样本的特征数为2,第一类总 共有5个样本,具体数据为 C1 ={(1,2) ,(1,2) ,(2,3) ,(3,3) ,(4,5) } 第二类总共有6个样本,具体数据为 C2 ={(1,0) ,(2,1) ,(3,1) ,(3,2) ,(5,3) ,(6,5) } 绘制这些训练样本的散点(scatter)图,不同类别的样本要用不同颜色标示出来。在这个训 练数据集上用Fisher线性判别分析找到分类超平面。 (3)通过表5.4中的数据学习一个朴素贝叶斯分类器,并确定样本x=(2,D )的类别。