本文转载自公众号“读芯术”(ID:AI_Discovery)

本文3153字,建议阅读8分钟。

本文讲解了在学习基于贝叶斯推断的分类模型中,我们需要的准备和方法。


数学准备

概率:事件不确定性程度的量化,概率越大,表示事件发生的可能性越大。

条件概率:P(A|B),在条件B下,发生A的概率。

联合概率:P(A,B),A事件与B事件同时发生的概率。如果因子相互独立,联合概率等于因子概率乘积,即P(A,B)=P(A)P(B)。如果因子独立性不可知,那么有更普遍的形式:P(A,B)=P(B)P(A|B)。

边缘概率:∑AP(A,B)或∫AP(A,B),对联合分布其中一个因子的求和(积分),就得到了另一个因子的边缘概率。

独立同分布:随机变量中每个变量的概率分布相同,且变量之间互相独立。

贝叶斯定理

曾经有一个笑话:有个人坐飞机,带了个炸弹。问他为什么,他说,飞机上有1个炸弹的几率(假设)是万分之一,根据概率论,同时有两个炸弹的概率就是亿分之一,所以我自己带一个炸弹来降低该飞机上有炸弹的概率。

这个笑话之所以好笑,就是因为这个人混淆了联合概率和条件概率,联合概率是指两件事情同时发生的概率,假如说飞机上有一个炸弹的概率是万分之一,那么有两个炸弹的概率就是亿分之一。而条件概率则是指在一件事情在另外一件事情的约束下发生的概率,此人已经携带了一个炸弹,那么飞机上出现第二个炸弹的概率就是条件概率,仍然为万分之一(假设携带炸弹相互独立)。

如果A,B两件事情相互独立,联合概率可以表示为P(AB)=P(A)P(B),我们用P(A|B)来表示给定B条件下A的发生概率,事实上,如果A,B不相互独立,则P(A|B)≠P(A),联合概率就表示为P(AB)=P(B)P(A|B)。

相应的,我们用P(B|A)来表示给定A条件下B的发生概率,联合概率就变成了P(AB)=P(A)P(B|A)。如果我们连接起这两个等式,再分别除以P(B)就会得到一个非常诱人且强大的公式,我们把他叫做贝叶斯定理:

我们会把等式左边的P(A|B)叫做后验概率,等式右边的P(A)叫做先验概率,P(B|A)叫做似然,但后验概率和似然函数在本质上仍然是条件概率。这样的叫法是为了强调贝叶斯定理从结果推原因的过程,也可以理解为一种事件发生之后的概率的修正。

Example:

假设我们现在有两个碗,一个碗里有30个蓝色的小球,10个红色的小球,另一个碗里蓝色小球和红色小球分别有20个,现在的问题并不是你随机挑一个碗从里面拿球,拿到蓝色的概率是多少(因为这太简单了)。我要问的问题是,我拿到了一个蓝球,它更可能来自我随机挑选的第几个碗?

我们把挑选碗的过程叫做事件A1,A2,挑选小球的过程叫做事件B1,B2,分别对应蓝色和红色,我们先求P(A1|B1),将其带入贝叶斯公式,就可以求出后验概率为0.6,我们再求P(A2|B1),代入得后验概率为0.4,说明我们如果选出一个蓝球,这个蓝球更可能来自于第一个碗。

贝叶斯引入的动机

我们在本系列课程的第一篇《过拟合问题》中提到将数据分为训练集和测试集,以及我们做交叉验证的意义。简单来说,分集的目的是为了评估模型的泛化能力,而交叉验证的目的是为了将整个评估过程变得准确。

模型的泛化能力为什么如此重要?因为无论在实验室还是在工业界,真实的数据量太过庞大,而且数据的增长速度越来越快,我们所利用的数据只能被认为是从现实采样而来,我们的模型势必要接触那些从来没在训练集出现过的数据。我们希望模型面对未知数据会有好的预测效果,也就是说,模型势必要对观测上的不确定性做出推断。

我们通常用概率来表示变量的不确定性程度,并且将真实的变量取值当作一个概率分布,机器学习会有视角的转变:

  • 从贝叶斯的框架讨论机器学习,那么问题的目标就变成了:从现有的数据中估计后验概率P(l|x)。比如分类问题,我们对于每一个x,选择能使后验概率最大的类别。

  • 如果我们选取的模型存在有限个参数,可以利用最大似然估计或最大后验估计来给出我们的优化函数。

现在我们主要集中于第一个视角,探讨基于贝叶斯推断的模型。从贝叶斯定理可以看出,我们对后验概率的计算要通过似然和先验概率,这样的模型叫做生成式模型。而譬如logistic regression,是直接对后验概率进行估计,没有用到贝叶斯定理,这样的模型叫做判别式模型。

基于贝叶斯推断的分类方法

我们现在考虑典型的机器学习的二分类问题,我们每一个训练样本都有若干的特征(feature)和确定的标签(label),我们的测试样本只有特征,没有标签。所以从贝叶斯推断的角度来看,我们需要寻找的是一个最大化的条件概率(后验概率)P(l|X),我们可以将其理解为,在已知样本X的前提下,最大化它来自类别l的概率。也可以理解为:对于每一个样本X,我们选择能够使后验概率最大的类别l。

假如我们面临的问题是,根据天气、温度、湿度和风力4个特征来预测要不要去打网球,我们训练样本如下图所示:

可以看出,类别l只有Yes和No两种情况。如果我们的测试样本X为(天气=Sunny,温度=Cool,湿度=high,风力=Strong),我们要分别计算出P(l=Yes|X)和P(l=No|X),然后比较大小,然后将概率大的那一方所选择的类别当作我们预测的结果。

我们接下来的问题是,如何计算后验概率P(l=Yes|X)和P(l=No|X)。我们将其带入贝叶斯公式:

其中,P(l=Yes)很好理解,就是标记为Yes的样本占全部样本的比例,我们也把它叫做类先验(prior)概率,根据大数定律,我们可以根据出现的频率来估计概率,这也是我们要从训练样本中获取的信息。

P(X)则是用于归一化的证据(evidence)因子,也是X出现的概率。我们可以考虑,对于类别为No的后验概率:

可以看出,P(X)是相同的,所以当我们比较两者大小时,这一项与计算无关。

P(X|l=Yes)是条件概率,是指在标记Yes的样本中具有特征X的样本所占的比例,我们也把它叫做似然(likelihood),这也是我们要从训练样本中获取的信息.真正的问题在于,如果我们真的将X本身作为一个事件,那么很有可能我们的测试样本概率为零,而未被观测到并不等于概率为零。

朴素贝叶斯(Naive Bayes)

我们注意到X是个向量,它包含了每个特征的取值,于是我们可以将P(X|l=Yes)视为各个特征取值的条件概率下的联合概率,如果我们继续假设特征之间互相独立,那么联合概率就变得非常容易计算:

朴素贝叶斯中,朴素(naive)的含义正是如此,它采用了属性条件独立性假设(attribute conditional independence assumption),让似然变得简单可计算。

让我们先来总结一下上面那幅图,分别计算各个属性的条件概率:

所以,就有:

计算结果发现,将这个样本归结于Yes的后验概率大约为0.0053,归结于No的后验概率大约为0.0206,No的后验概率远远大于Yes的后验概率,也就是说,对于这样一个样本,我们的预测结果会是——不要去打网球。

除了朴素贝叶斯这样一种基于贝叶斯推断的分类模型,面对机器学习的回归问题,我们是否也有基于贝叶斯推断的模型?甚至我们还可以问,贝叶斯只是应用于模型之中吗?那么,我们的下一篇将会为大家介绍贝叶斯推断的回归模型。

课堂TIPS

  • 广义来看,贝叶斯分类器是生成式模型的一种(generative models)。朴素贝叶斯是贝叶斯分类最简单的形式,因为它假设了属性的条件概率互相独立,使得计算后验概率简单可行。

  • 我们文中所举的例子是离散属性,所以概率的形式均为概率质量函数(PMF),我们可以将其推广到连续属性,只需要将概率的形式换为概率密度函数(PDF),但本质并不会发生改变。

  • 我们在用朴素贝叶斯方法时,需要计算多个属性的条件概率下的联合概率。但如果我们的样本多样性不够丰富,很可能会出现我们的测试样本中的某些属性值并未在训练样本的某个类中出现,如果直接求解,则会造成概率为零的后果。面对这样的情形,我们会在计算先验概率的时候,引入拉普拉斯修正,强行使未出现的属性条件概率不为零。

  • 我们在使用贝叶斯分类器做训练时,实际上是在训练先验概率P(l)和似然P(X|l)。我们可以为了预测准确度,不断地将新增样本的属性所涉及的概率估计进行修正;我们也可以为了预测速度,将所有的P(X|l)和P(l)预先计算好,遇到测试样本时直接查表判别。

  • 朴素贝叶斯所依赖的属性条件独立性不一定成立,所以还有半朴素贝叶斯分类器(semi-naive),它假设每个属性存在一定的依赖,适当考虑一部分的属性依赖。(可以看这篇论文: Semi-naive Bayesian classifier)

干货 | 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”相关推荐

  1. 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”

    链接:贝叶斯推断分类 数学准备 概率:事件不确定性程度的量化,概率越大,表示事件发生的可能性越大. 条件概率:P(A|B),在条件B下,发生A的概率. 联合概率:P(A,B),A事件与B事件同时发生的 ...

  2. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  3. 贝叶斯②——贝叶斯3种分类模型及Sklearn使用(高斯多项式伯努利)

    贝叶斯机器学习系列: 贝叶斯①--贝叶斯原理篇(联合概率&条件概率&贝叶斯定理&拉普拉斯平滑) 贝叶斯③--Python实现贝叶斯文本分类(伯努利&多项式模型对比) 贝 ...

  4. 变分法和变分贝叶斯推断

    本文转载的原文链接:变分法和变分贝叶斯推断 另一篇CSDN链接学习:变分贝叶斯推断(Variational Bayes Inference)简介 变分法是17世纪末发展起来的一门数学分支,是泛函分析里 ...

  5. 贝叶斯推断应用:垃圾邮件过滤

    附上新博客地址:月光森林 引入 仍然是"信息内容安全" 课程的一个实验总结.为了理解整个原理,不但重新复习了一边贝叶斯,还因为对"联合概率"理解不透彻,直接翻译 ...

  6. matlab 变分贝叶斯,变分法和变分贝叶斯推断

    变分法介绍 变分法是17世纪末发展起来的一门数学分支,是泛函分析里面的一个领域,在普通的最优化问题中,往往求解得到的是一个最优值解,而在一个变分问题中,求解得到的是一个最优函数解,因此变分问题可以看成 ...

  7. 【故障诊断】基于贝叶斯优化支持向量机的轴承故障诊断附matlab代码

    1 内容介绍 贝叶斯网络(Bayesian Network或BN)是人工智能领域进行建模和不确定性推理的一个有效工具.贝叶斯网推理的基本任务是:给定一组证据变量观察值,通过搜索条件概率表计算一组查询变 ...

  8. python用pystan贝叶斯IRT模型拟合Rasch模型分析学生考试问题数据

    最近我们被客户要求撰写关于Rasch模型的研究报告,包括一些图形和统计输出. 由于某大学学生人数过多,助教不足,因此有必要对期中考试给每个学生的题目数量施加五道题的限制.所有必须使用的问题必须来自大约 ...

  9. 贝叶斯推断及其互联网应用(三):拼写检查

    (这个系列的第一部分介绍了贝叶斯定理,第二部分介绍了如何过滤垃圾邮件,今天是第三部分.) 使用Google的时候,如果你拼错一个单词,它会提醒你正确的拼法. 比如,你不小心输入了seperate. G ...

最新文章

  1. 导致网速变慢的安全隐患
  2. 使用__doPostBack函数回送表单.
  3. Maven入门指南① :Maven 快速入门及简单使用
  4. 谷歌生物医学专用翻译_文献翻译|知云翻译,写论文必备~
  5. 艾伟:老赵谈IL(3):IL可以看到的东西,其实大都也可以用C#来发现
  6. 配置https后访问返回403 forbidden
  7. oracle 内存结构 share pool sql解析的过程
  8. [转载]windows phone 墓碑化(9)
  9. 成功解决AttributeError: 'list' object has no attribute 'shape'
  10. Mysql5.7读写分离
  11. Redis 数据结构 :SDS、链表、字典、跳表、整数集合、压缩列表
  12. 指针强制类型转换触发内存自动对齐
  13. 中国***产业链正在形成 ***今年收入可超百亿
  14. [原创]Tsung压力测试工具简介及安装
  15. 脚本录制软件python 按键精灵 tc_GitHub - yang-dongxu/KeymouseGo: 类似按键精灵的鼠标键盘录制和自动化操作...
  16. 最新C语言编程软件推荐(2021整理)
  17. uniapp 连接ibeacon beacon
  18. (转) Java多线程学习(吐血超详细总结)
  19. first season ninth episode, 所有人的感恩节都很糟糕
  20. MySQL的几个图形化界面工具

热门文章

  1. NGINX由入门到精通:Nginx介绍
  2. 【转】iOS开发-Protocol协议及委托代理(Delegate)传值
  3. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全
  4. EntityFramework之领域驱动设计实践(十)(转)
  5. linux应用程序安装与管理
  6. [学习笔记]几个英语短句(1)
  7. 在实习面试的过程的当中,常见的面试题(自己面试一路走来,所出现的频率较高的面试题总结)
  8. (面试)java基础-String一些特性
  9. Pandas:透视表(pivotTab)和交叉表(crossTab)
  10. 语音识别Kaldi开源