拉普拉斯平滑处理

本文深入探讨了拉普拉斯平滑在解决朴素贝叶斯分类器中概率为0的问题,通过举例说明了在特定情况下如何使用拉普拉斯平滑公式来计算特征条件概率和先验概率。通过对不同特征集合和类别集合的分析,展示了拉普拉斯平滑如何确保概率的合理性和总和为1的性质。最后,计算得出在特定特征组合下的‘嫁’与‘不嫁’概率,并进行了比较。
摘要由CSDN通过智能技术生成

参考博文:理解朴素贝叶斯分类的拉普拉斯平滑.
本文的主要目的是为了理清拉普拉斯平滑公式中的系数作用。

Exp:

帅?性格好?上进?嫁与否?
不好不上进不嫁
上进
不帅不好不上进不嫁
不帅上进
不好上进不嫁
不上进
不帅不好上进
不帅不上进不嫁

三个特征集合分别为:长相(帅、不帅)、性格(爆好、好、不好)、上进与否(上进、不上进)。
类别集合:嫁与否(嫁、不嫁)。


现在假设去求一个男生{帅、爆好、上进}的情况下,嫁与不嫁的概率谁大。
也就是要比较 P ( 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) 与 P ( 不 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) P(嫁|长相帅,性格爆好,上进)与P(不嫁|长相帅,性格爆好,上进) P(,,)P(,,)的概率大小。


根据朴素贝叶斯公式可以得出:


P ( 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) = P ( 长 相 帅 , 性 格 爆 好 , 上 进 ∣ 嫁 ) P ( 嫁 ) P ( 长 相 帅 , 性 格 爆 好 , 上 进 ) P(嫁|长相帅,性格爆好,上进) = \frac{P(长相帅,性格爆好,上进|嫁)P(嫁)}{P(长相帅,性格爆好,上进)} P(,,)=P(,,)P(,,)P()

P ( 不 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) = P ( 长 相 帅 , 性 格 爆 好 , 上 进 ∣ 不 嫁 ) P ( 不 嫁 ) P ( 长 相 帅 , 性 格 爆 好 , 上 进 ) P(不嫁|长相帅,性格爆好,上进) = \frac{P(长相帅,性格爆好,上进|不嫁)P(不嫁)}{P(长相帅,性格爆好,上进)} P(,,)=P(,,)P(,,)P()


根据表格我们可以发现没有一个数据有性格爆好这个特点,那么 P ( 性 格 爆 好 ∣ 嫁 ) = 0 P(性格爆好|嫁)=0 P()=0,则根据上述公式:


P ( 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) = P ( 长 相 帅 , 性 格 爆 好 , 上 进 ∣ 嫁 ) P ( 嫁 ) P ( 长 相 帅 , 性 格 爆 好 , 上 进 ) = P ( 长 相 帅 ∣ 嫁 ) P ( 性 格 爆 好 ∣ 嫁 ) P ( 上 进 ∣ 嫁 ) P ( 嫁 ) P ( 长 相 帅 ) P ( 性 格 爆 好 ) P ( 上 进 ) P(嫁|长相帅,性格爆好,上进) = \frac{P(长相帅,性格爆好,上进|嫁)P(嫁)}{P(长相帅,性格爆好,上进)}= \frac{P(长相帅|嫁)P(性格爆好|嫁)P(上进|嫁)P(嫁)}{P(长相帅)P(性格爆好)P(上进)} P(,,)=P(,,)P(,,)P()=P()P()P()P()P()P()P()

由于 P ( 性 格 爆 好 ∣ 嫁 ) = 0 P(性格爆好|嫁)=0 P()=0,因此使得上述结果也为0,这显示是不合理的。因此这里引入拉普拉斯平滑处理。


引入公式如下:
P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ ; \begin{aligned} P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^N {I(x_i^{(j)}=a_{jl},y_i=c_k)}+\lambda}{\sum_{i=1}^N {I(y_i=c_k)+S_j\lambda}} \end{aligned} ; Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ;
P λ ( Y = c k ) = ∑ i = 1 N ( y i = c k ) + λ N + K λ ; \begin{aligned} P_{\lambda}(Y=c_k)=\frac{\sum_{i=1}^N {(y_i=c_k)}+\lambda}{N+K\lambda}\end{aligned} ; Pλ(Y=ck)=N+Kλi=1N(yi=ck)+λ;

其中 a j l a_{jl} ajl表示第 j j j个特征的第 l l l个选择, S j S_j Sj代表第 j j j个特征的个数, K K K代表类别个数。
λ \lambda λ 为1,加入拉普拉斯平滑后即避免了出现概率为0的情况,又保证了单概率范围0-1,且最终和为1。


首先:
∑ l = 1 j M ( P λ ( X ( j ) = a j l ∣ Y = c k ) ) = 1 , \begin{aligned}\sum_{l=1}^{jM} {(P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k))}=1\end{aligned}, l=1jM(Pλ(X(j)=ajlY=ck))=1
其中 j M jM jM 表示在第 j j j 个特征中存在 j M jM jM 种情况,比如性格特征中包含了不好,好,爆好三种情况,那么引入拉普拉斯之后也应该满足条件概率总和为1,如:
P ( 性 格 爆 好 ∣ 嫁 ) + P ( 性 格 好 ∣ 嫁 ) + P ( 性 格 不 好 ∣ 嫁 ) = 1 , \begin{aligned}P(性格爆好|嫁)+P(性格好|嫁)+P(性格不好|嫁)=1\end{aligned}, P()+P()+P()=1
因此我们着重讨论以下公式分母中的 S j \mathbf{S_j} Sj
P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ ; \begin{aligned} P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^N {I(x_i^{(j)}=a_{jl},y_i=c_k)}+\lambda}{\sum_{i=1}^N {I(y_i=c_k)+S_j\lambda}} \end{aligned} ; Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ;
现在有两种说法,一种是 S j S_j Sj 表示类别数量,还有一种是表示该特征下的情况数量。
这里根据上表的例子来证明该公式中 S j S_j Sj 的作用,分别计算 P ( 性 格 爆 好 ∣ 嫁 ) , P ( 性 格 好 ∣ 嫁 ) , P ( 性 格 不 好 ∣ 嫁 ) P(性格爆好|嫁), P(性格好|嫁),P(性格不好|嫁) P(),P(),P()
其中:
N u m ( 嫁 ) = 4 , N u m ( 性 格 好 ∣ 嫁 ) = 3 , N u m ( 性 格 不 好 ∣ 嫁 ) = 1 , N u m ( 性 格 爆 好 ∣ 嫁 ) = 0 Num(嫁) = 4, Num(性格好|嫁) = 3, Num(性格不好|嫁) = 1, Num(性格爆好|嫁) = 0 Num()=4,Num()=3,Num()=1,Num()=0

S j S_j Sj 表示类别数量
S j = 2 S_j = 2 Sj=2,此时只有不嫁两种类别。

P ( 性 格 爆 好 ∣ 嫁 ) = N u m ( 性 格 爆 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 2 = 1 6 P(性格爆好|嫁)=\frac{Num(性格爆好|嫁)+1}{Num(嫁)+2} = \frac{1}{6} P()=Num()+2Num()+1=61

P ( 性 格 好 ∣ 嫁 ) = N u m ( 性 格 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 2 = 4 6 P(性格好|嫁)=\frac{Num(性格好|嫁)+1}{Num(嫁)+2} = \frac{4}{6} P()=Num()+2Num()+1=64

P ( 性 格 不 好 ∣ 嫁 ) = N u m ( 性 格 不 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 2 = 2 6 P(性格不好|嫁)=\frac{Num(性格不好|嫁)+1}{Num(嫁)+2} = \frac{2}{6} P()=Num()+2Num()+1=62

此时 P ( 性 格 爆 好 ∣ 嫁 ) + P ( 性 格 好 ∣ 嫁 ) + P ( 性 格 不 好 ∣ 嫁 ) = 7 6 ≠ 1 P(性格爆好|嫁)+P(性格好|嫁)+P(性格不好|嫁)=\frac{7}{6}\neq1 P()+P()+P()=67=1

S j S_j Sj 表示该特征下的情况数量
S j = 3 S_j = 3 Sj=3,此时有不好,好,爆好三种类别。

P ( 性 格 爆 好 ∣ 嫁 ) = N u m ( 性 格 爆 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 3 = 1 7 P(性格爆好|嫁)=\frac{Num(性格爆好|嫁)+1}{Num(嫁)+3} = \frac{1}{7} P()=Num()+3Num()+1=71

P ( 性 格 好 ∣ 嫁 ) = N u m ( 性 格 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 3 = 4 7 P(性格好|嫁)=\frac{Num(性格好|嫁)+1}{Num(嫁)+3} = \frac{4}{7} P()=Num()+3Num()+1=74

P ( 性 格 不 好 ∣ 嫁 ) = N u m ( 性 格 不 好 ∣ 嫁 ) + 1 N u m ( 嫁 ) + 3 = 2 7 P(性格不好|嫁)=\frac{Num(性格不好|嫁)+1}{Num(嫁)+3} = \frac{2}{7} P()=Num()+3Num()+1=72

此时 P ( 性 格 爆 好 ∣ 嫁 ) + P ( 性 格 好 ∣ 嫁 ) + P ( 性 格 不 好 ∣ 嫁 ) = 7 7 = 1 P(性格爆好|嫁)+P(性格好|嫁)+P(性格不好|嫁)=\frac{7}{7}=1 P()+P()+P()=77=1

因此我认为后者的说法更加准确,前者一旦特征下的情况数量超过了类别数量,那么它的概率总和就不等于1。


下文是按照上述公式依次计算的条件概率和先验概率的结果:

帅?性格好?上进?嫁与否?
不好不上进不嫁
上进
不帅不好不上进不嫁
不帅上进
不好上进不嫁
不上进
不帅不好上进
不帅不上进不嫁

P ( 性 格 爆 好 ∣ 嫁 ) P(性格爆好|嫁) P()

上图没有任何一行数据满足,但是通过拉普拉斯平滑处理后可得:

性格特征的个数为爆好,好,不好三种情况,那么 S j S_j Sj为3,则最终概率 P ( 性 格 爆 好 ∣ 嫁 ) = 1 7 P(性格爆好|嫁) = \frac{1}{7} P()=71 (嫁的个数为4+特征个数为3)


P ( 长 相 帅 ∣ 嫁 ) P(长相帅|嫁) P()

上图2, 6行数据满足。

长相特征的个数为帅,不帅,两种情况,那么 S j S_j Sj为2,则最终概率 P ( 长 相 帅 ∣ 嫁 ) = 3 6 P(长相帅|嫁) = \frac{3}{6} P()=63 (嫁的个数为4+特征个数为2)


P ( 上 进 ∣ 嫁 ) P(上进|嫁) P()

上图第2, 4, 7行数据满足。

是否上进特征的个数为上进,不上进两种情况,那么 S j S_j Sj为2,则最终概率 P ( 上 进 ∣ 嫁 ) = 4 6 P(上进|嫁) = \frac{4}{6} P()=64 (嫁的个数为4+特征个数为2)


P ( 嫁 ) P(嫁) P()

上图第3, 4, 6, 7行数据满足。

是否嫁类别的个数为两种情况,那么 K K K为2,则最终概率 P ( 嫁 ) = 5 10 P(嫁) = \frac{5}{10} P()=105 (总个数为8+特征个数为2)


因此 P ( 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) = 3 6 × 1 7 × 4 6 × 5 10 P(嫁|长相帅,性格爆好,上进) = \frac{3}{6}\times\frac{1}{7}\times\frac{4}{6}\times\frac{5}{10} P(,,)=63×71×64×105


接下来继续计算 P ( 不 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) P(不嫁|长相帅,性格爆好,上进) P(,,)的概率,然后与上面的数值进行比较即可,算法与上面完全一模一样。这里就直接省略具体步骤。给出结果:

P ( 长 相 帅 ∣ 不 嫁 ) = 3 6 P(长相帅|不嫁) = \frac{3}{6} P()=63
P ( 性 格 爆 好 ∣ 不 嫁 ) = 1 7 P(性格爆好|不嫁) = \frac{1}{7} P()=71
P ( 上 进 ∣ 不 嫁 ) = 2 6 P(上进|不嫁) = \frac{2}{6} P()=62
P ( 不 嫁 ) = 5 10 P(不嫁) = \frac{5}{10} P()=105
P ( 不 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) = 3 6 × 1 7 × 2 6 × 5 10 P(不嫁|长相帅,性格爆好,上进) = \frac{3}{6}\times\frac{1}{7}\times\frac{2}{6}\times\frac{5}{10} P(,,)=63×71×62×105


根据比较可以得出: P ( 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) > P ( 不 嫁 ∣ 长 相 帅 , 性 格 爆 好 , 上 进 ) P(嫁|长相帅,性格爆好,上进)> P(不嫁|长相帅,性格爆好,上进) P(,,)>P(,,)

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值