朴素贝叶斯理论--自我理解

本文深入解析了贝叶斯理论及其在机器学习领域的应用,详细介绍了如何使用贝叶斯公式进行分类预测,探讨了特征独立假设的重要性及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子-先验概率

还是拿质检员的例子来做分析,假如我是一个质检员,现在接到了三箱零件需要检验,其中第一箱有10个零件,第二箱有20个零件,第三箱有15个。半小时过去了,检验的结果出炉,第一箱有1个不合格,第二箱有3个不合格,第三箱2个不合格。

箱子总零件个数不合格
A101
B203
C152

那现在我从这三个箱子中随便拿取一个零件,这个零件是合格的概率是多少呢?我们假设事件D:零件合格,则:
P ( D ) = P ( A ) ∗ P ( D ∣ A ) + P ( B ) ∗ P ( D ∣ B ) + P ( C ) ∗ P ( D ∣ C ) = ( 1 / 3 ) ∗ ( 9 / 10 ) + ( 1 / 3 ) ∗ ( 17 / 20 ) + ( 1 / 3 ) ∗ ( 13 / 15 ) = 0.872 \begin{aligned} P(D)&=P(A)*P(D| A) + P(B) *P(D| B) + P(C)*P(D | C) \\ &=(1/3) * (9/10) + (1/3) * (17/20) + (1/3) * (13/15) \\ &= 0.872 \end{aligned} P(D)=P(A)P(DA)+P(B)P(DB)+P(C)P(DC)=(1/3)(9/10)+(1/3)(17/20)+(1/3)(13/15)=0.872

像这样得出一个零件是合格的概率就计算出来了,已知事件的分布,来求结果, 先验概率是指根据以往经验和分析得到的概率,如全概率公式,它往往作为"由因求果"问题中的"因"出现,但是在机器学习领域中,可能我们更想知道,给你一个样本,请告知这个样本属于哪个类目的问题,这也叫分类问题,这就涉及到后验概率的问题。

后验概率-朴素贝叶斯理论

现在我们假设这样一个场景:你拿到了一个零件,这个零件是属于哪个箱子?这个问题在机器学习中就是类比为:给你一个样本,这个样本有很多特征,机器模型输出该样本属于哪个类别。这样我们来理解贝叶斯理论。

条件概率

P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} P(AB)=P(B)P(AB)
P ( A ∣ B ) P(A|B) P(AB)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率, P ( A B ) P(AB) P(AB)表示事件A、事件B共同发生的概率, P ( B ) P(B) P(B)表示事件B发生的概率,这样就计算就是一个条件概率。
我们结合上面零件合格这个场景继续思考,如果我们知道了这件零件是合格的,那么它是来自A、B、C三类中具体哪个类中?具体哪个类目我们肯定是不知道的,因为三个类目都有合格的零件,但是我们可以知道这件合格的零件来自每个类目的概率是多少,也就是求 P ( A ∣ D ) P(A|D) P(AD) P ( B ∣ D ) P(B|D) P(BD) P ( C ∣ D ) P(C|D) P(CD),其中D表示这件零件是合格的概率,由条件概率知道:
P ( A ∣ D ) = P ( A ∗ D ) P ( D ) P ( B ∣ D ) = P ( B ∗ D ) P ( D ) P ( C ∣ D ) = P ( C ∗ D ) P ( D ) \begin{aligned} P(A|D) &= \frac{P(A*D)}{P(D)} \\ P(B|D) &= \frac{P(B*D)}{P(D)} \\ P(C|D) &= \frac{P(C*D)}{P(D)} \end{aligned} P(AD)P(BD)P(CD)=P(D)P(AD)=P(D)P(BD)=P(D)P(CD)

其中 P ( D ) P(D) P(D) 已经在上面计算出来了, P ( D ) = 0.872 P(D)=0.872 P(D)=0.872 P ( A ∗ D ) P(A*D) P(AD) 表示这件零件来自A箱子,并且是正品的概率,两个条件是独立的,所以我们计算为:
P ( A ∗ D ) = P ( A ) ∗ P ( D ∣ A ) = ( 1 / 3 ) ∗ ( 9 / 10 ) = 0.3 \begin{aligned} P(A*D) &=P(A)*P(D|A)\\ &= (1/3) * (9/10) \\ &=0.3 \end{aligned} P(AD)=P(A)P(DA)=(1/3)(9/10)=0.3
于是我们可以计算合格商品来自每个箱子的概率:
P ( A ∣ D ) = P ( A ∗ D ) P ( D ) = 0.3 / 0.872 = 0.344 P ( B ∣ D ) = P ( B ∗ D ) P ( D ) = 0.283 / 0.872 = 0.324 P ( C ∣ D ) = P ( C ∗ D ) P ( D ) = 0.289 / 0.872 = 0.332 \begin{aligned} P(A|D) &= \frac{P(A*D)}{P(D)} \\ &=0.3/0.872 \\ &=0.344 \\ \\ P(B|D) &= \frac{P(B*D)}{P(D)} \\ &=0.283 /0.872\\ &=0.324 \\ \\ P(C|D) &= \frac{P(C*D)}{P(D)} \\ &=0.289/0.872 \\ &=0.332 \end{aligned} P(AD)P(BD)P(CD)=P(D)P(AD)=0.3/0.872=0.344=P(D)P(BD)=0.283/0.872=0.324=P(D)P(CD)=0.289/0.872=0.332
从而知道了合格的零件最可能来自箱子A,因为来自箱子A的概率最高,达到了0.344。从这个例子中我们可以引出贝叶斯理论:

我们假设事件D发生了,求事件D发生是因为事件A的概率,求逆向概率,怎么理解?看下面:
1、假设事件A导致事件D发生的条件概率是:
P ( D ∣ A ) = P ( D ∗ A ) P ( A ) P(D|A) = \frac{P(D*A)}{P(A)} P(DA)=P(A)P(DA)
所以 P ( D ∗ A ) = P ( D ∣ A ) ∗ P ( A ) P(D*A)=P(D|A)*P(A) P(DA)=P(DA)P(A)
2、现在事件D发生了,可能是事件A导致的,也可能是事件B导致,或者其他事件导致的,我们想知道,是事件A导致的概率,所以,事件D发生是因为事件A导致的条件概率,公式如下:
P ( A ∣ D ) = P ( D ∗ A ) P ( D ) P(A|D) = \frac{P(D*A)}{P(D)} P(AD)=P(D)P(DA)
将1步骤中的 P ( D ∗ A ) = P ( D ∣ A ) ∗ P ( A ) P(D*A)=P(D|A)*P(A) P(DA)=P(DA)P(A) 代入到本公式中,替换分子 P ( D ∗ A ) P(D*A) P(DA)得到:
P ( A ∣ D ) = P ( D ∣ A ) ∗ P ( A ) P ( D ) P(A|D) = \frac{P(D|A)*P(A)}{P(D)} P(AD)=P(D)P(DA)P(A)

公式推导如上,经过上述两个步骤后,我们可以得到最终的贝叶斯公式:
P ( A ∣ D ) = P ( D ∣ A ) ∗ P ( A ) P ( D ) P(A|D) = \frac{P(D|A)*P(A)}{P(D)} P(AD)=P(D)P(DA)P(A)

可能有人问:我们这么转换公式是为了什么?其实推导工程也就用了两次条件概率,正好两次条件概率公式的分子是一样的,用来替换一下,其实这是因为在我们日常中,我们比较容易知道结果,就像你带着眼罩从箱子里随便拿到一个零件,这个零件合格或不合格是容易判断的,但是你怎么知道它是来自哪个箱子的?于是我们的问题就变成了:从三个箱子中拿出一个零件,这个零件是属于某一个箱子的概率,问题角度变了,我们不再关注它是合格还是不合格,合格或不合格很容易知道,但它属于哪个箱子就不容易知道,贝叶斯的提出就是解决这个问题

类比到机器学习领域

好了,我们知道了贝叶斯理论,那么对应到机器学习领域,这个思维怎么转换?类比到机器学习就是:给你一条样本,这个样本的特征给出来了,每个特征的具体数值也给你了,现在请你告诉我它属于哪个类目?当然,这肯定是一条测试集,因为在训练集中,每一条记录都被标记了结果,也就是被打上标签,在二分类任务中,样本属于A类就被标记1,不属于A类就被标记0,形式化描述就是如下:

输入:训练集 X t r a i n = { x 1 , x 2 , x 3 , . . . , x n } X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\} Xtrain={x1,x2,x3,...,xn} ,测试集 X t e s t = { x 1 , x 2 , x 3 , . . . , x m } X_{test}=\{{x_1},{x_2},{x_3},...,{x_m}\} Xtest={x1,x2,x3,...,xm}
其中 x 1 = { t 1 , t 2 , t 3 , . . . , t h } x_1=\{{t_1},{t_2},{t_3},...,{t_h}\} x1={t1,t2,t3,...,th},每一个样本又h个特征,训练集中每一个样本还有一个label标注结果。

这是比较形式化的一个描述,但又比较抽象,我们可以这么理解,给你测试集的一个样本,这个样本的每个特征数值告诉你了,这相当于告诉你这个零件是合格的还是不合格,然后你来告诉我这个样本是属于哪个类目,也就是 样本中的特征数值 就是上述箱子例子中零件合格这个结果,同时因为训练集有特征数值、每个样本有类目结果,我们可以从训练集入手,比较轻松的计算贝叶斯公式中某些概率,下一节,我们将具体计算。

机器学习中的贝叶斯理论

我们继续将贝叶斯理论结合到机器学习领域,我们假设场景:

背景条件:训练集 X t r a i n = { x 1 , x 2 , x 3 , . . . , x n } X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\} Xtrain={x1,x2,x3,...,xn},分类结果是 C = { C 1 , C 2 , . . . , C i } C=\{C_1,C_2,...,C_i\} C={C1,C2,...,Ci},每一条训练集记录对饮一个分类结果
输入:给你一个测试集样本 x 1 = { t 1 , t 2 , t 3 , . . . , t h } x_1=\{{t_1},{t_2},{t_3},...,{t_h}\} x1={t1,t2,t3,...,th}
输出:给出这个样本属于哪个类目

首先思考,一共有 i i i个分类结果,我们可以计算这个样本属于每个分类结果的概率,选取概率大的分类结果作为这条样本的类目,那针对这条样本我们知道每个特征的数值,我们认为这些特征是从训练集中挑选的,每个训练集样本有一个分类结果,于是我们将特征类比为合格,那么这个合格样本来自那个类目?思考如下:

1、样本数据是 x 1 = { t 1 , t 2 , t 3 , . . . , t h } x_1=\{{t_1},{t_2},{t_3},...,{t_h}\} x1={t1,t2,t3,...,th},先取一个特征分析,我们假设取的特征是 t h t_h th,根据贝叶斯理论我们知道 P ( C i ∣ t h ) P(C_i|t_h) P(Cith)公式定义如下:
P ( C i ∣ t h ) = P ( t h ∣ C i ) ∗ P ( C i ) P ( t h ) P(C_i|t_h)= \frac{P(t_h|C_i)*P(C_i)}{P(t_h)} P(Cith)=P(th)P(thCi)P(Ci)
2、我们针对1中的公式来拆解分析:
(1) P ( t h ∣ C i ) P(t_h|C_i) P(thCi)表示在 C i C_i Ci分类中 t h t_h th出现的概率,我们可以利用训练集中来计算,因为训练集中有这个特征数值,可以计算这个特征数值出现在 C i C_i Ci类目样本中的概率
(2) P ( C i ) P(C_i) P(Ci)表示类目 C i C_i Ci出现的概率,这个直接计算训练集中 C i C_i Ci类目样本占总样本的比例
(3) P ( t h ) P(t_h) P(th)表示特征 t h t_h th出现的概率,计算类似从箱子中取一个合格零件的概率,这里就是从各个类目中抽取这个特征数值的概率

通过上述的三个步骤就可以计算出特征 t h t_h th属于类目 C i C_i Ci的概率。我们继续推广,一个样本记录有多个特征,所以我们假设:

假设:样本中每个特征之间是互相独立、互不影响的。

这条假设很重要,很方便计算,接下来我们计算一个样本属于某个类目的概率。

P ( C i ∣ x i ) = P ( x i ∣ C i ) ∗ P ( C i ) P ( x i ) = P ( t 1 , t 2 , . . . , t h ∣ C i ) ∗ P ( C i ) P ( t 1 , t 2 , . . . , t h ) P(C_i|x_i)= \frac{P(x_i|C_i)*P(C_i)}{P(x_i)}= \frac{P({t_1,t_2,...,t_h}|C_i)*P(C_i)}{P(t_1,t_2,...,t_h)} P(Cixi)=P(xi)P(xiCi)P(Ci)=P(t1,t2,...,th)P(t1,t2,...,thCi)P(Ci)
P ( C i ∣ x i ) P(C_i|x_i) P(Cixi),由上述的假设,每个特征都是独立的,则:
(1) P ( x i ∣ C i ) = P ( t 1 ∣ C i ) ∗ P ( t 2 ∣ C i ) ∗ P ( t 3 ∣ C i ) . . . P ( t h ∣ C i ) = ∏ j = 1 h P ( t j ∣ C i ) P(x_i|C_i)=P(t_1|C_i)*P(t_2|C_i)*P(t_3|C_i)... P(t_h|C_i)=\prod_{j=1}^hP(t_j|C_i) P(xiCi)=P(t1Ci)P(t2Ci)P(t3Ci)...P(thCi)=j=1hP(tjCi)
(2) P ( x i ) = P ( t 1 ) ∗ P ( t 2 ) ∗ P ( t 3 ) . . . P ( t h ) = ∏ j = 1 h P ( t j ) P(x_i)=P(t_1)*P(t_2)*P(t_3)... P(t_h)=\prod_{j=1}^hP(t_j) P(xi)=P(t1)P(t2)P(t3)...P(th)=j=1hP(tj)
所以 P ( C i ∣ x i ) P(C_i|x_i) P(Cixi)公式为:
P ( C i ∣ x i ) = P ( x i ∣ C i ) ∗ P ( C i ) P ( x i ) = ∏ j = 1 h P ( t j ∣ C i ) ∗ P ( C i ) ∏ j = 1 h P ( t j ) P(C_i|x_i)= \frac{P(x_i|C_i)*P(C_i)}{P(x_i)}= \frac{\prod_{j=1}^hP(t_j|C_i)*P(C_i)}{\prod_{j=1}^hP(t_j)} P(Cixi)=P(xi)P(xiCi)P(Ci)=j=1hP(tj)j=1hP(tjCi)P(Ci)

这样根据公式 P ( C i ∣ x ) P(C_i|x) P(Cix),我们就可以计算出: P ( C 1 ∣ x ) 、 P ( C 1 ∣ x ) 、 P ( C i ∣ x ) P(C_1|x)、P(C_1|x)、P(C_i|x) P(C1x)P(C1x)P(Cix)等分类的概率,通过比较大小,我们就可以知道这个这个样本属于哪个类目了,重点是比较概率大小,所以在计算的时候也可以不计算分子,因为分子 P ( x ) P(x) P(x)对于多有分类结果来说都是一样的,所以直接计算分子比较概率大小。

P ( t h ∣ C i ) P(t_h|C_i) P(thCi)计算

上文中我们研究了贝叶斯理论实现对样本的分类,但是其中 P ( t h ∣ C i ) P(t_h|C_i) P(thCi)的计算会有一个问题:如果特征都是离散值,这就可以直接求离散值的占比情况就可以,但是如果特征是连续值,就不好计算了, 通常当特征属性为连续值时,我们假定其值是服从高斯分布(也称正态分布)。即:
g ( x , σ , μ ) = 1 2 π × σ e 1 2 ( x − μ σ ) 2 g(x,\sigma,\mu)=\frac{1}{\sqrt{{2\pi}}\times\sigma}e^{\frac{1}{2}(\frac{x-\mu}{\sigma})^2} g(x,σ,μ)=2π ×σ1e21(σxμ)2
P ( t h ∣ C i ) = g ( t h , σ C i , μ C i ) P(t_h|C_i)=g(t_h,\sigma_{C_i},\mu_{C_i}) P(thCi)=g(th,σCi,μCi)

因此只要计算出训练集中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。另一个需要讨论的问题就是当 P ( t h ∣ C i ) = 0 P(t_h|C_i)=0 P(thCi)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对每类别下所有特征出现的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。

优点与缺点

优点
  (1)算法简单,复杂度不高,解决大部分场景。
  (2)对小规模的数据表现很好,能处理多分类任务。
  (3)适合增量式训练,可以很方便的扩充训练集用于增量训练。
缺点
  (1)有可能一个样本对于每个分类类别的概率是一样高的
  (2)很多特征是连续数值型的,但是它们不一定服从正态分布,一定要想办法把它们变换调整成满足正态分布
  (3)朴素贝叶斯有分布独立的假设前提,而实际业务重很难完全独立

总结

这很多都是自我理解的东西,有些概念、标题可能不是那么准确,也就是拍脑袋想起来的,总结不到位的地方希望大家指出。下回我将讲解贝叶斯理论如何结合实际场景,总之感谢网络上大牛的博客,让我学到了很多内容,此文是自己思考理解的,希望对大家有帮助。

参考博客

机器学习:说说贝叶斯分类
算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
贝叶斯方法优缺点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值