因为涉及到概率论,我实在是一脸懵逼,就以垃圾邮件分类来说明朴素贝叶斯怎么做。
输入:
一系列邮件及其标签—— { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} {(x1,y1),(x2,y2),⋯,(xN,yN)},其中邮件 x i = ( w i 1 , w i 2 , ⋯ , w i n ) T x_i=(w_{i1},w_{i2},\cdots,w_{in})^T xi=(wi1,wi2,⋯,win)T,那么邮件的特征 w i j w_{ij} wij就是文章中的特征单词(假设是英文邮件), y i ∈ { C 1 , C 2 } y_i\in\{C_1,C_2\} yi∈{C1,C2}表示邮件类别, C 1 C_1 C1 表示垃圾邮件, C 2 C_2 C2 表示不是垃圾邮件
输出:
x i x_i xi 的类别,其中 i = 1 , 2 , ⋯ , N i=1,2,\cdots,N i=1,2,⋯,N
假设前提:
- 输入数据每个特征维度是离散的
- 输入数据每个特征维度相互独立
学习:
如何得到
x
i
x_i
xi 的类别?其实就是判断
P
(
Y
=
C
1
∣
X
=
x
i
)
P(Y=C_1|X=x_i)
P(Y=C1∣X=xi)与
P
(
Y
=
C
2
∣
X
=
x
i
)
P(Y=C_2|X=x_i)
P(Y=C2∣X=xi)的大小,其中
i
=
1
,
2
,
⋯
,
N
i=1,2,\cdots,N
i=1,2,⋯,N。 根据贝叶斯公式,可以得到:
P
(
Y
=
C
1
∣
X
=
x
i
)
=
P
(
X
=
x
i
,
Y
=
C
1
)
P
(
X
=
x
i
)
=
P
(
X
=
x
i
∣
Y
=
C
1
)
P
(
Y
=
C
1
)
P
(
X
=
x
i
)
P
(
Y
=
C
2
∣
X
=
x
i
)
=
P
(
X
=
x
i
,
Y
=
C
2
)
P
(
X
=
x
i
)
=
P
(
X
=
x
i
∣
Y
=
C
2
)
P
(
Y
=
C
2
)
P
(
X
=
x
i
)
\begin{aligned} P(Y=C_1|X=x_i)=\frac{P(X=x_i,Y=C_1)}{P(X=x_i)}=\frac{P(X=x_i|Y=C_1)P(Y=C_1)}{P(X=x_i)} \\ \\ P(Y=C_2|X=x_i)=\frac{P(X=x_i,Y=C_2)}{P(X=x_i)}=\frac{P(X=x_i|Y=C_2)P(Y=C_2)}{P(X=x_i)} \end{aligned}
P(Y=C1∣X=xi)=P(X=xi)P(X=xi,Y=C1)=P(X=xi)P(X=xi∣Y=C1)P(Y=C1)P(Y=C2∣X=xi)=P(X=xi)P(X=xi,Y=C2)=P(X=xi)P(X=xi∣Y=C2)P(Y=C2)
所以我们的目标转化为比较
P
(
X
=
x
i
∣
Y
=
C
1
)
P
(
Y
=
C
1
)
P(X=x_i|Y=C_1)P(Y=C_1)
P(X=xi∣Y=C1)P(Y=C1)与
P
(
X
=
x
i
∣
Y
=
C
2
)
P
(
Y
=
C
2
)
P(X=x_i|Y=C_2)P(Y=C_2)
P(X=xi∣Y=C2)P(Y=C2)的大小,其中
P
(
X
=
x
i
∣
Y
=
C
k
)
=
P
(
X
1
=
w
i
1
,
X
2
=
w
i
2
,
⋯
,
X
n
=
w
i
n
∣
Y
=
C
k
)
=
∏
j
=
1
n
P
(
X
j
=
w
i
j
∣
Y
=
C
k
)
(
相
互
独
立
)
\begin{aligned} P(X=x_i|Y=C_k)=&P(X_1=w_{i1},X_2=w_{i2},\cdots,X_n=w_{in}|Y=C_k)\\ \\ =&\prod_{j=1}^nP(X_j=w_{ij}|Y=C_k)\qquad(相互独立) \end{aligned}
P(X=xi∣Y=Ck)==P(X1=wi1,X2=wi2,⋯,Xn=win∣Y=Ck)j=1∏nP(Xj=wij∣Y=Ck)(相互独立)
垃圾邮件中,
P
(
X
j
=
w
i
j
∣
Y
=
C
k
)
P(X_j=w_{ij}|Y=C_k)
P(Xj=wij∣Y=Ck)可以用简单的出现次数来计算,即
P
(
X
j
=
w
i
j
∣
Y
=
C
k
)
=
邮
件
x
i
中
单
词
w
i
j
出
现
的
次
数
样
本
中
所
有
属
于
C
k
的
邮
件
中
单
词
w
i
j
出
现
的
总
次
数
=
c
o
u
n
t
(
w
i
j
,
x
i
)
c
o
u
n
t
(
w
i
j
,
C
k
)
\begin{aligned} P(X_j=w_{ij}|Y=C_k)=&\frac{邮件x_i中单词w_{ij}出现的次数}{样本中所有属于C_k的邮件中单词w_{ij}出现的总次数}\\\\=&\frac{count(w_{ij},x_i)}{count(w_{ij},C_k)} \end{aligned}
P(Xj=wij∣Y=Ck)==样本中所有属于Ck的邮件中单词wij出现的总次数邮件xi中单词wij出现的次数count(wij,Ck)count(wij,xi)但是这种计算会带来一个问题,要是训练样本中没有出现这个单词,而测试样本中有,则会导致分类错误,故可以对此稍加改进:
P
(
X
j
=
w
i
j
∣
Y
=
C
k
)
=
c
o
u
n
t
(
w
i
j
,
x
i
)
+
1
c
o
u
n
t
(
w
i
j
,
C
k
)
+
c
o
u
n
t
(
C
k
)
\begin{aligned} P(X_j=w_{ij}|Y=C_k)=\frac{count(w_{ij},x_i)+1}{count(w_{ij},C_k)+count(C_k)} \end{aligned}
P(Xj=wij∣Y=Ck)=count(wij,Ck)+count(Ck)count(wij,xi)+1其中
c
o
u
n
t
(
C
k
)
count(C_k)
count(Ck) 表示属于
C
k
C_k
Ck 类的邮件中的总单词数。然后,我们可以算出先验概率:
P
(
C
k
)
=
样
本
中
属
于
C
k
的
邮
件
数
量
样
本
总
量
P(C_k)=\frac{样本中属于C_k的邮件数量}{样本总量}
P(Ck)=样本总量样本中属于Ck的邮件数量至此,我们可以得到:
i
f
P
(
X
=
x
i
∣
Y
=
C
1
)
P
(
Y
=
C
1
)
>
P
(
X
=
x
i
∣
Y
=
C
2
)
P
(
Y
=
C
2
)
,
x
i
∈
C
1
i
f
P
(
X
=
x
i
∣
Y
=
C
1
)
P
(
Y
=
C
1
)
<
P
(
X
=
x
i
∣
Y
=
C
2
)
P
(
Y
=
C
2
)
,
x
i
∈
C
2
\begin{aligned} if \quad P(X=x_i|Y=C_1)P(Y=C_1)>P(X=x_i|Y=C_2)P(Y=C_2),\quad x_i\in C_1\\\\ if \quad P(X=x_i|Y=C_1)P(Y=C_1)<P(X=x_i|Y=C_2)P(Y=C_2),\quad x_i\in C_2 \end{aligned}
ifP(X=xi∣Y=C1)P(Y=C1)>P(X=xi∣Y=C2)P(Y=C2),xi∈C1ifP(X=xi∣Y=C1)P(Y=C1)<P(X=xi∣Y=C2)P(Y=C2),xi∈C2