朴素贝叶斯算法(1)超详细的算法介绍

引言

贝叶斯算法的思想可以概括为选择后验概率最大的类为分类标签,先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起计算得到。一般来说先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化。如今在很多可以具体统计的领域,贝叶斯理论很好用,比如文本分类、垃圾文本过滤,情感判别,多分类实时预测等。

算法介绍

下面用一个简单的摸球游戏来说明这个算法:
例: 一号框(C1)有10个黑球和40个白球,二号框(C2)有30个黑球和20个白球。现在随机选择一个框,从中摸出一个球,发现是白球。问这个白球(X)最可能来自哪个框?

这类问题可以借助贝叶斯公式来计算,不需要针对目标变量建立模型。在分类时,通过计算样本属于各个类别的概率,然后取概率值大的类别作为分类类别。

P(X|C): 条件概率(已知)-------->C中出现X的概率
P(C ): 先验概率(已知) --------->C出现的概率
P(C|X): 后验概率(未知)-------->X属于C类的概率

以上有C1和C2两个类,由于P(X)都是一样的,所以不需要考虑P(X),只需要考虑如下:

如果 P(X|C1)P(C1) > P(X|C2)P(C2),则 P(C1|X) > P(C2|X),得 X 属于C1;
如果 P(X|C1) P(C1) < P(X|C2) P(C2),则 P(C2|X) < P(C2|X),得 X 属于C2。

A:上例中,白球(X)的概率P(X)=3/5

P(X|C1): 一号框中白球的概率 ------------------>4/5
P(X|C2): 二号框中白球的概率 ------------------>2/5
P(C1)=P(C2): 两个框被选中的概率相同 ----->1/2

B:则白球来自两个框的概率分别为:

白球来自一号框的概率--------->P(C1|X) = P(X|C1)P(C1)/P(X)=2/3
白球来自二号框的概率--------->P(C2|X) = P(X|C2)P(C2)/P(X)=1/3
P(C1|X) > P(C2|X)

因此白球最可能来自一号框。
这个简单的案例说明了贝叶斯算法的用法,然后我会具体的介绍下这个算法推导过程。如果不想看算法推导过程,可以直接看第二节,python的算法案例。

公式

在这里感谢刘建平Pinard前辈的公式推导过程,后面给出链接朴素贝叶斯算法原理小结

独立公式: 如果X, Y相互独立
P ( X , Y ) = P ( X ) P ( Y ) P(X, Y) = P(X)P(Y) P(X,Y)=P(X)P(Y)

条件概率公式:
P ( Y ∣ X ) = P ( X , Y ) / P ( X ) P ( X ∣ Y ) = P ( X , Y ) / P ( Y ) — — — — — — — — — — — — — — P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) / P ( X ) P ( X ∣ Y ) = P ( Y ∣ X ) P ( X ) / P ( Y ) P(Y|X) = P(X, Y)/P(X) \\ P(X|Y) = P(X, Y)/P(Y) \\ —————————————— \\ P(Y|X) = P(X|Y)P(Y)/P(X) \\ P(X|Y) = P(Y|X)P(X)/P(Y) \\ P(YX)=P(X,Y)/P(X)P(XY)=P(X,Y)/P(Y)P(YX)=P(XY)P(Y)/P(X)P(XY)=P(YX)P(X)/P(Y)

全概率公式:
P ( X ) = ∑ k P ( X ∣ Y = Y k ) P ( Y k ) 其 中 ∑ k P ( Y k ) = 1 P(X) = \sum_{k}P(X|Y=Y_k)P(Y_k)其中 \sum_{k}P(Y_k)=1 P(X)=kP(XY=Yk)P(Yk)kP(Yk)=1

得到贝叶斯公式:
P ( Y k ∣ X ) = P ( X ∣ Y k ) P ( Y k ) ∑ k P ( X ∣ Y = Y k ) P ( Y k ) P(Y_k|X) =\frac{P(X|Y_k)P(Y_k)}{ \sum_kP(X|Y=Y_k)P(Y_k)} P(YkX)=kP(XY=Yk)P(Yk)P(XYk)P(Yk)

贝叶斯模型

朴素贝叶斯常用的三个模型有:

  • 高斯模型:处理特征是连续型变量的情况
  • 多项式模型:最常见,要求特征是离散数据
  • 伯努利模型:要求特征是离散的,且为布尔类型,即true和false,或者1和0

假设分类模型有count(test)=m个样本,每个样本有n个特征,特征输出有K个类别,定义为 C 1 , C 2 , . . . , C k C1,C2,...,C_k C1,C2,...,Ck,每个特征的输出类别为样本个数为 m 1 , m 2 , . . . m k m_1,m_2,...m_k m1,m2,...mk。在第k个类别中,如果是离散特征,则特征 X i X_i Xi各个类别取值为 m i l m_{il} mil l = 1 , 2 , 3 , . . . , S i l=1,2,3,...,S_i l=1,2,3,...,Si,其中 S i S_i Si为特征i的不同取值数。
( x 1 ( 1 ) x 2 ( 1 ) . . . x n ( 1 ) x 1 ( 2 ) x 2 ( 2 ) . . . x n ( 2 ) . . . . . . . . . . . . x 1 ( m ) x 2 ( m ) . . . x n ( m ) ) = ( X ( 1 ) X ( 2 ) . . . X ( m ) ) \begin{pmatrix} x_1^{(1)} &amp; x_2^{(1)} &amp; ... &amp; x_n^{(1)}\\ x_1^{(2)} &amp; x_2^{(2)} &amp; ... &amp; x_n^{(2)}\\ ... &amp; ... &amp; ... &amp; ...\\ x_1^{(m)} &amp; x_2^{(m)} &amp; ... &amp; x_n^{(m)}\\ \end{pmatrix}= \begin{pmatrix} X^{(1)}\\ X^{(2)}\\ ...\\ X^{(m)} \end{pmatrix} x1(1)x1(2)...x1(m)x2(1)x2(2)...x2(m)............xn(1)xn(2)...xn(m)=X(1)X(2)...X(m)

step1: 计算先验分布
P ( Y = C k ) ( k = 1 , 2 , . . . , K ) P(Y=C_k)(k=1,2,...,K) P(Y=Ck)(k=1,2,...,K)

step2: 条件概率分布
P ( X = x ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) P(X=x|Y=C_k) = P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) P(X=xY=Ck)=P(X1=x1,X2=x2,...Xn=xnY=Ck)

step3: 用贝叶斯公式得到X,Y的联合分布 P ( X , Y ) P(X,Y) P(X,Y)
P ( X , Y = C k ) = P ( Y = C k ) P ( X = x ∣ Y = C k ) = P ( Y = C k ) P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) P(X,Y=C_k)\\=P(Y=C_k)P(X=x|Y=C_k)\\ \\=P(Y=C_k)P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) P(X,Y=Ck)=P(Y=Ck)P(X=xY=Ck)=P(Y=Ck)P(X1=x1,X2=x2,...Xn=xnY=Ck)

step4: P ( Y = C k ) P(Y=C_k) P(Y=Ck)可由最大似然估计法求出。得到的 P ( Y = C k ) P(Y=C_k) P(Y=Ck)就是类别 C k C_k Ck在训练集中出现的频数。

step5: 因为 P ( X = x 1 , X = x 2 , . . . X = x n ∣ Y = C k ) P(X=x_1, X=x_2,...X=x_n|Y=C_k) P(X=x1,X=x2,...X=xnY=Ck)很难求出。朴素贝叶斯模型在这里大胆假设X的n个维度之间相互独立。那么就能得到
P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k)\\ =P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) P(X1=x1,X2=x2,...Xn=xnY=Ck)=P(X1=x1,X2=x2,...Xn=xnY=Ck)

从上式看出大大简化了条件分布,但是也带了很大的预测不确定性,因为上式是在特征相对独立的情况下作出的假设。因此特征之间耦合性较高,就不要使用这个方法了。

step6: 最后通过贝叶斯公式,使得后验概率最大化来判断分类。计算出k个条件概率 P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P(Y=CkX=X(test)),然后找出最大的条件概率对应的类别 C k C_k Ck

step7: 朴素贝叶斯的推断过程
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ∣ X = X ( t e s t ) ) = a r g m a x ⎵ C k P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k ) P ( X = X ( t e s t ) ) C_{result} = \underset{C_k}{\underbrace{argmax}}P(Y=C_k|X=X^{(test)})\\ = \frac{\underset{C_k}{\underbrace{argmax}}P(X=X^{(test)}|Y=C_k)P(Y=C_k)}{P(X=X^{(test)})} Cresult=Ck argmaxP(Y=CkX=X(test))=P(X=X(test))Ck argmaxP(X=X(test)Y=Ck)P(Y=Ck)

对于所有的类别计算 P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P(Y=CkX=X(test))时,分母都相同 P ( X = X ( t e s t ) ) = 1 t e s t {P(X=X^{(test)})} = \frac{1}{test} P(X=X(test))=test1,因此预测公式可以简化为
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ∣ X = X ( t e s t ) ) = a r g m a x ⎵ C k P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k ) C_{result} = \underset{C_k}{\underbrace{argmax}}P(Y=C_k|X=X^{(test)})\\ =\underset{C_k}{\underbrace{argmax}}P(X=X^{(test)}|Y=C_k)P(Y=C_k) Cresult=Ck argmaxP(Y=CkX=X(test))=Ck argmaxP(X=X(test)Y=Ck)P(Y=Ck)

接着利用朴素贝叶斯的独立性假设,得到通常意义上的朴素贝叶斯公式
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ∣ X = X ( t e s t ) ) = a r g m a x ⎵ C k P ( Y = C k ) ∏ i = 1 n P ( X = X i ( t e s t ) ∣ Y = C k ) C_{result} = \underset{C_k}{\underbrace{argmax}}P(Y=C_k|X=X^{(test)})\\ =\underset{C_k}{\underbrace{argmax}}P(Y=C_k)\prod_{i=1}^n P(X=X_i^{(test)}|Y=C_k) Cresult=Ck argmaxP(Y=CkX=X(test))=Ck argmaxP(Y=Ck)i=1nP(X=Xi(test)Y=Ck)

朴素贝叶斯的参数估计

以上结果知道只要求出 P ( Y = C k ) P(Y=C_k) P(Y=Ck) P ( X = X i ( t e s t ) ∣ Y = C k ) ( i = 1 , 2 , . . . , n ) P(X=X_i^{(test)}|Y=C_k)(i=1,2,...,n) P(X=Xi(test)Y=Ck)(i=1,2,...,n)就可以得到朴素贝叶斯的推断结果。这一节介绍如何通过训练集计算这两个概率。

A:对于 P ( Y = C k ) P(Y=C_k) P(Y=Ck),通过极大似然估计我们很容易得到 P ( Y = C k ) P(Y=C_k) P(Y=Ck)为样本类别 C k C_k Ck出现的频率
P ( Y = C k ) = 样 本 类 别 C k 出 现 的 次 数 m k 样 本 总 数 m P(Y=C_k) = \frac{样本类别C_k出现的次数m_k}{样本总数m} P(Y=Ck)=mCkmk

B:对于 P ( X = X i ( t e s t ) ∣ Y = C k ) ( i = 1 , 2 , . . . , n ) P(X=X_i^{(test)}|Y=C_k)(i=1,2,...,n) P(X=Xi(test)Y=Ck)(i=1,2,...,n),这个取决于我们的先验条件。对应三个常用的三个模型

  1. 高斯模型: 如果 X i X_i Xi是连续值,我们通常取X的先验概率为正态分布,即在样本类别 C k C_k Ck中, X i X_i Xi的值符合正态分布,这样 P ( X = X i ( t e s t ) ∣ Y = C k ) P(X=X_i^{(test)}|Y=C_k) P(X=Xi(test)Y=Ck)的概率分布为:
    P ( X = X i ( t e s t ) ∣ Y = C k ) = 1 2 π σ k e x p ( − ( X i ( t e s t ) − μ k ) 2 2 σ k 2 ) P(X=X_i^{(test)}|Y=C_k)\\ =\frac{1}{2\pi \sigma_k}exp(-\frac{(X_i^{(test)}-\mu_k )^2}{2\sigma_k^2}) P(X=Xi(test)Y=Ck)=2πσk1exp(2σk2(Xi(test)μk)2)
    其中 μ k \mu_k μk σ k 2 \sigma_k^2 σk2分别是正态分布的均值和方差,可以通过极大似然估计求得。 μ k \mu_k μk为在样本类别 C k C_k Ck中,所有 x i x_i xi的平均值, σ k 2 \sigma_k^2 σk2为在样本类别 C k C_k Ck中,所有 x i x_i xi的方差,对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。

  2. 多项式模型: 如果我们的 X i X_i Xi是离散的值,那么我们可以假设 X i X_i Xi符合多项式分布,这样得到 P ( X = X i ( t e s t ) ∣ Y = C k ) P(X=X_i^{(test)}|Y=C_k) P(X=Xi(test)Y=Ck)是在样本类别 C k C_k Ck中,特征 X i ( t e s t ) X_i^{(test)} Xi(test)出现的频率。即:
    P ( X = X i ( t e s t ) ∣ Y = C k ) = 类 别 C k 中 , i 维 特 征 X i ( t e s t ) 出 现 的 次 数 m k i ( t e s t ) 样 本 类 别 C k 总 的 特 征 计 数 m k P(X=X_i^{(test)}|Y=C_k)=\frac{类别C_k中,i维特征X_i^{(test)}出现的次数m_{ki}^{(test)}}{样本类别C_k总的特征计数m_k} P(X=Xi(test)Y=Ck)=CkmkCkiXi(test)mki(test)
    拉普拉斯平滑:
    这里有一个问题,当某个分量在总样本某个分类中(观察样本库/训练集)从没出现过,会导致整个实例 P ( X = X i ( t e s t ) ∣ Y = C k ) P(X=X_i^{(test)}|Y=C_k) P(X=Xi(test)Y=Ck)的计算结果为0。为了解决这个问题,使用拉普拉斯平滑进行处理。
    它的思想非常简单,就是对先验概率的分子(划分的计数)加大于0的常数 λ \lambda λ,分母加上类别数 k ∗ λ k*\lambda kλ;对条件概率分子加 λ \lambda λ,分母加上对应特征i的可能取值数量 O i ∗ λ O_i*\lambda Oiλ。这样在解决零概率问题的同时,也保证了概率和依然为1。
    P ( Y = C k ) = m k + λ m + k λ P(Y=C_k) = \frac{m_k+\lambda}{m+k\lambda} P(Y=Ck)=m+kλmk+λ
    P ( X = X i ( t e s t ) ∣ Y = C k ) = m k i ( t e s t ) + λ m k + O i λ P(X=X_i^{(test)}|Y=C_k) = \frac {m_{ki}^{(test)}+\lambda}{m_k+O_i\lambda } P(X=Xi(test)Y=Ck)=mk+Oiλmki(test)+λ
    注: λ \lambda λ是一个大于0的常数, O i O_i Oi是第i个特征的取值个数k

eg:假设在文本分类中,有3个类,C1、C2、C3,在指定的训练样本中,某个词语F1,在各个类中观测计数分别为=0,990,10,即概率为P(F1/C1)=0,P(F1/C2)=0.99,P(F1/C3)=0.01,对这三个量使用拉普拉斯平滑的计算方法如下:
1/1003 = 0.001,991/1003=0.988,11/1003=0.011

  1. 伯努利模型: 如果我们我们的 X i X_i Xi是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设 X i X_i Xi符合伯努利分布,即特征 X i X_i Xi出现记为1,不出现记为0。即只要 X i X_i Xi出现即可,我们不关注 X i X_i Xi的次数。这样得到 P ( X = X i ( t e s t ) ∣ Y = C k ) P(X=X_i^{(test)}|Y=C_k) P(X=Xi(test)Y=Ck)是在样本类别 C k C_k Ck中, X i ( t e s t ) X_i^{(test)} Xi(test)出现的频率。此时有:
    P ( X = X i ( t e s t ) ∣ Y = C k ) = P ( X i ∣ Y = C k ) X i ( t e s t ) + ( 1 − P ( X i ∣ Y = C k ) ) ( 1 − X i ( t e s t ) ) P(X=X_i^{(test)}|Y=C_k)=P(X_i|Y=C_k)X_i^{(test)}+(1-P(X_i|Y=C_k))(1-X_i^{(test)}) P(X=Xi(test)Y=Ck)=P(XiY=Ck)Xi(test)+(1P(XiY=Ck))(1Xi(test))
    其中 X i ( t e s t ) X_i^{(test)} Xi(test)的取值为0和1

算法小结

朴素贝叶斯的主要优点有:

1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
2)对小规模的数据表现很好,能够处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。

朴素贝叶斯的主要缺点有:

1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
4)对输入数据的表达形式很敏感。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它假设所有特征之间相互独立,从而简化了计算。训练朴素贝叶斯算法需要以下步骤: 1. 收集训练数据:朴素贝叶斯算法需要有一组已知分类的训练数据,以便学习分类规则。 2. 数据预处理:对于训练数据,需要进行预处理,如去除噪声、处理缺失值、归一化等。 3. 计算先验概率:先验概率是指在没有考虑任何特征的情况下,一个样本被划分到某一类别的概率。计算先验概率需要统计训练数据中每个类别的样本数量,并除以总样本数量。 4. 计算条件概率:条件概率是指在考虑某个特征的情况下,一个样本被划分到某一类别的概率。对于每个类别,需要计算每个特征的条件概率,即该特征在该类别下出现的概率。计算条件概率需要统计训练数据中每个类别下每个特征的出现次数,并除以该类别下总样本数量。 5. 应用贝叶斯定理:使用贝叶斯定理计算后验概率,即在考虑所有特征的情况下,一个样本属于某个类别的概率。具体来说,对于一个新样本,需要计算它属于每个类别的后验概率,并选择后验概率最大的类别作为该样本的分类。 6. 模型评估:为了评估模型的性能,需要将训练数据划分为训练集和测试集,在测试集上计算模型的准确率、召回率、精确率等指标。 7. 模型调优:可以通过调整参数、增加特征、增加训练数据等方式优化模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值