7.贝叶斯分类器

7.1贝叶斯决策论

贝叶斯决策论(Bayesiandecision theory)是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。这其实是关系到两个基本概念:多大可能是这个类别以及可能误判的损失?机器学习就是从中选择误判损失最小的最大概率类别作为其分类标识。

回顾下贝叶斯模型的数学推论过程,首先是要保证贝叶斯分类器产生的总体误判损失是最小的,而要得到最小,关键就是从中选择后验概率最大的类别标记。显然,基于贝叶斯准则来最小化鞠策风险,现在第一就是要获得后验概率P(c|x),故此机器学习的主要任务就是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x)。

对于后验概率的估计,大体有两种策略:1)判别式模型(discriminative models):给定x,通过直接建模P(c|x)来预测c,决策树、BP神经网络、支持向量机等都显然属于该范畴,预设模型并通过样本集训练出参数进而再优化;2)生成式模型(generative models):先对联合概率分布P(x,c)建模,然后再由此获得P(c|x)。

贝叶斯分类器就是基于条件概率而开展:P(c|x)= P(x,c)/P(x),基于贝叶斯定理,P(c|x)=P(c)P(x|c)/P(x),其中P(c)是类先验(prior)概率;P(x|c)是样本x相对于类标记c的类条件概率(class-conditional probability),或称为似然(likelihood);P(x)是用于归一化的证据因子。对给定样本,证据因子P(x)与类标记无关,因此估计P(c|x)的问题就转化为如何基于训练集D来估计先验P(c)和似然(条件)P(x|c)。

P(c)的训练:类先验概率P(c)表达了样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时,P(c)可通过各类样本出现的频率来进行估计。

P(x|c)的训练:类条件概率P(x|c),涉及到关于x所有属性的联合概率,直接根据样本出现的频率来估计有困难。例如,假设样本的d个属性都是二值的,则样本空间将有2d中可能的取值,在现实应用中,这个值往往大于训练样本数m,也就是说,很多样本的取值在训练集中根本没有出现,直接使用频率来估计P(x|c)显然不可行,因为“未被观测到”和“出现概率为零”通常是不同的。那怎么求解呢?极大似然估计来也。

7.2极大似然估计

既然无法直接通过频率来估计,那么估计类条件概率的策略可以这样:先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。

这种参数化的方法虽然能使条件概率估计变得相对简单,但估计结果的准确性依赖于所假设的概率分布形式是否符合潜在的真实数据分布。在现实应用中,要做出能较好地接近潜在真实分布的假设,往往需要在一定程度上利用关于应用任务本身的经验知识,否则若仅凭猜测来假设概率分布形式,很可能产生误导性结果。既然是似然,经验自然是重要的。

7.3朴素贝叶斯分类器

上文可知,基于贝叶斯公式P(c|x)=P(c)P(x|c)/ P(x)来估计后验概率P(c|x)的困难是:类条件概率P(x|c)是所有属性的联合概率,难以从有限的训练样本直接估计而得。为解决该问题,朴素贝叶斯分类器(naïve bayes classifer)采用了属性条件独立性假设(attributeconditional independence assumption),对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。

文中的西瓜集例子,可以很好地理解上面的求解,重点是计算样本集中不同属性的类别数。可参考CSDN博客http://blog.csdn.net/fjssharpsword/article/details/53021776来理解。

如此,通过拉普拉斯修正避免了因训练集样本不充分而导致概率估值为零的问题,并且在训练集变大时,修正过程所引入的先验(Prior)的影响也会逐渐变得可忽略,使得估值趋向于实际概率值。

在现实任务中朴素贝叶斯分类器有很多种使用方式。例如,若任务对预测速度要求较高,则对给定训练集,可将朴素贝叶斯分类器涉及的所有概率估值事先计算好存储起来,这样在进行预测时只需查表即可进行判别;若任务数据更替频繁,则可采用懒惰学习(lazy learning)方式,先不进行任何训练,待收到预测请求时再根据当前数据集进行概率估值;若数据不断增加,则可在现有估值基础上,仅对新增样本的属性值所涉及的概率估值进行计数修正即可实现增量学习。懒惰学习和增量学习的思维,其实也是贯穿一种分治策略。

7.4半朴素贝叶斯分类器

为解决贝叶斯公式中估计后验概率P(c|x)中类条件概率P(x|c)估计的困难,朴素贝叶斯分类器假设属性条件独立性,但在现实任务中这个假设并不总能成立。为此,在属性条件独立假设基础上,进一步考虑属性间的关系,提出半朴素贝叶斯分类器(semi-naïve bayes classifier)的学习方法。

半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息,从而既不需进行联合概率完全计算,又不至于彻底忽略了比较强的属性依赖关系。独依赖估计(one-dependent estimator,ode)是半朴素贝叶斯分类器最常用的一种策略。所谓独依赖,就是假设每个属性在类别之外最多仅依赖一个其他属性,即:

7.5贝叶斯网

属性之间的依赖关系,可通过贝叶斯网(bayesian network)也称信念(belief network)网来刻画,其借助有向无环图(Directed Acyclic Graph,DAG)并使用条件概率表(ConditionalProbability Table,CPT)来描述属性的联合概率分布。假定所有属性均为离散型,对于连续属性,条件概率表可推广为条件概率密度函数。

具体来说,一个贝叶斯网B由结构G和参数Θ两部分构成,即B=<G,Θ>。网络结构G是一个有向无环图,其每个结点对应一个属性,若两个属性有直接依赖关系,则它们由一条边连接起来;参数Θ定量描述了这种依赖关系。假设属性x i在G中的父结点集为π i,则Θ包含了每个属性的条件概率表:Θx i|π i=P B(x i|π i)。文中有图和表分别展示G和B。

2)学习

若贝叶斯网结构已知,即属性间的依赖关系已知,按照上文定义,只需通过对训练样本计数,估计出每个结点的条件概率表即可。但现实应用中并不知晓网络结构,因此,贝叶斯网学习的首要任务是根据训练数据集来找出结构最恰当的贝叶斯网。评分搜索是求解这一问题的常用办法,具体来说,先定义一个评分函数(score function),以此来评估贝叶斯网与训练数据的契合度,然后基于这个评分函数来寻找结构最优的贝叶斯网。评分函数定义了获得怎样贝叶斯网的归纳偏好。

要找结构,先定义评分函数,然后基于评分函数找最优结构。常用评分函数通常基于信息论准则,此类准则将学习问题看作一个数据压缩任务,学习的目标是找到一个能以最短编码长度描述训练数据的模型,此时编码的长度包括了描述自身需要的字节长度和使用该模型描述数据所需的字节长度。对贝叶斯网学习而言,模型就是一个贝叶斯网,同时,每个贝叶斯网描述了一个在训练数据上的概率分布,自由一套编码机制能使那些经常出现的样本有更短的编码。于是,应该选择那个综合编码长度(包括描述网络和编码数据)最短的贝叶斯网,这就是最小描述长度(minimal description length,MDL)准则。

给定训练集D={x 1,x 2,…,x n},贝叶斯网B=<G, Θ>在D上的评分函数为:

然而,从所有可能的网络结构空间搜索(属性数d的规模决定)最优贝叶斯网结构是一个NP问题,难以快速求解。有两种常用的策略能在有限时间内求得近似解:

第一种贪心法,从某个网络结构出发,每次调整一条边(增、删、改方向),直到评分函数不再降低为止;

第二种通过给网络结构施加约束来削减搜索空间,如将网路结构限定为树形结构等,模型要理想才能计算出,现实是复杂的。

3)推断

贝叶斯网络训练好之后就能用来回答查询(query),即通过一些属性变量的观测值来推测其他属性变量的取值。通过已知变量观测值来推测待查询变量的过程称为推断(inference),已知变量观测值称为证据(evidence)。输入证据,通过模型推断出结论。

最理想的是直接根据贝叶斯网定义的联合概率分布来精确计算后验概率;然而,这样的精确推断已被证明是NP难得。换言之,当网络结点较多,连接稠密时,难以精确推断,需借助近似推断,通过降低精度要求,在有限时间内求得近似解。在现实应用中,贝叶斯网的近似推断常采用吉布斯采样算法(Gibbs sampling)来完成,这是一种随机采用的方法,下面说明该算法。

问题:令Q={Q1,Q2,…,Qn}表示待查询变量,E={E1,E2,…,Ek}为证据变量,已知其取值为e={e1,e2,…,ek}。目标是计算后验概率P(Q=q|E=e),其中q={q1,q2,…,qn}是待查询变量的一组取值。

解答:

先随机产生一个和证据E=e一致的样本q 0作为初始点,然后每步从当前样本出发产生下一个样本。具体来说,在第t次采样中,算法先假设q t= q t-1,然后对非证据变量逐个进行采样改变其取值,采样概率根据贝叶斯网B和其他变量的当前取值(即Z=z)计算获得。

吉布斯采样是在贝叶斯网所有变量的联合状态空间与证据E=e一致的子空间中进行随机漫步(random walk)。每一步仅依赖前一步的状态,这是一个马尔可夫链(Markov chain)。在一定条件下,无论从什么初始状态开始,马尔可夫链第t步的状态分布在t->∞时必收敛于一个平稳分布(stationary distribution);对于吉布斯采样来说,这个分布恰好就是P(Q|E=e)。因此,在T很大时,吉布斯采样相当于根据P(Q|E=e)采样,从而保证收敛于P(Q=q|E=e)。

值得注意的是,由于马尔可夫链通常需要很长时间才能趋于平稳分布,因此吉布斯采样算法的收敛速度较慢。此外,若贝叶斯网中存在极端概率0或1,则不能保证马尔可夫链存在平稳分布,此时吉布斯采样会给出错误的估计结果。

7.6EM算法

上文的假设是训练样本所有属性变量的值都已被观测到,即训练样本是完整的。但在现实应用中往往会遇到不完整的训练样本,即训练样本的属性变量值未知。问题是在这种存在未观测变量的情形下,是否仍能对模型参数进行估计呢?

未观测变量也称为隐变量(latent variable)。令X表示已观测变量集,Z表示隐变量集,Θ表示模型参数。若欲对Θ作极大似然估计,则应最大化对数似然:LL(Θ|X,Z)=ln P(X,Z|Θ)。不过Z是隐变量,无法直接求解,可通过对Z计算期望,来最大化已观测数据的对数边际似然(marginal likelihood):

简单来说,EM算法使用两个步骤交替计算:第一步是期望E步,利用当前估计的参数值来计算对数似然的期望值;第二步是最大化M步,寻找能使E步产生的似然期望最大化的参数值。然后新得到的参数值重新被用于E步,…,直至收敛到局部最优解。

EM算法可以看作用坐标下降法(coordinate descent)来最大化对数似然下界的过程。事实上,隐变量估计问题也可通过梯度下降等优化算法求解,但由于求和的项数将随着隐变量的数目以指数级上升,会给梯度计算带来麻烦。而EM算法则可看作一种非梯度优化方法。

坐标下降法是一种非梯度优化方法,在每步迭代中沿一个坐标方向进行搜索,通过循环使用不同的坐标方向来达到目标函数的局部极小值。

机器学习笔记(七)贝叶斯分类器相关推荐

  1. 机器学习实验 - 朴素贝叶斯分类器

    目录 一.报告摘要 1.1 实验要求 1.2 实验思路 1.3 实验结论 二.实验内容 2.1 方法介绍 2.2 实验细节 2.2.1 实验环境 2.2.2 实验过程 2.2.3 实验与理论内容的不同 ...

  2. 西瓜书笔记7:贝叶斯分类器

    目录 相关概率知识 贝叶斯-全概率公式 先验概率.后验概率.似然概率 7.1 贝叶斯决策论 7.2 极大似然估计 极大似然估计公式 均值方差估计公式推导 概率知识复习 高斯分布 最大似然估计 7.3 ...

  3. 机器学习实战 朴素贝叶斯分类器

    基于概率论的分类方法: 朴素贝叶斯 我的微信公众号: s406205391; 欢迎大家一起学习,一起进步!!! k-近邻算法和决策树会给出"该数据属于哪一类"的明确回答.不过,分类 ...

  4. 机器学习算法 - 朴素贝叶斯分类器

    ​ 一.算法简介 1.1 背景 监督学习分为生成模型 (generative model) 与判别模型 (discriminative model) 判别模型:SVM, LR, KNN, NN, CR ...

  5. 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧

    文章目录 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 借助于numpy向量化处理,相当于并行计算,注意mask使用技巧,用途较广: 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 前面提到 ...

  6. 机器学习模型5——贝叶斯分类器

    前置知识 条件概率 贝叶斯公式 (贝叶斯模型还是很好理解的,主要基于高中就学到过的条件概率.) 贝叶斯定理 P(A),P(B)分别是事件A,B发生的概率,而P(A|B)是在事件A在事件B发生的前提下发 ...

  7. 0基础讲解机器学习算法-朴素贝叶斯分类器

    朴素贝叶斯分类器可以说是最经典的基于统计的机器学习模型了.首先,暂且不管贝叶斯是什么意思,朴素这个名字放在分类器中好像有所深意. 一查,发现这个分类器的英文是"Naïve Bayes&quo ...

  8. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)

    原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行. 这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子 ...

  9. 机器学习笔记——朴素贝叶斯(Naive Bayes)

    1贝叶斯算法简介 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法.在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算 ...

最新文章

  1. Python IDLE快捷键一览
  2. JS 获取控件的绝对位置
  3. python如何获取鼠标点击图片的像素点坐标
  4. 淘宝如何实现用余额和红包付款?大型分布式系统在云上实现
  5. STM32:RTC闹钟唤醒
  6. UVALive7670 Asa's Chess Problem,上下界费用流,另类解法
  7. 广告文案被指侮辱女性 茶颜悦色道歉:立即召回相关产品
  8. 2020年春季入学学员计算机应用基础本,2020年春季考试《计算机应用基础》在线考核试题.doc(9页)-原创力文档...
  9. HDU1276 士兵队列训练问题【模拟+array+vector+list】
  10. windows dos 命令
  11. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_18、SpringBoot测试进阶高级篇之MockMvc讲解...
  12. python单位根检验看结果_时间序列的ADF检验(单位根检验)
  13. 计算机单元格数值不保留小数,excel如何用公式让单元格数值保留两位小数
  14. QT如何给exe添加图标
  15. CAJ格式文档转PDF格式文档的办法(不需要下载杂七杂八的软件或者充会员)
  16. 常用Windows系统进程列表
  17. 主板是计算机所有部分连接的基础,计算机基础相关知识答案
  18. oracle创建存储过程,hibernate调用
  19. 外网内网同时使用--设置如下
  20. SpringBoot--简单处理高并发demo

热门文章

  1. Java设计模式(二十一):备忘录设计模式
  2. Linux用户态协议栈好处,关于用户态协议栈的思考
  3. sql和mysql语法_SQL 与MySQL-基本语法介绍
  4. windows系统下安装JDK8的教程图解
  5. 虚拟机无法远程连接的问题
  6. sm4加密 解密(oc)
  7. 上传图片配置文件长度和宽度大小的说明
  8. vivado编译出错 [Synth 8-729] [Synth 8-787]
  9. AMD CPU 看清楚
  10. Ubuntu 下 使用 adb logcat 显示 Android 日志