MapReduce之基于符号数据的朴素贝叶斯分类
简介
朴素贝叶斯(NBC)是一个基于独立假设应用的贝叶斯定理的概论分类器,NBC根据输入的一些属性将输入分配到
k
k
k个类{
C
1
,
C
2
,
…
,
C
k
C_1,C_2,\dots,C_k
C1,C2,…,Ck}中的某一类。NBC有很多应用,如垃圾邮件过滤和文档分类等。
以垃圾邮件分类为例。使用NBC的垃圾邮件过滤器将把各个电子邮件分配到两个簇之一:垃圾邮件和非垃圾邮件。由于NBC是一个监督型学习方法,它有两个不同的阶段:
- 阶段1:训练
这个阶段使用一个有限的数据样本实例集合中的训练数据建立一个分类器(在下一个阶段使用)。这就是所谓的监督型学习方法,即从一个样本学习,然后使用这个信息来完成新数据分类。
- 阶段2:分类
在这个阶段中,使用训练数据和贝叶斯定理将新数据分类到阶段1中明确的某一个类别中
分类过程
新数据=
(
X
)
(X)
(X)={
X
1
.
X
2
,
…
,
X
n
X_1.X_2,\dots,X_n
X1.X2,…,Xn}
类C是{
C
1
,
C
2
,
C
k
C_1,C_2,C_k
C1,C2,Ck}的一个成员
符号训练数据
以如下数据为例,数据来自《Machine Learning》
示例符号训练数据
天气 | 温度 | 湿度 | 风力 | 是否可以打球(分类) |
---|---|---|---|---|
Sunny | Hot | High | Weak | No |
Sunny | Hot | High | Strong | No |
Overcast | Hot | High | Weak | Yes |
Rain | Mild | High | Weak | Yes |
Rain | Cool | Normal | Weak | Yes |
Rain | Cool | Normal | Strong | No |
Overcast | Cool | Normal | Strong | Yes |
Sunny | Mild | High | Weak | No |
Sunny | Cool | Normal | Weak | Yes |
Rain | Mild | Normal | Weak | Yes |
Sunny | Mild | Normal | Strong | Yes |
Overcast | Mild | High | Strong | Yes |
Overcast | Hot | Normal | Weak | Yes |
Rain | Mild | High | Strong | No |
- ”是否可以打球“列是分类列,这里有两个类别{yes,no}
- 每个数据集有4个属性,天气(outlook),温度(temperature),湿度(humidity),风力(wind),各个数据实例是一个 m m m维属性值向量: X = ( X 1 , X 2 , … , X m ) X=(X_1,X_2,\dots,X_m) X=(X1,X2,…,Xm)
- 训练数据的大小 为14,
- 目标是使用这个训练数据建立一个分类系统,分类系统会根据天气条件来确定是否可以打网球
朴素贝叶斯分类器
先用简单的形式化表示来描述贝叶斯理论:令A和B是两个事件,P(A)和P(B)为A和B的概率(均不为0),则
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A|B)=\frac{P(B|A)P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)P(A)
由此得出贝叶斯理论的一般形式:令A是一个互斥事件序列{
A
1
,
A
2
,
…
,
A
n
A_1,A_2,\dots,A_n
A1,A2,…,An},其并集是整个样本空间,令E是某个事件且
P
(
E
)
>
0
P(E)>0
P(E)>0,对于所有的
i
i
i,
P
(
A
i
)
>
0
P(A_i )>0
P(Ai)>0,则:
对于所有的
j
∈
{
1
,
2
,
…
,
n
}
j\in \{1,2,\dots,n\}
j∈{1,2,…,n}
P
(
A
j
)
=
P
(
A
j
)
P
(
E
∣
A
j
)
∑
i
=
1
n
P
(
A
i
)
P
(
E
∣
A
i
)
P(A_j)=\frac{P(A_j)P(E|A_j)}{\sum_{i=1}^nP(A_i)P(E|A_i)}
P(Aj)=∑i=1nP(Ai)P(E∣Ai)P(Aj)P(E∣Aj)
贝叶斯理论用于分类的形式化描述如下:令
X
=
(
X
1
=
u
1
,
…
,
X
m
=
u
m
)
X=(X_1=u_1,\dots,X_m=u_m)
X=(X1=u1,…,Xm=um)是一个需要分类的数据实例,令
C
=
{
C
1
,
C
2
,
…
,
C
k
}
C=\{C_1,C_2,\dots,C_k\}
C={C1,C2,…,Ck}是不同类别的一个有限集合,使用贝叶斯理论,可以预测一个给定
X
X
X的类别
C
p
r
e
d
i
c
t
∈
{
C
1
,
C
2
,
…
,
C
k
}
C^{predict}\in\{C_1,C_2,\dots,C_k\}
Cpredict∈{C1,C2,…,Ck};
C
p
r
e
d
i
c
t
=
a
r
g
m
a
x
P
(
C
=
c
∣
X
1
=
u
1
,
…
,
X
m
=
u
m
)
C^{predict}= arg max P(C=c|X_1=u_1,\dots,X_m=u_m)
Cpredict=argmaxP(C=c∣X1=u1,…,Xm=um)
=
a
r
g
m
a
x
P
(
C
=
c
,
X
1
=
u
1
,
…
,
X
m
=
u
m
)
P
(
X
1
=
u
1
,
…
,
X
m
=
u
m
)
=arg max \frac{P(C=c,X_1=u_1,\dots,X_m=u_m)}{P(X_1=u_1,\dots,X_m=u_m)}
=argmaxP(X1=u1,…,Xm=um)P(C=c,X1=u1,…,Xm=um)
=
a
r
g
m
a
x
P
(
X
1
=
u
1
,
…
,
X
m
=
u
m
∣
C
=
c
)
P
(
C
=
c
)
P
(
X
1
=
u
1
,
…
,
X
m
=
u
m
)
=arg max \frac{P(X_1=u_1,\dots,X_m=u_m|C=c)P(C=c)}{P(X_1=u_1,\dots,X_m=u_m)}
=argmaxP(X1=u1,…,Xm=um)P(X1=u1,…,Xm=um∣C=c)P(C=c)
=
a
r
g
m
a
x
P
(
X
1
=
u
1
,
…
,
X
m
=
u
m
∣
C
=
c
)
P
(
C
=
c
)
=arg max P(X_1=u_1,\dots,X_m=u_m|C=c)P(C=c)
=argmaxP(X1=u1,…,Xm=um∣C=c)P(C=c)
=
a
r
g
m
a
x
P
(
C
=
c
)
∏
j
=
1
m
P
(
X
j
=
u
j
∣
C
=
c
)
=arg max P(C=c)\prod_{j=1}^mP(X_j=u_j|C=c)
=argmaxP(C=c)∏j=1mP(Xj=uj∣C=c)
在第三步和第四步的转换过程中,由于分母不会改变,在整个计算过程中作为一个常量,所以去掉了分母。
朴素贝叶斯示例
在这个NBC示例中,如何对以下输入数据分类
X
=
(
o
u
t
l
o
o
k
=
O
v
e
r
c
a
s
t
,
t
e
m
p
e
r
a
t
u
r
e
=
H
o
t
,
h
u
m
i
d
i
t
y
=
H
i
g
h
,
w
i
n
d
=
S
t
r
o
n
g
)
X=(outlook=Overcast,temperature=Hot,humidity=High,wind=Strong)
X=(outlook=Overcast,temperature=Hot,humidity=High,wind=Strong)
X
=
(
X
1
=
O
v
e
r
c
a
s
t
,
X
2
=
H
o
t
,
X
3
=
H
i
g
h
,
X
4
=
S
t
r
o
n
g
)
X=(X_1=Overcast,X_2=Hot,X_3=High,X_4=Strong)
X=(X1=Overcast,X2=Hot,X3=High,X4=Strong)
答案是Yes还是No,对于这个例子,有两个类:
- C = ( C 1 , C 2 ) = ( Y e s , N o ) C=(C_1,C_2)=(Yes,No) C=(C1,C2)=(Yes,No)
- P ( C 1 ) = P ( Y e s ) = 9 / 14 P(C_1)=P(Yes)=9/14 P(C1)=P(Yes)=9/14
- P ( C 2 ) = P ( N o ) = 5 / 14 P(C_2)=P(No)=5/14 P(C2)=P(No)=5/14
根据贝叶斯分类,可以有:
C
p
r
e
d
i
c
t
=
a
r
g
m
a
x
P
(
C
=
c
)
∏
j
=
1
m
P
(
X
j
=
u
j
∣
C
=
c
)
=
m
a
x
{
V
1
,
V
2
}
C^{predict}=arg maxP(C=c)\prod_{j=1}^{m}P(X_j=u_j|C=c)=max\{V_1,V_2\}
Cpredict=argmaxP(C=c)j=1∏mP(Xj=uj∣C=c)=max{V1,V2}
在这里:
V
1
=
{
P
(
C
=
C
1
)
P
(
X
1
∣
C
=
C
1
)
P
(
X
2
∣
C
=
C
1
)
P
(
X
3
∣
C
=
C
1
)
P
(
X
4
∣
C
=
C
1
)
}
V_1=\{P(C=C1)P(X_1|C=C_1)P(X_2|C=C_1)P(X_3|C=C_1)P(X_4|C=C_1)\}
V1={P(C=C1)P(X1∣C=C1)P(X2∣C=C1)P(X3∣C=C1)P(X4∣C=C1)}
V
2
=
{
P
(
C
=
C
2
)
P
(
X
1
∣
C
=
C
2
)
P
(
X
2
∣
C
=
C
2
)
P
(
X
3
∣
C
=
C
2
)
P
(
X
4
∣
C
=
C
2
)
}
V_2=\{P(C=C_2)P(X_1|C=C_2)P(X_2|C=C_2)P(X_3|C=C_2)P(X_4|C=C_2)\}
V2={P(C=C2)P(X1∣C=C2)P(X2∣C=C2)P(X3∣C=C2)P(X4∣C=C2)}
如果
V
1
>
V
2
V_1>V_2
V1>V2,则
X
X
X的分类为
C
1
C_1
C1=Yes,否则,分类为
C
2
C_2
C2=No
下面是 C 1 = Y e s C_1=Yes C1=Yes的条件概率计算:
P ( X 1 ∣ C = C 1 ) = P ( " o v e r c a s t " ∣ C = Y e s ) = ? P(X_1|C=C_1)=P("overcast"|C=Yes)=? P(X1∣C=C1)=P("overcast"∣C=Yes)=?
在 p l a y T e n n i s = Y e s playTennis=Yes playTennis=Yes(打球)的9中情况中,有4中情况 o u t l o o k = “ o v e r c a s t ” outlook=“overcast” outlook=“overcast”,因此, P ( o u t l o o k = " o v e r c a s t " ∣ p l a y T e n n i s = Y e s ) = 4 / 9 P(outlook="overcast"|playTennis=Yes)=4/9 P(outlook="overcast"∣playTennis=Yes)=4/9,还可以表示为 P ( X 1 = o v e r c a s t ∣ C 1 ) = 4 / 9 P(X_1=overcast|C_1)=4/9 P(X1=overcast∣C1)=4/9
P ( X 2 ∣ C = C 1 ) = P ( " H o t " ∣ C = Y e s ) = ? P(X_2|C=C_1)=P("Hot"|C=Yes)=? P(X2∣C=C1)=P("Hot"∣C=Yes)=?
在
p
l
a
y
T
e
n
n
i
s
=
Y
e
s
playTennis=Yes
playTennis=Yes的9中情况中,有2中情况
T
e
m
p
e
r
a
t
u
r
e
=
"
H
o
t
"
Temperature="Hot"
Temperature="Hot",因此,
P
(
T
e
m
p
e
r
a
t
u
r
e
=
"
H
o
t
"
∣
p
l
a
y
T
e
n
n
i
s
=
Y
e
s
)
=
2
/
9
P(Temperature="Hot"|playTennis=Yes)=2/9
P(Temperature="Hot"∣playTennis=Yes)=2/9,还可以表示为
P
(
X
2
=
H
o
t
∣
C
1
)
=
2
/
9
P(X_2=Hot|C_1)=2/9
P(X2=Hot∣C1)=2/9
同理可以表示为
P
(
X
3
∣
C
=
C
1
)
=
P
(
"
H
i
g
h
"
∣
C
=
Y
e
s
)
=
3
/
9
P(X_3|C=C_1)=P("High"|C=Yes)=3/9
P(X3∣C=C1)=P("High"∣C=Yes)=3/9,
P
(
X
4
∣
C
=
C
1
)
=
P
(
"
S
t
r
o
n
g
"
∣
C
=
Y
e
s
)
=
3
/
9
P(X_4|C=C_1)=P("Strong"|C=Yes)=3/9
P(X4∣C=C1)=P("Strong"∣C=Yes)=3/9
接下来是计算 C 2 = N O C_2=NO C2=NO的条件概率:
P ( X 1 ∣ C = C 2 ) = P ( " o v e r c a s t " ∣ C = N o ) = ? P(X_1|C=C_2)=P("overcast"|C=No)=? P(X1∣C=C2)=P("overcast"∣C=No)=?
在 p l a y T e n n i s = N o playTennis=No playTennis=No的5种情况中,有0中情况 o u t l o o k = " o v e r c a s t " outlook="overcast" outlook="overcast",因此, P ( o u t l o o k = " o v e r c a s t " ∣ p l a y T e n n i s = N o ) = 0 / 5 P(outlook="overcast"|playTennis=No)=0/5 P(outlook="overcast"∣playTennis=No)=0/5,同理表示为 P ( X 1 = o v e r c a s t ∣ C 2 ) = 0 / 5 P(X_1=overcast|C_2)=0/5 P(X1=overcast∣C2)=0/5
P ( X 2 ∣ C = C 2 ) = P ( " H o t " ∣ C = N o ) = ? P(X_2|C=C_2)=P("Hot"|C=No)=? P(X2∣C=C2)=P("Hot"∣C=No)=?
在 p l a y T e n n i s = N o playTennis=No playTennis=No的5中情况中,有2种情况 t e m p e r a t u r e = " H o t " temperature="Hot" temperature="Hot",因此, P ( t e m p e r a t u r e = " H o t " ∣ p l a y T e n n i s = N o ) = 2 / 5 P(temperature="Hot"|playTennis=No)=2/5 P(temperature="Hot"∣playTennis=No)=2/5,同理可以表示为 P ( X 2 = H o t ∣ C 2 ) = 2 / 5 P(X_2=Hot|C_2)=2/5 P(X2=Hot∣C2)=2/5
同理 P ( X 3 ∣ C = C 2 ) = P ( " H i g h " ∣ C = N o ) = 4 / 5 , P ( X 4 ∣ C = C 2 ) = P ( " S t r o n g " ∣ C = N o ) = 3 / 5 P(X_3|C=C_2)=P("High"|C=No)=4/5,P(X_4|C=C_2)=P("Strong"|C=No)=3/5 P(X3∣C=C2)=P("High"∣C=No)=4/5,P(X4∣C=C2)=P("Strong"∣C=No)=3/5
插入这些值,可以得到:
V
1
=
9
14
×
4
9
×
2
9
×
3
9
3
9
=
648
91854
V_1=\frac{9}{14}\times\frac{4}{9}\times\frac{2}{9}\times\frac{3}{9}\frac{3}{9}=\frac{648}{91854}
V1=149×94×92×9393=91854648
V
2
=
5
14
0
5
2
5
4
5
3
5
=
0
V_2=\frac{5}{14}\frac{0}{5}\frac{2}{5}\frac{4}{5}\frac{3}{5}=0
V2=14550525453=0
由于
V
1
>
V
2
V_1>V_2
V1>V2,则将X分类为
C
1
=
Y
e
s
C_1=Yes
C1=Yes
在下一篇博客中,将讲解如何利用MapReduce去实现这个过程