Skip to content

朴素贝叶斯

一、贝叶斯算法

1、概念

⻉叶斯是由一名英国数学家提出来的,⻉叶斯就是这个数学家的名字。

⻉叶斯算法的原理:当不知道这个事物实际情况的时候,可以根据一些相关的条件,来判断它的真实情况。 如果用数学的话表达的话,贝叶斯定理就是: 根据先验概率,和条件概率,估算得到后验概率。

  • 条件概率: 事件 B 在另一个事件 A 已经发生条件下的概率,记作 P(B∣A)。在统计学中, 也称之为似然函数。比如说,北京下雨后,发生道路堵⻋的概率。
  • 先验概率: 是事件 A 或 事件 B 是根据经验来判断发生的概率,记作P(A)、P(B)。
  • 后验概率: 是我们已经看到某个事情发生了,再判断这个事情发生原因的概率,记作P(A∣B)。 比如 某一天你堵车了,造成你这个堵车的原因是因为下雨这件事,这个的概率就是后验概率。

2、公式

其中 A 以及 B 为随机事件,且 P(B) 不为零。P(A|B) 是指在事件B发生的情况下事件A发生的概率。

在贝叶斯定理中,每个名词都有约定俗成的名称:

  • P(A|B) 是已知 B 发生后,A的 条件概率。也称作A的 事后概率
  • P(A) 是 A 的 先验概率(或边缘概率)。其不考虑任何B方面的因素。
  • P(B|A) 是已知 A 发生后,B的条件概率。也可称为B的后验概率。某些文献又称其为在特定 B 时,A 的似然性,因为 P(B|A) = L(A|B)。
  • P(B) 是 B 的先验概率

二、应用场景

1、预测航班是否延误

国内的很多 OTA 行业(Online Travel Agency,在线旅行行业)基本都接入了延误险。

业内的做法是在售卖机票的时候,直接搭售延误险,这样的产品设计对于用户体验来说是 有损害的,用户往往在不知情的情况下,购买了本不需要的产品。

历史数据:

  • 过去 100 次的航班中,有 30 次延误。
  • 在 100 次的航班中,有 50 次是在雨天。
  • 在这 30 次延误的航班中,有 20 次是在雨天。

思考 ?🤔:

  • 可否直接用 30%作为延误概率的结果输出?
  • 因为过去 30 次延误的时候,20 次是雨天,所以雨天延误的概率不是 2/3 吗?
  • 同样的航班,当天出行不是雨天,而是晴天,航班延误的概率为多少?

三、朴素贝叶斯

1、概念

  • 朴素⻉叶斯就是我们在⻉叶斯原理的基础上,加了一个前提假设:特征与特征之间的相互独立。
  • 所以朴素⻉叶斯就是在⻉叶斯算法的基础上,假设了所有的条件对结果都是独立发生作用的。

我们上面是只考虑了 天气因素对航班延误与否的影响结果,但如果大家经常坐飞机的话,就肯定能感觉到,不同的航空公司,延误的概率也有很大的不同,特别是一些廉价航空,同样的天气同一个机场,它的延误概率就会比一些较好的航空公司高。

这时候,我们就会有更多可以参考的历史数据了:

  • 在过去的 100 次航班中,有 30 次延误。
  • 在过去的 100 次的航班中,有 50 次是在雨天。
  • 在这 30 次延误的航班中,有 20 次是在雨天。
  • 在过去的 100 次航班中,50 次航班是由春秋航空承运的,另外 50 次是由南方航空承运的。
  • 在延误的 30 次航班中,有 24 次是由春秋航空承运的,另外 6 次是由南方航空承运的。

问题: 当我出发的那天是雨季,且乘坐的是春秋航空的时候,延误的概率有多大?

2、公式

3、计算

  • A为航班延误,P(延) = P(A) = 30%
  • B为天气是雨天,P(雨) = P(B) = 50%
  • C为乘坐春秋航空,P(春) = P(C) = 50%
  • 在已知延误的情况下,是乘坐春秋航空的概率 P(春|延) = P(C|A) = 80%
  • 在已知延误的情况下,是雨天的概率 P(雨延) = P(BA) = 66.7%
  • 在雨天的情况下,乘坐春秋航空,航班延误的概率 P(A|B,C)

四、应用场景

1、垃圾邮件检测

  • 垃圾邮件检测,得益于自然语言处理 NLP 领域的快速发展,人们逐渐发现朴素贝叶斯算法非常适合用于处理文本类的信息,例如垃圾邮件检测、文档分类等方面。

  • 原因在于文本单词之间的关联性很小,基本可以假设为相互独立,因此贝叶斯算法在文本方面的应用有显著效果。

计算

新问题

假如一个邮件中,在出现了 cheap 的基础下,还出现了 promotion(促销),那这封邮件为垃圾邮件的概率就很大了。

按照这个思路,我们就可以选出这封信中 P(S|W)最高的 15 个词,也就是最有可能是垃圾邮件的那几个词,计算它们的出现的联合概率。

这样的话,之后每遇到一个新邮件,我们都可以用它来判定是否为垃圾邮件。

可以像使用线性回归进行分类那样,设置一个阈值,高于这个阈值的邮件才会被判定为垃圾邮件。比如我们可以将将阈值设置为 0.9。某封邮件经过联合概率计算后若结果高于 0.9,则表示经过 15 个词联合认定这封邮件有 90%以上的概率为垃圾邮件。

这样的话,一封正常的邮件,即使包含了某一两个关键词,但是大部分的词的 P(S|W) 值都很小,所以它也不会被认定为垃圾邮件,这样一来就极大得提高了我们分类的效率。

五、算法优缺点

优点:

  • 简单且快速: 由于其假设特征之间的独立性,模型的训练和预测都很快。
  • 资源占用少: 由于其核心就是⻉叶斯公式,所以它实现的过程是几乎不需要训练的,算法计算的时候对资源也占用比较小
  • 数据量要求低: 与其悠复杂模型相比,朴素贝叶斯需要较少的训练数据就可以进行估计。

缺点:

  • 独立性假设: 在实际应用中,很难找到完全独立的特征。这种强烈的独立性假设可能会导致模型在某些数据集上的性能不佳。
  • 局限性大: 由于朴素⻉叶斯的独立性假设,就是,要求各个条件之间相互独立,互不影响。只有在条件比较少,并且相互独立的时候,朴素⻉叶斯的效果才会比较好。

Released under the MIT License.