极客时间已完结课程限时免费阅读

22 | 朴素贝叶斯:如何让计算机学会自动分类?

22 | 朴素贝叶斯:如何让计算机学会自动分类?-极客时间

22 | 朴素贝叶斯:如何让计算机学会自动分类?

讲述:黄申

时长11:35大小10.58M

你好,我是黄申。今天我们来聊聊朴素贝叶斯。
在开始正式的内容之前,我想问你一个问题,你是如何区分苹果、甜橙和西瓜的?你可能要说了,这个问题还用得着讲吗?是不是你们博士都喜欢将简单的问题复杂化?还真不是,如果你将计算机想象成一个两三岁的孩子,你会怎么教一个孩子区分这些水果呢?
比如我曾经就和一个小朋友有过这样一段对话:
小朋友:黄叔叔,你和我讲讲,什么样的水果才是苹果呀?
我:圆形的、绿色的水果。
小朋友:那西瓜也是圆形的、绿色的呀?
我:嗯……苹果也有可能是黄色或红色的,但西瓜不是。
小朋友:那甜橙也是圆形的、黄色的呀?
我:好吧,你看到的大部分情况下的甜橙都是黄色的,而苹果只有很少情况(少数品种)是黄色的。而且你还可以尝尝,它们的味道也是不同的。
哈哈,你是不是觉得想要描述清楚,并没有想象中的那么容易?但是,在这个对话中,有两点我觉得你需要关注一下:
我使用了“可能”“大部分情况”“很少情况”等等这种词语,这些词包含了概率的概念;
我使用了多个条件来判断一个水果属于哪个类别。
基于此,我接下来就要聊聊,我们是如何通过数学的思想和方法,系统性地解决这个问题的。其中,朴素贝叶斯(Naive Bayesian)就提供了一个切实可行的方案。不过,在深入了解它之前,我们还需要做点准备工作。

如何将原始信息转化为计算机能看懂的数据?

事实上,计算机并不像两三岁的小孩那样,可以看到水果的颜色、形状和纹理,或者能尝到水果的味道。我们需要将水果的特征转化为计算机所能理解的数据最常用的方式就是提取现实世界中的对象之属性,并将这些转化为数字。
以水果为例,你会提取它们的哪些属性呢?我会考虑这些,比如:形状、外皮颜色、斑马纹理、重量、握感、口感。我手边刚好有一个苹果、一个甜橙和一个西瓜,我把它们的属性分别统计了一下,你可以看看。
然后,我们需要这些属性转化为计算机能够理解的东西——数字,也就是说,我给每种属性都定义了具体的数值,用来代表它们的具体属性。
比较细心的话,你可能已经发现了,我偷偷地把重量由连续值转化成了离散值,这是因为朴素贝叶斯处理的都是离散值。
好了,仅仅 3 个水果还不足以构成朴素贝叶斯分类所需的训练样本。为了保证训练的质量,我们可以继续扩展到 10 个水果。

朴素贝叶斯的核心思想

我们现在已经拿到了这 10 个水果的数据,那如果现在我手上有一个新的水果,它也有一定的形状、颜色、口感等等,你怎么判断它是哪种水果呢?
之前的文章我们讲过先验概率、后验概率、条件概率和贝叶斯法则,它们是朴素贝叶斯分类的核心组成部分。通过贝叶斯法则,我们可以根据先验概率和条件概率,推导出后验概率。首先让我们快速回想一下贝叶斯公式。
上一节,我已经详细解释了这个公式的推导和每一部分的含义,这里再强调一下贝叶斯定理的核心思想:用先验概率和条件概率估计后验概率
那具体到这里的分类问题,我们该如何运用这个公式呢?为了便于理解,我们可以将上述公式改写成这样:
其中,c 表示一个分类(class),f 表示属性对应的数据字段(field)。如此一来,等号左边的 P(c|f) 就是待分类样本中,出现属性值 f 时,样本属于类别 c 的概率。而等号右边的 P(f|c) 是根据训练数据统计,得到分类 c 中出现属性 f 的概率。P©是分类 c 在训练数据中出现的概率,P(f) 是属性 f 在训练样本中出现的概率。
看到这里,你可能要问了,这里的贝叶斯公式只描述了单个属性值属于某个分类的概率,可是我们要分析的水果每个都有很多属性啊,这该怎么办呢?
别急,朴素贝叶斯在这里就要发挥作用了。这是基于一个简单假设建立的一种贝叶斯方法,并假定数据对象的不同属性对其归类影响时是相互独立的。此时若数据对象 o 中同时出现属性 fi 与 fj,则对象 o 属于类别 c 的概率就是这样:
现在,我们应该已经可以用 10 个水果的数据,来建立朴素贝叶斯模型了。
其中,苹果的分类中共包含 3 个数据实例,对于形状而言,出现 2 次不规则圆、1 次圆形和 0 次椭圆形,因此各自的统计概率为 0.67、0.33 和 0.00。我们将这些值称为,给定一个水果分类时,出现某个属性值的条件概率。以此类推,所有的统计结果就是下面这个表格中这样:
对于上表中出现的 0.00 概率,在做贝叶斯公式中的乘积计算时,会出现结果为 0 的情况,因此我们通常取一个比这个数据集里最小统计概率还要小的极小值,来代替“零概率”。比如,我们这里取 0.01。在填充训练数据中从来没有出现过的属性值的时候,我们就会使用这种技巧,我们给这种技巧起个名字就叫作平滑(Smoothing)。
有了这些条件概率,以及各类水果和各个属性出现的先验概率,我们已经建立起了朴素贝叶斯模型。现在,我们就可以用它进行朴素贝叶斯分类了。
假设我们有一个新的水果,它的形状是圆形,口感是甜的,那么根据朴素贝叶斯,它属于苹果、甜橙和西瓜的概率分别是多少呢?我们先来计算一下,它属于苹果的概率有多大。
其中,apple 表示分类为苹果,shape-2 表示形状属性的值为 2(也就是圆形),taste-2 表示口感属性的值为 2。以此类推,我们还可计算该水果属于甜橙和西瓜的概率。
比较这三个数值,0.00198<0.00798<0.26934,所以计算机可以得出的结论,该水果属于甜橙的可能性是最大的,或者说,这个水果最有可能是甜橙。
你可能已经注意到了,这几个公式里的概率乘积通常都非常小,在物品的属性非常多的时候,这个乘积可能就小到计算机无法处理的地步。因此,在实际运用中,我们还会采用一些数学手法进行转换(比如取 log 将小数转换为绝对值大于 1 的负数),原理都是一样的。
内容比较多,我稍微总结一下。朴素贝叶斯分类主要包括这几个步骤:
准备数据:针对水果分类这个案例,我们搜集了若干水果的实例,并从水果的常见属性入手,将其转化为计算机所能理解的数据。这种数据也被称为训练样本
建立模型:通过手头上水果的实例,我们让计算机统计每种水果、属性出现的先验概率,以及在某个水果分类下某种属性出现的条件概率。这个过程也被称为基于样本的训练
分类新数据:对于一个新水果的属性数据,计算机根据已经建立的模型进行推导计算,得到该水果属于每个分类的概率,实现了分类的目的。这个过程也被称为预测

朴素贝叶斯分类 VS 其他分类算法

用朴素贝叶斯进行分类的内容差不多就是这样,你可能要问了,朴素贝叶斯是唯一的分类算法吗?现实中需要分类的场景那么多,朴素贝叶斯都适用吗?确实,我们有很多种分类算法,它们也都有各自的优劣。我这里就把朴素贝叶斯和常用的几种分类算法做个总结和比较。
KNN 最近邻相比,朴素贝叶斯需要更多的时间进行模型的训练,但是它在对新的数据进行分类预测的时候,通常效果更好、用时更短。
决策树相比,朴素贝叶斯并不能提供一套易于人类理解的规则,但是它可以提供决策树通常无法支持的模糊分类(一个对象可以属于多个分类)。
SVM 支持向量机相比,朴素贝叶斯无法直接支持连续值的输入。所以,在前面的案例中,我将连续值转化成了离散值,便于朴素贝叶斯进行处理。
为了便于你理解记忆,我这里也做一下总结。
如果一个分类的应用场景中,待分类对象的属性值大部分都是离散的(或者很容易转化为离散的)、需要支持模糊分类,并且需要快速可靠的实时分类,那么这种场景通常就非常适合使用朴素贝叶斯方法。

总结

今天我从一个看似非常简单的判断水果的例子出发,介绍了如何通过物体的属性及其数值,让计算机理解现实世界中的事物,并通过朴素贝叶斯方法来对其进行分类。
在朴素贝叶斯方法的推导过程中,我给你讲了如何使用贝叶斯法则,将后验概率的估计转换为先验概率和条件概率。朴素贝叶斯训练过程包括基于样本数据的先验概率和条件概率统计,分类过程就包括了使用贝叶斯法则,结合新样本的属性数据以及训练好的模型数据,进行最终的预测。
最后,我将朴素贝叶斯和其他常见分类算法,比如 KNN 近邻、决策树、SVM 向量机,做了对比。朴素贝叶斯适用离散属性值中,训练过程耗时长但是分类预测速度快,支持模糊分类。这一节的内容比较偏理论,下一节,我会着重来讲朴素贝叶斯的应用场景,告诉你哪些场合下更适合使用朴素贝叶斯法。

思考题

除了文本分类,你还知道什么地方可以使用朴素贝叶斯方法来处理分类问题?
欢迎留言和我分享,也欢迎你在留言区写下今天的学习笔记。你可以点击“请朋友读”,把今天的内容分享给你的好友,和他一起精进。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 20

提建议

上一篇
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
下一篇
23 | 文本分类:如何区分特定类型的新闻?
unpreview
 写留言

精选留言(45)

  • Joe
    2019-02-11
    朴素贝叶斯,朴素的原因是假设各个特征是相互独立的。
    共 2 条评论
    43
  • 冰冷的梦
    2019-03-07
    请问老师p(c|fi,fj) = p(c|fi) * p(c|fj)这一步是怎么推导出来的呀?
    共 7 条评论
    16
  • 山中清泉明月照
    2019-07-07
    p(c|f1,f2)=p(c|f1)*p(c|f2)/p(c) 应该是这样子吧

    作者回复: 严格来说,应该这样推导 p(c|f1,f2)=p(c,f1,f2)/p(f1,f2)=p(c)*p(f1|c)*p(f2|f1,c)/p(f1,f2) 由于朴素贝叶斯中的马尔科夫假设,f1和f2独立,p(c)*p(f1|c)*p(f2|f1,c)=p(c)*p(f1|c)*p(f2|c),而p(f1,f2)=p(f1)*p(f2),所以p(c)*p(f1|c)*p(f2|f1,c)/p(f1,f2) = p(c)*p(f1|c)*p(f2|c)/(p(f1)*p(f2))

    共 7 条评论
    15
  • Bora.Don
    2019-03-02
    感觉老师讲得特别好,谢谢老师!同时还在极客上购买了人工智能和数据分析的课程,都讲了朴素贝叶斯,在这讲得最明白

    作者回复: 感谢支持🙏

    共 2 条评论
    14
  • 机智的捞球布
    2019-06-02
    请问老师: P(c|fi)的值不也是可以直接从训练样本中统计出来的么,为什么要用贝叶斯定理转换成p(fi|c) * p(c) / p(fi), 用另外三个统计值计算出来呢。

    作者回复: 这是一个非常好的问题。确实从实现的角度来说,我们也可以直接统计p(c|fi),不过这需要一些额外的数据结构,例如类似搜索引擎的倒排索引,以及对应的预处理。这会引入一些额外的空间和实际复杂度开销,特别是在大规模并行处理的时候,更加复杂一点。

    共 5 条评论
    11
  • 邓艺晋_Jim
    2019-03-25
    为何三个概率加起来不是等于1,新来的水果不是苹果就是橙子或者西瓜啊,另外想问极客的机器学习课程在哪里有,谢谢

    作者回复: 需要把三个概率再归一化,因为这个概率都只是近似值,是根据贝叶斯规则推算的,所以不是真实的概率,只是一个推算值,看相对大小。 另外,极客时间里有机器学习的课程,你可以看看专栏或者视频课程的列表

    共 4 条评论
    7
  • 唯她命
    2019-02-16
    朴素贝叶斯 必须各个特征相互独立的吗?

    作者回复: 是的,朴素贝叶斯的“朴素”或者说naive就是指这个“天真”的假设。当然,很多时候并不成立,我们可以使用多阶马尔科夫模型来稍作修改,后面几节会有介绍。

    7
  • temool
    2019-02-11
    越看到后面越吃力,前面的也要再重新捋一遍

    作者回复: 反复阅读和练习,就能加深印象,加油!

    6
  • 201200986
    2020-03-22
    终于明白朴素贝叶斯在分类中的原理了,给定的训练集其实包含训练集中每个类别的概率 每个特征的概率以及在已知类别下特征的条件概率,最终可以利用贝叶斯求得在给定特征下类别的概率,从而根据特征求得其属于哪个分类。不知道我这个理解对不对?

    作者回复: 是的👍

    5
  • oillie
    2020-02-03
    垃圾邮件可以用贝叶斯分类

    作者回复: 确实是

    2
  • 🐻🔫🐸
    2019-07-03
    太牛逼了,以前看过数学之美,就立志以后得安排一下数学,这次看老师的文章,真正意义上进行正面接触了,而且讲的相当接地气,易于理解。👍🏻

    作者回复: 很高兴这个专栏对你有价值

    2
  • A君
    2020-06-27
    哦log原来是用于将计算机无法处理的小数转成绝对值大于1的数

    作者回复: 是的

    1
  • zhengfan
    2020-04-28
    黄老师您好。 问题较多,列举如下: 1. 例子中列举的属性很多,但是只使用了两个参与贝叶斯公式计算,得到分类预测结果依然被认为是有效的,是因为假定了属性正交吗? 2. 为什么参与计算的属性越多,所有分类的预测概率越低?似乎有点反直觉。难道这样获得预测结果只是定序而非定量? 3. 为什么不同分类的概率之和不是全集呢?
    展开

    作者回复: 1. 只是举一个例子,可以将多个属性都考虑进来。 2. 这是因为咱们做了很多贝叶斯方法的假设和简化。就如你所说,我们是要一个相对值,看看属于哪个分类的概率最高就行。 3. 这也是因为咱们已经做了很多假设和简化,这也是贝叶斯方法的核心思想,实际上严格来算的概率不是这样的。我们可以在计算出多个概率之后,进行概率的归一化,保证多个类的概率加起来为1.0

    1
  • 罗耀龙@坐忘
    2020-04-14
    茶艺师学编程 思考题 朴素贝叶斯也能用在以下方面: 1、科技领域 短信过滤 黑白名单 垃圾短信 机器学习——半监督学习 链接(路)预测 2、金融学 股票预测(基于“股票并不是随机漫步”的假设之上) 信用风险 3、交通 常规公交 城市交通 车载自组织网络 4、气象学 降水预报
    展开
    1
  • 失火的夏天
    2019-12-29
    之前拉下的,现在回来补一补,概率统计居然有这么大的作用,我已经决定把大学里概率论与数理统计那本书翻出来重新复习了,O(∩_∩)O哈哈~

    作者回复: 很高兴对你有所启发

    1
  • 刘清斌
    2019-10-28
    老师,这一讲真的很清楚明白,比其他的书籍和教程讲的形象和容易理解

    作者回复: 感谢支持!

    2
  • Paul Shan
    2019-09-02
    我个人觉得联合分布是贝叶斯公式的枢纽,由已知的条件概率求出联合分布,再由联合分布求出待求的条件概率,老师这样理解正确吗,多谢!

    作者回复: 是的

    1
  • 大秦岭
    2019-06-12
    看了两边,照猫画虎了好几遍,貌似懂了,继续加油中........ 谢谢老师~

    作者回复: 可以自己动手实现一个NB的分类器,加深印象

    1
  • 大熊
    2019-05-20
    重点还是对贝叶斯公式的理解,后面的都是基于公式的变形

    作者回复: 没错👍

    1
  • 予悠悠
    2019-05-02
    老师朴素贝叶斯和逻辑回归有什么区别呢?

    作者回复: 两者理论基础不一样,朴素贝叶斯是从概率论的角度出发,而逻辑回归在回归时和线性回归类似,不过把输出转换成非线性的输出,而且把连续的数值分为两个类别。

    共 2 条评论
    1