1 概述
朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。
2 算法特点
- 优点:在数据较少的情况下仍然有效,可以处理多分类别问题。
- 缺点:对于输入数据的准备方式较为敏感,用于分类的特征之间要求是独立的。
- 适用数据类型:标称型。
3 算法原理
对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布,然后基于此模型,对给定的输入 x x x,利用贝叶斯定理求出后验概率最大的输出 y y y。
3.1 贝叶斯定理
贝叶斯定理是关于随机事件A和B的条件概率的一则定理。
P
(
A
∣
B
)
=
P
(
A
)
P
(
B
∣
A
)
P
(
B
)
P(A|B) = \frac{P(A)P(B|A)}{P(B)}
P(A∣B)=P(B)P(A)P(B∣A)
其中A和B为随机事件,且
P
(
B
)
P(B)
P(B)不为零。
P
(
A
∣
B
)
P(A|B)
P(A∣B)是指在事件B发生的情况下事件A发生的概率。
在贝叶斯定理中,每个名词都有约定成俗的名称:
- P ( A ∣ B ) P(A|B) P(A∣B)是一直B发生后,A的条件概率。也由于得自B的取值而被称为A的后验概率。
- P ( A ) P(A) P(A)是A的先验概率(或边缘概率)。之所以称为“先验”是因为它不考虑B方面因素。
- P ( B ∣ A ) P(B|A) P(B∣A)是已知A发生后,B的条件概率。
- P ( B ) P(B) P(B)是B的先验概率。
3.1 朴素贝叶斯
生成方法和判别方法:
- 生成方法由数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,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)作为预测的模型。之所以成为生成方法,是因为模型表示了给定输入 X X X产生输出 Y Y Y的生成关系。用于随机生成的观察值建模,特别是在给定某些隐藏参数情况下。典型的生成模型有:朴素贝叶斯法、马尔科夫模型、高斯混合模型。
- 判别方法由数据直接学习决策函数
f
(
X
)
f(X)
f(X)或者条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)作为预测的模型,即判别模型。判别方法关心的是对给定的输入
X
X
X,应该预测什么样的输出
Y
Y
Y。典型的判别模型包括:
k
k
k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、boosting方法和条件随机场等。
朴素贝叶斯是典型的生成学习方法。生成方法由训练数据学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y),具体来说,利用训练数据学习 P ( X ∣ Y ) P(X|Y) P(X∣Y)和 P ( Y ) P(Y) P(Y)的估计,得到联合概率分布:
P ( X , Y ) = P ( X ) P ( X ∣ Y ) P(X,Y)=P(X)P(X|Y) P(X,Y)=P(X)P(X∣Y)
概率估计方法为极大似然估计或者贝叶斯估计。
朴素贝叶斯法的基本假设是条件独立性。
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯ , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_{k}) = P(X^{(1)}=x^{(1)},\cdots ,X^{(n)}=x^{(n)}|Y=c_{k}) =\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_{k}) P(X=x∣Y=ck)=P(X(1)=x(1),⋯,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。
P ( Y ∣ X ) = P ( X ∣ Y ) P ( X ) = P ( Y ) P ( X ∣ Y ) ∑ Y P ( Y ) P ( X ∣ Y ) P(Y|X) =\frac{P(X|Y)}{P(X)}=\frac{P(Y)P(X|Y)}{\sum_{Y}^{}P(Y)P(X|Y)} P(Y∣X)=P(X)P(X∣Y)=∑YP(Y)P(X∣Y)P(Y)P(X∣Y)
将输入 x x x分到后验概率最大的类 y y y。
y = a r g max c k P ( Y = c k ) ∏ j = 1 n P ( X j = x ( j ) ∣ Y = c k ) y = arg\max_{c_{k}}P(Y=c_{k})\prod_{j=1}^{n}P(X_{j}=x^{(j)}|Y=c_{k}) y=argckmaxP(Y=ck)j=1∏nP(Xj=x(j)∣Y=ck)
4 朴素贝叶斯学习与分类
(1)生成模型
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
Y
=
c
k
)
P
(
X
=
x
∣
Y
=
c
k
)
P
(
X
=
x
)
P(Y=c_{k}|X=x)=\frac{P(Y=c_{k})P(X=x|Y=c_{k})}{P(X=x)}
P(Y=ck∣X=x)=P(X=x)P(Y=ck)P(X=x∣Y=ck)
(2)模型假设,条件独立
P
(
X
=
x
∣
Y
=
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(X=x|Y=c_{k}) =\prod_{j=1}^{n}P(X^{(j)}=x^{(j)}|Y=c_{k})
P(X=x∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
(3)预测准则:后验概率最大
y
=
a
r
g
max
c
k
P
(
Y
=
c
k
∣
X
=
x
)
y = arg\max_{c_{k}}P(Y=c_{k}|X=x)
y=argckmaxP(Y=ck∣X=x)
y
=
a
r
g
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
j
=
x
(
j
)
∣
Y
=
c
k
)
y = arg\max_{c_{k}}P(Y=c_{k})\prod_{j=1}^{n}P(X_{j}=x^{(j)}|Y=c_{k})
y=argckmaxP(Y=ck)j=1∏nP(Xj=x(j)∣Y=ck)
要想求得y,需要求取
P
(
Y
=
c
k
)
P(Y=c_{k})
P(Y=ck)和
P
(
X
j
=
x
(
j
)
∣
Y
=
c
k
)
P(X_{j}=x^{(j)}|Y=c_{k})
P(Xj=x(j)∣Y=ck)的概率,可以使用的方法有:极大似然估计和贝叶斯估计
,贝叶斯估计是在极大似然估计的基础上的一种优化,如果输入的实例
x
x
x中某一特征数值在训练样本中未曾出现,那么预测结果会出现概率为0的情况,影响分类的效果。
- 极大似然估计
先验概率 P ( Y = c k ) P(Y=c_{k}) P(Y=ck)的极大似然估计为:
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N , k = 1 , 2 , ⋯ , K P(Y=c_{k})=\frac{\sum_{i=1}^{N}I(y_{i}=c_{k})}{N},k=1,2,\cdots ,K P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,⋯,K
条件概率 P ( X j = x ( j ) ∣ Y = c k ) P(X_{j}=x^{(j)}|Y=c_{k}) P(Xj=x(j)∣Y=ck)的极大似然估计为,设第 j j j个特征 x ( j ) x^{(j)} x(j)可能的取值集合为 a j 1 , a j 2 , ⋯ , a j s j {a_{j1},a_{j2},\cdots,a_{j}s_{j}} aj1,aj2,⋯,ajsj:
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 ) , j = 1 , 2 , ⋯ , n ; l = 1 , 2 , ⋯ , s j ; k = 1 , 2 , ⋯ , K P(X^{(j)}=a_{jl}|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})},j=1,2,\cdots ,n;l=1,2,\cdots ,s_{j};k=1,2,\cdots ,K P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck),j=1,2,⋯,n;l=1,2,⋯,sj;k=1,2,⋯,K - 贝叶斯估计
先验概率 P ( Y = c k ) P(Y=c_{k}) P(Y=ck)的极大似然估计为:
P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P(Y=c_{k})=\frac{\sum_{i=1}^{N}I(y_{i}=c_{k})+\lambda }{N+K\lambda } P(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ
条件概率 P ( X j = x ( j ) ∣ Y = c k ) P(X_{j}=x^{(j)}|Y=c_{k}) P(Xj=x(j)∣Y=ck)的极大似然估计为:
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 λ P(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 } P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
其中当 λ = 0 \lambda=0 λ=0的时候为极大似然估计,当 λ = 1 \lambda=1 λ=1的时候称为拉普拉斯平滑。
5 示例
给定一张表如图所示:
测试
对于给定测试集
X
t
e
s
t
=
(
s
u
n
n
y
,
c
o
o
l
,
h
i
g
h
,
s
t
r
o
n
g
)
X_{test}=(sunny,cool,high,strong)
Xtest=(sunny,cool,high,strong),问是否打网球?
y
=
a
r
g
max
c
ϵ
{
y
e
s
,
n
o
}
P
(
c
)
P
(
s
u
n
n
y
∣
c
)
P
(
c
o
o
l
∣
c
)
P
(
h
i
g
h
∣
c
)
P
(
s
t
r
o
n
g
∣
c
)
y = arg\max_{c\epsilon \left \{ yes,no \right \}}P(c)P(sunny|c)P(cool|c)P(high|c)P(strong|c)
y=argcϵ{yes,no}maxP(c)P(sunny∣c)P(cool∣c)P(high∣c)P(strong∣c)
使用极大似然估计求解
P
(
y
e
s
)
=
9
/
14
P(yes)=9/14
P(yes)=9/14
P
(
n
o
)
=
5
/
14
P(no)=5/14
P(no)=5/14
P
(
s
u
n
n
y
∣
y
e
s
)
=
2
/
9
P(sunny|yes)=2/9
P(sunny∣yes)=2/9
P
(
s
u
n
n
y
∣
n
o
)
=
3
/
5
P(sunny|no)=3/5
P(sunny∣no)=3/5
P
(
c
o
o
l
∣
y
e
s
)
=
3
/
9
P(cool|yes)=3/9
P(cool∣yes)=3/9
P
(
c
o
o
l
∣
n
o
)
=
1
/
5
P(cool|no)=1/5
P(cool∣no)=1/5
P
(
h
i
g
h
∣
y
e
s
)
=
3
/
9
P(high|yes)=3/9
P(high∣yes)=3/9
P
(
h
i
g
h
∣
n
o
)
=
4
/
5
P(high|no)=4/5
P(high∣no)=4/5
P
(
s
t
r
o
n
g
∣
y
e
s
)
=
3
/
9
P(strong|yes)=3/9
P(strong∣yes)=3/9
P
(
s
t
r
o
n
g
∣
n
o
)
=
3
/
5
P(strong|no)=3/5
P(strong∣no)=3/5
最终:
P
(
y
e
s
)
P
(
s
u
n
n
y
∣
y
e
s
)
P
(
c
o
o
l
∣
y
e
s
)
P
(
h
i
g
h
∣
y
e
s
)
P
(
s
t
r
o
n
g
∣
y
e
s
)
=
0.0053
P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=0.0053
P(yes)P(sunny∣yes)P(cool∣yes)P(high∣yes)P(strong∣yes)=0.0053
P
(
n
o
)
P
(
s
u
n
n
y
∣
n
o
)
P
(
c
o
o
l
∣
n
o
)
P
(
h
i
g
h
∣
n
o
)
P
(
s
t
r
o
n
g
∣
n
o
)
=
0.0206
P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=0.0206
P(no)P(sunny∣no)P(cool∣no)P(high∣no)P(strong∣no)=0.0206
使用贝叶斯估计求解
取
λ
=
1
\lambda=1
λ=1
P
(
y
e
s
)
=
(
9
+
1
)
/
(
14
+
2
)
=
10
/
16
P(yes)=(9+1)/(14+2)=10/16
P(yes)=(9+1)/(14+2)=10/16
P
(
n
o
)
=
(
5
+
1
)
/
(
14
+
2
)
=
6
/
16
P(no)=(5+1)/(14+2)=6/16
P(no)=(5+1)/(14+2)=6/16
P
(
s
u
n
n
y
∣
y
e
s
)
=
(
2
+
1
)
/
(
9
+
3
)
=
3
/
12
P(sunny|yes)=(2+1)/(9+3)=3/12
P(sunny∣yes)=(2+1)/(9+3)=3/12
P
(
s
u
n
n
y
∣
n
o
)
=
(
3
+
1
)
/
(
5
+
3
)
=
4
/
8
P(sunny|no)=(3+1)/(5+3)=4/8
P(sunny∣no)=(3+1)/(5+3)=4/8
P
(
c
o
o
l
∣
y
e
s
)
=
(
3
+
1
)
/
(
9
+
3
)
=
4
/
12
P(cool|yes)=(3+1)/(9+3)=4/12
P(cool∣yes)=(3+1)/(9+3)=4/12
P
(
c
o
o
l
∣
n
o
)
=
(
1
+
1
)
/
(
5
+
3
)
=
2
/
8
P(cool|no)=(1+1)/(5+3)=2/8
P(cool∣no)=(1+1)/(5+3)=2/8
P
(
h
i
g
h
∣
y
e
s
)
=
(
3
+
1
)
/
(
9
+
2
)
=
4
/
11
P(high|yes)=(3+1)/(9+2)=4/11
P(high∣yes)=(3+1)/(9+2)=4/11
P
(
h
i
g
h
∣
n
o
)
=
(
4
+
1
)
/
(
5
+
2
)
=
5
/
7
P(high|no)=(4+1)/(5+2)=5/7
P(high∣no)=(4+1)/(5+2)=5/7
P
(
s
t
r
o
n
g
∣
y
e
s
)
=
(
3
+
1
)
/
(
9
+
2
)
=
4
/
11
P(strong|yes)=(3+1)/(9+2)=4/11
P(strong∣yes)=(3+1)/(9+2)=4/11
P
(
s
t
r
o
n
g
∣
n
o
)
=
(
3
+
1
)
/
(
5
+
2
)
=
4
/
7
P(strong|no)=(3+1)/(5+2)=4/7
P(strong∣no)=(3+1)/(5+2)=4/7
最终:
P
(
y
e
s
)
P
(
s
u
n
n
y
∣
y
e
s
)
P
(
c
o
o
l
∣
y
e
s
)
P
(
h
i
g
h
∣
y
e
s
)
P
(
s
t
r
o
n
g
∣
y
e
s
)
=
0.0069
P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=0.0069
P(yes)P(sunny∣yes)P(cool∣yes)P(high∣yes)P(strong∣yes)=0.0069
P
(
n
o
)
P
(
s
u
n
n
y
∣
n
o
)
P
(
c
o
o
l
∣
n
o
)
P
(
h
i
g
h
∣
n
o
)
P
(
s
t
r
o
n
g
∣
n
o
)
=
0.0191
P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=0.0191
P(no)P(sunny∣no)P(cool∣no)P(high∣no)P(strong∣no)=0.0191
6 python实现
git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/Bayes