朴素贝叶斯简介
朴素贝叶斯算法是基于贝叶斯定理与特征条件独立性假设的分类方法。对于给定训练样本集,首先假设全部的特征相互独立,即每个特征对分类结果的影响都是独立的。然后学习输入/输出的联合概率分布,最后基于得到的模型,对于给定输入
x
x
x,利用贝叶斯定理求出后验概率最大的输出
y
y
y。由于其简单和高效,朴素贝叶斯算法是一种常用的分类方法。
算法原理
设输入空间
χ
⊆
R
n
\chi\subseteq \mathbf{R}^n
χ⊆Rn为
n
n
n维向量的集合,输出空间为类别标记集合
γ
=
c
1
,
c
2
,
…
,
c
K
\gamma={c_1,c_2,\ldots,c_K}
γ=c1,c2,…,cK。其中输入为特征向量
x
∈
χ
x\in\chi
x∈χ,输出为类别标记
y
∈
γ
y\in\gamma
y∈γ。
X
X
X是定义在输入空间
χ
\chi
χ上的随机向量,
Y
Y
Y是定义在输出空间
γ
\gamma
γ上的随机变量。
P
(
X
,
Y
)
P(X,Y)
P(X,Y)是
X
X
X和
Y
Y
Y的联合概率分布。
上面的表述可以得知训练样本集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
T={(x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N)}
T=(x1,y1),(x2,y2),…,(xN,yN)由
P
(
X
,
Y
)
P(X,Y)
P(X,Y)独立同分布产生。
朴素贝叶斯算法通过训练样本集学习联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)。那么其需要学先验概率分布以及条件概率分布。
先验概率分布
P
(
Y
=
c
k
)
,
k
=
1
,
2
,
…
,
K
P(Y=c_k), \quad k=1,2,\ldots,K
P(Y=ck),k=1,2,…,K 条件概率分布
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
…
,
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
,
k
=
1
,
2
,
…
,
K
P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},\ldots,X^{(n)}=x^{(n)}|Y=c_k), \quad k=1,2,\ldots,K
P(X=x∣Y=ck)=P(X(1)=x(1),…,X(n)=x(n)∣Y=ck),k=1,2,…,K 由于朴素贝叶斯假设特征相互独立,因此条件概率分布为
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
…
,
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
∣
Y
=
c
k
)
…
P
(
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
\begin{aligned} P(X=x|Y=c_k)& =P(X^{(1)}=x^{(1)},\ldots,X^{(n)}=x^{(n)}|Y=c_k) \\ & = P(X^{(1)}=x^{(1)}|Y=c_k)\ldots P(X^{(n)}=x^{(n)}|Y=c_k)\\ &=\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k) \end{aligned}
P(X=x∣Y=ck)=P(X(1)=x(1),…,X(n)=x(n)∣Y=ck)=P(X(1)=x(1)∣Y=ck)…P(X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck) 对于假设特征相互独立,也就是用于分类的特征在类别确定的条件下都是条件独立的,这个假设尽管使得朴素贝叶斯变得简单,但是这个假设会牺牲一定的分类准确率。
朴素贝叶斯分类时,对于给定的输入
x
x
x,通过学习到的模型计算后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P(Y=c_k|X=x)
P(Y=ck∣X=x),将后验概率最大的类作为
x
x
x的类别输出。后验概率可以根据贝叶斯定理进行计算,其中贝叶斯定理为:
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)}
P(Y∣X)=P(X)P(X∣Y)P(Y) 根据贝叶斯定理,可以计算后验概率为:
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
P
(
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
k
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
=
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
\begin{aligned} P(Y=c_k|X=x)&=\frac{P(X=x|Y=c_k)P(Y=c_k)}{P(X=x)} \\ &=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_k P(X=x|Y=c_k)P(Y=c_k)} \\ &=\frac{P(Y=c_k)\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_k P(Y=c_k)\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)} \end{aligned}
P(Y=ck∣X=x)=P(X=x)P(X=x∣Y=ck)P(Y=ck)=∑kP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)=∑kP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck) 因为朴素贝叶斯将后验概率最大的类作为
x
x
x的类别输出,因此朴素贝叶斯分类器可以表示为:
y
=
f
(
x
)
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=f(x)= \mathop{\arg\max}_{c_k} \frac{P(Y=c_k)\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_k P(Y=c_k)\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)}
y=f(x)=argmaxck∑kP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)P(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)由于上式中分母对于所有
c
k
c_k
ck都是相同的,所以有
y
=
f
(
x
)
=
arg
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=f(x)= \mathop{\arg\max}_{c_k} P(Y=c_k)\prod_{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)
y=f(x)=argmaxckP(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)
朴素贝叶斯算法将实例分到后验概率最大的类别中,这等价于最小化期望风险,接下来本文将具体展开。
基于
K
K
K种可能的类别标记以及后验概率,可以获得将样本
x
x
x分类为
c
i
c_i
ci的期望损失,即在样本
x
x
x上的条件期望
R
(
c
i
∣
X
)
=
∑
k
=
1
K
[
L
(
c
k
,
f
(
X
)
)
]
P
(
c
k
∣
X
)
R(c_i|X)=\sum_{k=1}^K[L(c_k,f(X))]P(c_k|X)
R(ci∣X)=k=1∑K[L(ck,f(X))]P(ck∣X)其中
L
(
c
k
,
f
(
X
)
)
L(c_k,f(X))
L(ck,f(X))表示分类错误的损失,这里假设选择0-1损失函数:
L
(
Y
,
f
(
X
)
)
=
{
1
,
if
Y
≠
f
(
X
)
0
,
if
Y
=
f
(
X
)
L(Y,f(X))= \begin{cases} 1, & \text{if }Y\ne f(X) \\ 0, & \text{if }Y= f(X) \end{cases}
L(Y,f(X))={1,0,if Y=f(X)if Y=f(X)其中
f
(
X
)
f(X)
f(X)是分类决策函数。
为了使期望风险最小化,只需要对
X
=
x
X=x
X=x逐个极小化,因此可以得到:
f
(
x
)
=
arg
min
y
∈
γ
∑
k
=
1
K
L
(
c
k
,
y
)
P
(
c
k
∣
X
=
x
)
=
arg
min
y
∈
γ
∑
k
=
1
K
P
(
y
≠
c
k
∣
X
=
x
)
=
arg
min
y
∈
γ
(
1
−
P
(
y
=
c
k
∣
X
=
x
)
)
=
arg
max
y
∈
γ
P
(
y
=
c
k
∣
X
=
x
)
\begin{aligned} f(x)&=\mathop{\arg\min}_{y\in\gamma} \sum_{k=1}^K L(c_k,y)P(c_k|X=x) \\ &=\mathop{\arg\min}_{y\in\gamma} \sum_{k=1}^K P(y\ne c_k|X=x) \\ &=\mathop{\arg\min}_{y\in\gamma} (1-P(y=c_k|X=x))\\ &=\mathop{\arg\max}_{y\in\gamma} P(y=c_k|X=x)\\ \end{aligned}
f(x)=argminy∈γk=1∑KL(ck,y)P(ck∣X=x)=argminy∈γk=1∑KP(y=ck∣X=x)=argminy∈γ(1−P(y=ck∣X=x))=argmaxy∈γP(y=ck∣X=x)这样子相当于根据期望风险最小化得到了后验概率最大化,即
f
(
x
)
=
arg
max
c
k
P
(
c
k
∣
x
)
f(x)=\mathop{\arg\max}_{c_k} P(c_k|x)
f(x)=argmaxckP(ck∣x)
举例说明
已知训练数据如下表所示,表中 X 1 X_1 X1和 X 2 X_2 X2为特征, Y Y Y为类别标记,根据以下数据训练一个朴素贝叶斯分类器并确定 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T的类别标记 y y y。
变量 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X 1 X_1 X1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 |
X 1 X_1 X1 | S | M | M | S | S | S | M | M | L | L | L | M | M | L | L |
Y Y Y | -1 | -1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -1 |
根据朴素贝叶斯算法,可以求得:
P
(
Y
=
1
)
=
9
15
,
P
(
Y
=
−
1
)
=
6
15
P
(
X
1
=
1
∣
Y
=
1
)
=
2
9
,
P
(
X
1
=
2
∣
Y
=
1
)
=
3
9
,
P
(
X
1
=
3
∣
Y
=
1
)
=
4
9
P
(
X
2
=
S
∣
Y
=
1
)
=
1
9
,
P
(
X
2
=
M
∣
Y
=
1
)
=
4
9
,
P
(
X
2
=
L
∣
Y
=
1
)
=
4
9
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
P
(
X
1
=
1
∣
Y
=
−
1
)
=
3
6
,
P
(
X
1
=
2
∣
Y
=
−
1
)
=
2
6
,
P
(
X
1
=
3
∣
Y
=
−
1
)
=
1
6
P
(
X
2
=
S
∣
Y
=
−
1
)
=
3
6
,
P
(
X
2
=
M
∣
Y
=
−
1
)
=
2
6
,
P
(
X
2
=
L
∣
Y
=
−
1
)
=
1
6
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
P(Y=1)=\frac{9}{15}, \quad P(Y=-1)=\frac{6}{15} \\ P(X_1=1|Y=1)=\frac{2}{9}, \quad P(X_1=2|Y=1)=\frac{3}{9},\quad P(X_1=3|Y=1)=\frac{4}{9}\\ P(X_2=S|Y=1)=\frac{1}{9}, \quad P(X_2=M|Y=1)=\frac{4}{9},\quad P(X_2=L|Y=1)=\frac{4}{9}\\ ----------------------------------------------------\\ P(X_1=1|Y=-1)=\frac{3}{6}, \quad P(X_1=2|Y=-1)=\frac{2}{6},\quad P(X_1=3|Y=-1)=\frac{1}{6}\\ P(X_2=S|Y=-1)=\frac{3}{6}, \quad P(X_2=M|Y=-1)=\frac{2}{6},\quad P(X_2=L|Y=-1)=\frac{1}{6}\\ ----------------------------------------------------\\
P(Y=1)=159,P(Y=−1)=156P(X1=1∣Y=1)=92,P(X1=2∣Y=1)=93,P(X1=3∣Y=1)=94P(X2=S∣Y=1)=91,P(X2=M∣Y=1)=94,P(X2=L∣Y=1)=94−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−P(X1=1∣Y=−1)=63,P(X1=2∣Y=−1)=62,P(X1=3∣Y=−1)=61P(X2=S∣Y=−1)=63,P(X2=M∣Y=−1)=62,P(X2=L∣Y=−1)=61−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−对于给定的
x
=
(
2
,
S
)
T
x=(2,S)^T
x=(2,S)T计算:
P
(
Y
=
1
)
P
(
X
1
=
2
∣
Y
=
1
)
P
(
X
2
=
S
∣
Y
=
1
)
=
9
15
⋅
3
9
⋅
1
9
=
1
45
P
(
Y
=
−
1
)
P
(
X
1
=
2
∣
Y
=
−
1
)
P
(
X
2
=
S
∣
Y
=
−
1
)
=
6
15
⋅
2
6
⋅
3
6
=
1
15
P(Y=1)P(X_1=2|Y=1)P(X_2=S|Y=1)=\frac{9}{15}\cdot \frac{3}{9}\cdot \frac{1}{9}= \frac{1}{45}\\ P(Y=-1)P(X_1=2|Y=-1)P(X_2=S|Y=-1)=\frac{6}{15}\cdot \frac{2}{6}\cdot \frac{3}{6}= \frac{1}{15}
P(Y=1)P(X1=2∣Y=1)P(X2=S∣Y=1)=159⋅93⋅91=451P(Y=−1)P(X1=2∣Y=−1)P(X2=S∣Y=−1)=156⋅62⋅63=151因为
1
15
>
1
45
\frac{1}{15}>\frac{1}{45}
151>451,因此给定的
x
=
(
2
,
S
)
T
x=(2,S)^T
x=(2,S)T的类别为
y
=
−
1
y=-1
y=−1。
算法小结
优点:
1.有稳定的分类效率
2.对缺失数据不太敏感,算法简单
3.对小规模的数据表现很好,能处理多分类问题
缺点:
1.朴素贝叶斯假设特征之间相互独立,但实际上往往不能满足该假设
2.需要知道先验概率,也正是因为先验概率容易导致预测效果不佳
如有错误,欢迎批评指出,谢谢!