文章目录
参考 朴素贝叶斯原理
贝叶斯公式
条件独立公式,如果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(Y|X) = P(X,Y)/P(X)
P(Y∣X)=P(X,Y)/P(X)
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
)
=
∑
k
P
(
X
∣
Y
=
Y
k
)
P
(
Y
k
)
其
中
∑
k
P
(
Y
k
)
=
1
\ P(X) = \sum\limits_{k}P(X|Y =Y_k)P(Y_k) 其中\sum\limits_{k}P(Y_k)=1
P(X)=k∑P(X∣Y=Yk)P(Yk)其中k∑P(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\limits_{k}P(X|Y =Y_k)P(Y_k)}
P(Yk∣X)=k∑P(X∣Y=Yk)P(Yk)P(X∣Yk)P(Yk)
贝叶斯模型描述
给定条件
假如我们的分类模型样本是:
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
x
n
(
1
)
,
y
1
)
,
(
x
1
(
2
)
,
x
2
(
2
)
,
.
.
.
x
n
(
2
)
,
y
2
)
,
.
.
.
(
x
1
(
m
)
,
x
2
(
m
)
,
.
.
.
x
n
(
m
)
,
y
m
)
(x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1), (x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)},y_2), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)
(x1(1),x2(1),...xn(1),y1),(x1(2),x2(2),...xn(2),y2),...(x1(m),x2(m),...xn(m),ym)
代表有m个样本,每个样本有n个特征,特征输出有K个类别,定义为
C
1
,
C
2
,
.
.
.
,
C
K
\ {C_1,C_2,...,C_K}
C1,C2,...,CK
目标
在以上给定条件后,我们希望贝叶斯模型能通过给定样本 X ( t e s t ) = ( x 1 ( t e s t ) , x 2 ( t e s t ) , . . . x n ( t e s t ) ) X^{(test)}={(x_1^{(test)}, x_2^{(test)}, ...x_n^{(test)})} X(test)=(x1(test),x2(test),...xn(test)),通过后验概率最大化来判断分类,预测出 P ( Y = C K ∣ X = X ( t e s t ) ) P(Y=C_K|X=X^{(test)}) P(Y=CK∣X=X(test))
推理的过程
已知要求
P
(
Y
=
C
K
∣
X
=
X
(
t
e
s
t
)
)
P(Y=C_K|X=X^{(test)})
P(Y=CK∣X=X(test)),根据贝叶斯公式可得:
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
=
P
(
X
=
X
(
t
e
s
t
)
∣
Y
k
)
P
(
Y
=
C
k
)
∑
k
P
(
X
=
X
(
t
e
s
t
)
∣
Y
=
C
k
)
P
(
Y
=
C
k
)
P(Y=C_k|X=X^{(test)}) = \frac{P(X=X^{(test)}|Y_k)P(Y=C_k)}{\sum\limits_{k}P(X=X^{(test)}|Y=C_k)P(Y=C_k)}
P(Y=Ck∣X=X(test))=k∑P(X=X(test)∣Y=Ck)P(Y=Ck)P(X=X(test)∣Yk)P(Y=Ck)
C
r
e
s
u
l
t
C_{result}
Cresult是使
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
P(Y=C_k|X=X^{(test)})
P(Y=Ck∣X=X(test))最大化的类别,数学表达式为:
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
)
)
\begin{aligned} C_{result} & = \underbrace{argmax}_{C_k}P(Y=C_k|X=X^{(test)}) \\ & = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) {/}P(X=X^{(test)}) \end{aligned}
Cresult=Ck
argmaxP(Y=Ck∣X=X(test))=Ck
argmaxP(X=X(test)∣Y=Ck)P(Y=Ck)/P(X=X(test))
由于对于所有的类别计算
P
(
Y
=
C
k
∣
X
=
X
(
t
e
s
t
)
)
P(Y=C_k|X=X^{(test)})
P(Y=Ck∣X=X(test))时,上式的分母是一样的,都是
P
(
X
=
X
(
t
e
s
t
)
)
P(X=X^{(test)})
P(X=X(test)),因此,我们的预测公式可以简化为:
C r e s u l 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} = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) Cresult=Ck argmaxP(X=X(test)∣Y=Ck)P(Y=Ck)
这里给出一个大胆的独立性假设:即X的n个维度之间相互独立
那么有:
P
(
X
∣
Y
=
C
k
)
=
P
(
X
1
=
x
1
,
X
2
=
x
2
,
.
.
.
X
n
=
x
n
∣
Y
=
C
k
)
=
P
(
X
1
=
x
1
∣
Y
=
C
k
)
P
(
X
2
=
x
2
∣
Y
=
C
k
)
.
.
.
P
(
X
n
=
x
n
∣
Y
=
C
k
)
\begin{aligned} P(X|Y=C_k) & = P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) \\ & = P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k) \end{aligned}
P(X∣Y=Ck)=P(X1=x1,X2=x2,...Xn=xn∣Y=Ck)=P(X1=x1∣Y=Ck)P(X2=x2∣Y=Ck)...P(Xn=xn∣Y=Ck)
那么我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ) ∏ j = 1 n P ( X j = X j ( t e s t ) ∣ Y = C k ) C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) Cresult=Ck argmaxP(Y=Ck)j=1∏nP(Xj=Xj(test)∣Y=Ck)
P ( Y = C k ) P(Y=C_k) P(Y=Ck)和 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . , n ) P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...,n) P(Xj=Xj(test)∣Y=Ck)(j=1,2,...,n)怎么学习
我们知道只要求出
P
(
Y
=
C
k
)
P(Y=C_k)
P(Y=Ck)和
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
(
j
=
1
,
2
,
.
.
.
n
)
P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n)
P(Xj=Xj(test)∣Y=Ck)(j=1,2,...n),我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率。
对于
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出现的频率,即样本类别
C
k
C_k
Ck出现的次数
m
k
m_k
mk除以样本总数m。
对于
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
(
j
=
1
,
2
,
.
.
.
n
)
P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n)
P(Xj=Xj(test)∣Y=Ck)(j=1,2,...n),这个取决于我们的先验条件:
a)
X
j
X_j
Xj是离散的值,那么我们可以假设
X
j
X_j
Xj符合多项式分布,这样得到
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P(X_j=X_j^{(test)}|Y=C_k)
P(Xj=Xj(test)∣Y=Ck)是在样本类别
C
k
C_k
Ck中,特征
X
j
(
t
e
s
t
)
X_j^{(test)}
Xj(test)出现的频率。即:
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
=
m
k
j
t
e
s
t
m
k
P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}}}{m_k}
P(Xj=Xj(test)∣Y=Ck)=mkmkjtest
其中
m
k
m_k
mk为样本类别
C
k
C_k
Ck总的特征计数,而
m
k
j
t
e
s
t
m_{kj^{test}}
mkjtest为类别为
C
k
C_k
Ck的样本中,第
j
j
j维特征
X
j
(
t
e
s
t
)
X_j^{(test)}
Xj(test)出现的计数。
某些时候,可能某些类别在样本中没有出现,这样可能导致 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = m k j t e s t + λ m k + O j λ P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}} + \lambda}{m_k + O_j\lambda} P(Xj=Xj(test)∣Y=Ck)=mk+Ojλmkjtest+λ
其中
λ
\lambda
λ为一个大于0的常数,常常取为1。
O
j
O_j
Oj为第
j
j
j个特征的取值个数。
b)
X
j
X_j
Xj是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设
X
j
X_j
Xj符合伯努利分布,即特征
X
j
X_j
Xj出现记为1,不出现记为0。即只要
X
j
X_j
Xj出现即可,我们不关注
X
j
X_j
Xj的次数。这样得到
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P(X_j=X_j^{(test)}|Y=C_k)
P(Xj=Xj(test)∣Y=Ck)是在样本类别
C
k
C_k
Ck中,
X
j
(
t
e
s
t
)
X_j^{(test)}
Xj(test)出现的频率。此时有:
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
=
P
(
X
j
∣
Y
=
C
k
)
X
j
(
t
e
s
t
)
+
(
1
−
P
(
X
j
∣
Y
=
C
k
)
)
(
1
−
X
j
(
t
e
s
t
)
)
P(X_j=X_j^{(test)}|Y=C_k) = P(X_j|Y=C_k)X_j^{(test)} + (1 - P(X_j|Y=C_k))(1-X_j^{(test)})
P(Xj=Xj(test)∣Y=Ck)=P(Xj∣Y=Ck)Xj(test)+(1−P(Xj∣Y=Ck))(1−Xj(test))
其中,
X
j
(
t
e
s
t
)
X_j^{(test)}
Xj(test)取值为0和1。
c)
X
j
X_j
Xj是连续值,我们通常取
X
j
X_j
Xj的先验概率为正态分布,即在样本类别
C
k
C_k
Ck中,
X
j
X_j
Xj的值符合正态分布。这样
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
P(X_j=X_j^{(test)}|Y=C_k)
P(Xj=Xj(test)∣Y=Ck)的概率分布是:
P
(
X
j
=
X
j
(
t
e
s
t
)
∣
Y
=
C
k
)
=
1
2
π
σ
k
2
e
x
p
(
−
(
X
j
(
t
e
s
t
)
−
μ
k
)
2
2
σ
k
2
)
P(X_j=X_j^{(test)}|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp{(}-\frac{(X_j^{(test)} - \mu_k)^2}{2\sigma_k^2}{)}
P(Xj=Xj(test)∣Y=Ck)=2πσk21exp(−2σk2(Xj(test)−μk)2)
其中
μ
k
\mu_k
μk和
σ
k
2
\sigma_k^2
σk2是正态分布的期望和方差,可以通过极大似然估计求得。
μ
k
\mu_k
μk为在样本类别
C
k
C_k
Ck中,所有
X
j
X_j
Xj的平均值。
σ
k
2
\sigma_k^2
σk2为在样本类别
C
k
C_k
Ck中,所有
X
j
X_j
Xj的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。
算法过程
我们假设训练集为m个样本n个维度,如下:
(
x
1
(
1
)
,
x
2
(
1
)
,
.
.
.
x
n
(
1
)
,
y
1
)
,
(
x
1
(
2
)
,
x
2
(
2
)
,
.
.
.
x
n
(
2
)
,
y
2
)
,
(
x
1
(
m
)
,
x
2
(
m
)
,
.
.
.
x
n
(
m
)
,
y
m
)
\ (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1),(x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)},y_2),(x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)
(x1(1),x2(1),...xn(1),y1),(x1(2),x2(2),...xn(2),y2),(x1(m),x2(m),...xn(m),ym)
共有K个特征输出类别,分别为
C
1
,
C
2
,
.
.
.
,
C
K
{C_1,C_2,...,C_K}
C1,C2,...,CK,每个特征输出类别的样本个数为
m
1
,
m
2
,
.
.
.
,
m
K
{m_1,m_2,...,m_K}
m1,m2,...,mK,在第k个类别中,如果是离散特征,则特征
X
j
X_j
Xj各个类别取值为
m
j
l
m_{jl}
mjl。其中l取值为
1
,
2
,
.
.
.
S
j
1,2,...S_j
1,2,...Sj,
S
j
S_j
Sj为特征j不同的取值数。输出为实例
X
(
t
e
s
t
)
X^{(test)}
X(test)的分类
算法流程如下:
- 如果没有Y的先验概率,则计算Y的K个先验概率: P ( Y = C k ) = ( m k + λ ) / ( m + K λ ) \ P(Y=C_k)=(m_k+\lambda)/(m+K\lambda) P(Y=Ck)=(mk+λ)/(m+Kλ),否则 P ( Y = C k ) \ P(Y=C_k) P(Y=Ck)为输入的先验概率。
- 分别计算第k个类别的第j维特征的第l个个取值条件概率:
P
(
X
j
=
x
j
l
∣
Y
=
C
k
)
P(X_j=x_{jl}|Y=C_k)
P(Xj=xjl∣Y=Ck)
a)如果是离散值:
P ( X j = x j l ∣ Y = C k ) = m k j l + λ m k + S j λ P(X_j=x_{jl}|Y=C_k) = \frac{m_{kjl} + \lambda}{m_k + S_j\lambda} P(Xj=xjl∣Y=Ck)=mk+Sjλmkjl+λ
l a m b d a \ lambda lambda可以取值为1,或者其他大于0的数字。
b)如果是稀疏二项离散值: P ( X j = x j l ∣ Y = C k ) = P ( j ∣ Y = C k ) x j l + ( 1 − P ( j ∣ Y = C k ) ( 1 − x j l ) P(X_j=x_{jl}|Y=C_k) =P(j|Y=C_k)x_{jl} + (1 - P(j|Y=C_k)(1-x_{jl}) P(Xj=xjl∣Y=Ck)=P(j∣Y=Ck)xjl+(1−P(j∣Y=Ck)(1−xjl)
此时 l l l只有两种取值。
c)如果是连续值不需要计算各个l的取值概率,直接求正态分布的参数:
P ( X j = x j ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( x j − μ k ) 2 2 σ k 2 ) P(X_j=x_j|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp(-\frac{(x_j - \mu_k)^2}{2\sigma_k^2}) P(Xj=xj∣Y=Ck)=2πσk21exp(−2σk2(xj−μk)2)
需要求出 μ k 和 σ k 2 \mu_k和\sigma_k^2 μk和σk2。 μ k \mu_k μk为在样本类别 C k C_k Ck中,所有 X j X_j Xj的平均值。 σ k 2 \sigma_k^2 σk2为在样本类别 C k C_k Ck中,所有 X j X_j Xj的方差。
3)对于实例 X ( t e s t ) X^{(test)} X(test),分别计算:
P ( Y = C k ) ∏ j = 1 n P ( X j = x j ( t e s t ) ∣ Y = C k ) P(Y=C_k)\prod_{j=1}^{n}P(X_j=x_j^{(test)}|Y=C_k) P(Y=Ck)j=1∏nP(Xj=xj(test)∣Y=Ck)
4)确定实例 X ( t e s t ) X^{(test)} X(test)的分类 C r e s u l t C_{result} Cresult
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ) ∏ j = 1 n P ( X j = X j ( t e s t ) ∣ Y = C k ) C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) Cresult=Ck argmaxP(Y=Ck)j=1∏nP(Xj=Xj(test)∣Y=Ck)
从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高。