文章目录
- 贝叶斯概率简述
- 朴素贝叶斯
- 训练过程
- 预测过程
- 简单的说
贝叶斯概率简述
在我写过的关于统计学相关文章 《概率论基础 —— 2. 条件概率、全概率、贝叶斯概率公式》 提到过一个很重要的概率公式—— 贝叶斯公式。其基本形式如下:
P(xi∣Y)=P(xi)P(Y∣xi)P(Y)P(x_i | Y) = \frac{P(x_i) P(Y | x_i)}{P(Y)} P(xi∣Y)=P(Y)P(xi)P(Y∣xi)
这里的 P(Y)P(Y)P(Y) 表示事件 YYY 发生的全概率,P(xi)P(x_i)P(xi) 事件 xix_ixi 发生的概率,以及当 YYY 发生时的条件概率 P(Y∣xi)P(Y | x_i)P(Y∣xi)。
为了方便理解这个公式的概念,现在我们引入一个例子。假设某工厂有一条产品线,然后该产品线分别在该工厂的两个车间,或者两个生产线进行生产。由于车间的建设时间,以及车间生产线建设时间的不同,以及可能不同的安装工人对生产线的调试方法的不同,车间A和车间B都有不同程度的次品概率。
也就说我们可以用下表进行表示:
车间 | 产量占比 | 良品率 | 次品率 |
---|---|---|---|
A | 45% | 97% | 3% |
B | 55% | 95% | 5% |
贝叶斯公式研究的问题就是,当我们拿到了一件次品,它是车间A生产的概率和车间B生产的概率分别是多少。
显然,你不能简单的用 3 /(3+5)来表示车间产自A次品的概率,所以我们对这类问题要使用一种全新的经验模型来评估这类事件的概率。
这就是贝叶斯概率模型。为了求解上面这个问题,首先我们要得到所有概率事件的全概率,因此有:
P(A)=∑P(A∣B)⋅P(B)P(A)=\sum P(A | B) \cdot P(B) P(A)=∑P(A∣B)⋅P(B)
其中,A和B是随机事件,P(A|B) 表示B发生条件下A发生的概率,P(B)表示B发生的概率。其中 P(A|B) 又是条件概率,其公式表示为:
p(A∣B)=P(AB)P(B)p(A|B) = \frac{P(AB)}{P(B)} p(A∣B)=P(B)P(AB)
这里,P(AB)是事件A和事件B同时发生的概率。可以理解为在B发生的条件下,A发生的概率,又称为B条件下A发生的概率,因此相对以上这些知识点,我们可以获得当拿到一个次品时,它分别产自车间A的概率和车间B的概率为:
根据全概率公式,可以得到:
P(A|次品) = P(A and 次品) / P(次品)
P(B|次品) = P(B and 次品) / P(次品)
由于我们已知车间A和B的产量占比,因此可以得到:
P(次品) = P(A and 次品) + P(B and 次品)
所以,
P(A|次品) = P(A and 次品) / P(A and 次品) + P(B and 次品)
P(B|次品) = P(B and 次品) / P(A and 次品) + P(B and 次品)
P(A and 次品) = P(A) * P(次品|A) = 45% * 3% = 1.35%
P(B and 次品) = P(B) * P(次品|B) = 55% * 5% = 2.75%
即
P(A|次品) = 1.35 / (1.35 + 2.75) = 0.33
P(B|次品) = 2.75 / (1.35 + 2.75) = 0.67
因此,拿到一个次品时,它产自车间A的概率是33%,产自车间B的概率是67%。
显然,如果假设我们知道一个概率表的情况下,那么拿到某个样本时我们能很容易的通过贝叶斯模型计算出它可能的概率,因此在机器学习中,我们引入了一个新的分类神器,朴素贝叶斯。
朴素贝叶斯
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的分类算法。朴素贝叶斯算法基于贝叶斯定理,假设各特征之间相互独立,进行分类。
训练过程
首先对训练数据进行预处理,计算每个特征在每个类别中的概率。根据特征的独立性假设,计算每个类别的先验概率。保存计算得到的概率。
预测过程
对于新的输入样本,计算它属于每个类别的概率。
根据每个类别的先验概率和特征在类别中的概率计算出每个类别的后验概率。将输入样本分类到后验概率最大的类别中。
朴素贝叶斯算法的优点是简单易实现,时间复杂度低,可以处理大量数据,并且在线性分类器和贝叶斯分类器中表现较好。但是其假设特征之间相互独立,在实际应用中往往是不成立的,因此精度可能较低。
简单的说
看起来很复杂有没有,其实简单来说就是我们先设立一张表,然后把出现的数据类型A,B,C以及数据的属性a, b, c, d, e分别进行统计,然后得到每个样本,不同特征的概率,这就是先验概率。
类别 | 出现概率 | 特征a | 特征b | 特征c |
---|---|---|---|---|
A | 25% | 40% | 30% | 30% |
B | 30% | 10% | 25% | 65% |
C | 45% | 50% | 45% | 5% |
然后对测试样本的特征进行分析,得到各特征出现的概率,然后再根据贝叶斯公式推算出它可能的分类。
这样说可能比较抽象,那么我们举垃圾邮件过滤机制为例,假设我们有数千封电子邮件作为样本,在我们完成对电子邮件样本分析和清洗后,得到类似一封邮件里如果出现类似重金求子,我有一笔存款与你分享等字样,那么大概率是垃圾邮件,而发现附件有Jpg文件但是文件大小有数十兆且没有具体说明的,有可能是木马邮件。
这样当你建立好这个过滤规则表后,并计算了先验概率。当你再次得到一封邮件时,你就可以对邮件内内容特征进行判断,给出它可能是有害邮件还是普通邮件的概率了。
程序示例,我准备放在下一章节里进行演示,有兴趣的朋友记得关注哟!