注:本文主要由《统计学习方法》整理而来,文中公式所针对的是多项式朴素贝叶斯模型
一、朴素贝叶斯的学习与分类
朴素贝叶斯的算法分成以下两步:
- 基于条件独立假设,计算联合分布
- 基于贝叶斯定理,针对输入x,求出后验概率最大的输出y
因此下面也从这两个步骤来解析朴素贝叶斯算法。
1.1 联合分布的计算
由 P ( X , Y ) = P ( X ∣ Y ) P ( Y ) P(X,Y)=P(X|Y)P(Y) P(X,Y)=P(X∣Y)P(Y)可得,联合分布的计算可转换为求 P ( X ∣ Y ) , P ( Y ) P(X|Y),P(Y) P(X∣Y),P(Y)两项,而这两项的计算方法如下:
P
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
N
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
#
(
X
(
j
)
=
a
j
l
,
Y
=
c
k
)
#
(
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
)
k
=
1
,
2
,
.
.
.
,
K
;
j
=
1
,
2
,
.
.
.
,
n
;
l
=
1
,
2
,
.
.
.
,
S
j
;
P(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)}{N} \\ P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\#(X^{(j)}=a_{jl},Y=c_k)}{\#(Y=c_k)}=\frac{\sum_{i=1}^{N}{}{I(x_i^{(j)}=a_{jl},y_i=c_k)}}{\sum_{i=1}^{N}I(y_i=c_k)}\\ k=1,2,...,K;j=1,2,...,n;l=1,2,...,S_j;
P(Y=ck)=N∑i=1NI(yi=ck)P(X(j)=ajl∣Y=ck)=#(Y=ck)#(X(j)=ajl,Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)k=1,2,...,K;j=1,2,...,n;l=1,2,...,Sj;
其中,
N N N表示数据集的样本总数, K K K表示数据集的类别种数;
x i ( j ) x_i^{(j)} xi(j)表示第 i i i个样本的第 j j j个特征,且该数据集一共有 n n n个特征;
a j l a_{jl} ajl表示第 j j j个特征的第 l l l种取值, S j S_j Sj表示第 j j j个特征一共有 S j S_j Sj种取值。
下面举一个例子:
求解如下:
在上述情况中,为了避免联合分布为0的情况的出现,我们引入了平滑处理,意义是为每种取值的频数赋予一个正数 λ > 0 \lambda>0 λ>0,常取 λ = 1 \lambda=1 λ=1,称为拉普拉斯平滑。
引入平滑处理后,公式变为:
P
λ
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
λ
N
+
K
λ
P
λ
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
#
(
X
(
j
)
=
a
j
l
,
Y
=
c
k
)
#
(
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
λ
P_\lambda(Y=c_k)=\frac{\sum_{i=1}^{N}I(y_i=c_k)+\lambda}{N+K\lambda} \\ P_\lambda(X^{(j)}=a_{jl}|Y=c_k)=\frac{\#(X^{(j)}=a_{jl},Y=c_k)}{\#(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}\\
Pλ(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λPλ(X(j)=ajl∣Y=ck)=#(Y=ck)#(X(j)=ajl,Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
引入平滑处理后,上述例题的结果变为:
可以发现,分子加一是为了避免某类别出现的次数为0,分母加上对应的类别数只是为了确保分子加一后,每一行之和仍为1
1.2 判断输入的类别
由贝叶斯公式有:
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
,
Y
=
c
k
)
P
(
X
=
x
)
=
P
(
Y
=
c
k
)
P
(
X
=
x
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(Y=c_k|X=x)=\frac{P(X=x,Y=c_k)}{P(X=x)}=\frac{P(Y=c_k)P(X=x|Y=c_k)}{\sum_kP(Y=c_k)P(X=x|Y=c_k)}\\=\frac{P(Y=c_k)\prod_jP(X^{(j)=x^{(j)}}|Y=c_k)}{\sum_kP(Y=c_k)\prod_jP(X^{(j)=x^{(j)}}|Y=c_k)}
P(Y=ck∣X=x)=P(X=x)P(X=x,Y=ck)=∑kP(Y=ck)P(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)=∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
其中,
k
k
k是数据集的类别总数,
j
j
j是数据集的特征总数
由于对于任意一个输入x,其分母都是相同的,所以朴素贝叶斯分类器实际可以简化为:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=argmax_{c_k}P(Y=c_k)\prod_jP(X^{(j)=x^{(j)}}|Y=c_k)
y=argmaxckP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
继续上面的例子,
当不采用拉普拉斯平滑时,若输入X=(2,S),结果为-1:
当采用拉普拉斯平滑时,若输入X=(2,S),结果为-1:
朴素贝叶斯将实例分到后验概率最大的类中,这其实等价于经验风险最小化,证明如下:
- 假设选择0-1损失函数:
- 假设输出结果为y,令输出结果不为y的概率尽可能小: