参考博文:理解朴素贝叶斯分类的拉普拉斯平滑.
本文的主要目的是为了理清拉普拉斯平滑公式中的系数作用。
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)=ajl∣Y=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=1∑jM(Pλ(X(j)=ajl∣Y=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)=ajl∣Y=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(不嫁∣长相帅,性格爆好,上进)