在看贝叶斯算法的相关内容时,你一定被突如其来的数学概念搞得头昏脑涨。比如极大似然估计(Maximum likelihood estimation ),极大后验概率估计(Maximum a posteriori estimation),先验概率(Prior probability),后验概率(Posteriori probability)等。所以后面我就本着先学会用,再谈概念的路线来进行。
1. 朴素贝叶斯算法
先说结论: 朴素贝叶斯就是用贝叶斯公式外加“朴素”的条件来求解样本所属类别的概率
1.1 理解朴素贝叶斯
先不予证明的给出条件概率公式,以及贝叶斯定理(公式)
P
(
A
∣
B
)
=
P
(
A
B
)
P
(
B
)
(1.1)
\begin{aligned} &P(A|B)=\frac{P(AB)}{P(B)} \end{aligned}\tag{1.1}
P(A∣B)=P(B)P(AB)(1.1)
P ( A i ∣ B ) = P ( A i ) P ( B ∣ A i ) ∑ i = 1 n P ( A i ) P ( B ∣ A i ) (1.2) \begin{aligned} &P(A_i|B)=\frac{P(A_i)P(B|A_i)}{\sum_{i=1}^nP(A_i)P(B|A_i)} \end{aligned}\tag{1.2} P(Ai∣B)=∑i=1nP(Ai)P(B∣Ai)P(Ai)P(B∣Ai)(1.2)
设输入空间
X
⊆
R
n
\mathcal{X}\subseteq R^n
X⊆Rn,为
n
n
n维向量的集合,输出空间为类标记
Y
=
{
c
1
,
c
2
,
.
.
.
,
c
m
}
\mathcal{Y}=\{c_1,c_2,...,c_m\}
Y={c1,c2,...,cm}.输入为特征向量
x
∈
X
x\in\mathcal{X}
x∈X,输出为类标记
y
∈
Y
y\in \mathcal{Y}
y∈Y,
X
X
X是定义在输入空间
X
\mathcal{X}
X上的随机向量,
Y
Y
Y是定义在输出空间
Y
\mathcal{Y}
Y上的随机变量。也就是说
X
X
X是一个
m
×
n
m\times n
m×n的矩阵,
y
y
y为类标签。训练集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
T={(x1,y1),(x2,y2),...,(xm,ym)}
则有:
P
(
Y
=
c
k
)
=
#
c
k
m
,
k
=
1
,
2
,
.
.
.
,
K
(1.3)
\begin{aligned} &P(Y=c_k) = \frac{\#c_k}{m},k=1,2,...,K \end{aligned}\tag{1.3}
P(Y=ck)=m#ck,k=1,2,...,K(1.3)
( # c k 表示该类别一共有多少个样本 ) P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , . . . , X ( n ) = x ( n ) ∣ Y = c k ) (1.4) \begin{aligned} &(\#c_k\textrm{表示该类别一共有多少个样本})\\[2ex] &P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k) \end{aligned}\tag{1.4} (#ck表示该类别一共有多少个样本)P(X=x∣Y=ck)=P(X(1)=x(1),...,X(n)=x(n)∣Y=ck)(1.4)
又因为朴素贝叶斯对条件概率分布做了条件独立性假设,即有
P
(
A
B
∣
D
)
=
P
(
A
∣
D
)
P
(
B
∣
D
)
P(AB|D)=P(A|D)P(B|D)
P(AB∣D)=P(A∣D)P(B∣D),而这也是“朴素”一词的由来,因此公式
(
1.4
)
(1.4)
(1.4)可写成如下形式:
P
(
X
=
x
∣
Y
=
c
k
)
=
∏
i
=
1
n
P
(
X
(
i
)
=
x
(
i
)
∣
Y
=
c
k
)
(1.5)
P(X=x|Y=c_k)=\prod_{i=1}^nP(X^{(i)}=x^{(i)}|Y=c_k)\tag{1.5}
P(X=x∣Y=ck)=i=1∏nP(X(i)=x(i)∣Y=ck)(1.5)
由贝叶斯公式
(
1.2
)
(1.2)
(1.2)可知:
P
(
Y
=
c
k
∣
X
=
x
)
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
i
=
1
n
P
(
X
=
x
∣
Y
=
c
i
)
P
(
Y
=
c
i
)
(1.6)
P(Y=c_k|X=x)\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{i=1}^nP(X=x|Y=c_i)P(Y=c_i)}\tag{1.6}
P(Y=ck∣X=x)∑i=1nP(X=x∣Y=ci)P(Y=ci)P(X=x∣Y=ck)P(Y=ck)(1.6)
根据公式
(
1.6
)
(1.6)
(1.6)我们可以计算出任一样本
x
i
x_i
xi属于类别
c
k
c_k
ck的概率,选择其中概率最大者便可作为其分类的类标。但我们发现,
(
1.6
)
(1.6)
(1.6)中,对于每个样本的计算都有相同的分母,因此可以略去。则再代入公式
(
1.5
)
(1.5)
(1.5),可化简为:
y
=
a
r
g
max
c
k
P
(
Y
=
c
k
)
∏
i
=
1
n
P
(
X
(
i
)
=
x
(
i
)
∣
Y
=
c
k
)
(1.7)
y=arg\max_{c_k}P(Y=c_k)\prod_{i=1}^nP(X^{(i)}=x^{(i)}|Y=c_k)\tag{1.7}
y=argckmaxP(Y=ck)i=1∏nP(X(i)=x(i)∣Y=ck)(1.7)
注: y = a r g max c k y=arg\max_{c_k} y=argmaxck的含义是,取使得y最大时的 c k c_k ck的值
说了这么多,可能还是云里雾里的,举个例子就明白了:
试由下表的训练集学习一个朴素贝叶斯分类器,并确定 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T的类标记 y y y。表中 X ( 1 ) , X ( 2 ) X^{(1)},X^{(2)} X(1),X(2)为特征,取值集合分别为 A 1 = { 1 , 2 , 3 } , A 2 = { S , M , L } , Y A_1=\{1,2,3\},A_2=\{S,M,L\},Y A1={1,2,3},A2={S,M,L},Y为类标记, Y ∈ C = { 1 , 0 } Y\in C=\{1,0\} Y∈C={1,0}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 X ( 1 ) 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 X ( 2 ) S M M S S S M M L L L M M L L Y 0 0 1 1 0 0 0 1 1 1 1 1 1 1 0 \begin{array}{c|lr} & 1&2&3&4&5&6&7&8&9&10&11&12&13&14&15\\ \hline X^{(1)}&1&1&1&1&1&2&2&2&2&2&3&3&3&3&3\\ X^{(2)}&S&M&M&S&S&S&M&M&L&L&L&M&M&L&L \\ Y&0&0&1&1&0&0&0&1&1&1&1&1&1&1&0 \end{array} X(1)X(2)Y11S021M031M141S151S062S072M082M192L1102L1113L1123M1133M1143L1153L0
易知:
P
(
Y
=
1
)
=
9
15
,
P
(
Y
=
0
)
=
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
=
0
)
=
3
6
,
P
(
X
(
1
)
=
2
∣
Y
=
0
)
=
2
6
,
P
(
X
(
1
)
=
3
∣
Y
=
0
)
=
1
6
P
(
X
(
2
)
=
S
∣
Y
=
0
)
=
3
6
,
P
(
X
(
2
)
=
M
∣
Y
=
0
)
=
2
6
,
P
(
X
(
2
)
=
L
∣
Y
=
0
)
=
1
6
\begin{aligned} &P(Y=1)=\frac{9}{15},P(Y=0)=\frac{6}{15}\\[1ex] &P(X^{(1)}=1|Y=1)=\frac{2}{9},P(X^{(1)}=2|Y=1)=\frac{3}{9},P(X^{(1)}=3|Y=1)=\frac{4}{9}\\[1ex] &P(X^{(2)}=S|Y=1)=\frac{1}{9},P(X^{(2)}=M|Y=1)=\frac{4}{9},P(X^{(2)}=L|Y=1)=\frac{4}{9}\\[1ex] &P(X^{(1)}=1|Y=0)=\frac{3}{6},P(X^{(1)}=2|Y=0)=\frac{2}{6},P(X^{(1)}=3|Y=0)=\frac{1}{6}\\[1ex] &P(X^{(2)}=S|Y=0)=\frac{3}{6},P(X^{(2)}=M|Y=0)=\frac{2}{6},P(X^{(2)}=L|Y=0)=\frac{1}{6} \end{aligned}
P(Y=1)=159,P(Y=0)=156P(X(1)=1∣Y=1)=92,P(X(1)=2∣Y=1)=93,P(X(1)=3∣Y=1)=94P(X(2)=S∣Y=1)=91,P(X(2)=M∣Y=1)=94,P(X(2)=L∣Y=1)=94P(X(1)=1∣Y=0)=63,P(X(1)=2∣Y=0)=62,P(X(1)=3∣Y=0)=61P(X(2)=S∣Y=0)=63,P(X(2)=M∣Y=0)=62,P(X(2)=L∣Y=0)=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
=
0
)
P
(
X
(
1
)
=
2
∣
Y
=
0
)
P
(
X
(
2
)
=
S
∣
Y
=
0
)
=
6
15
2
6
3
6
=
1
15
\begin{aligned} &P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{9}{15}\frac{3}{9}\frac{1}{9}=\frac{1}{45}\\[1ex] &P(Y=0)P(X^{(1)}=2|Y=0)P(X^{(2)}=S|Y=0)=\frac{6}{15}\frac{2}{6}\frac{3}{6}=\frac{1}{15} \end{aligned}
P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=1599391=451P(Y=0)P(X(1)=2∣Y=0)P(X(2)=S∣Y=0)=1566263=151
于是我们可以知道,样本 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T属于 y = 0 y=0 y=0.
1.2 概念解释
-
先验概率: 所谓先验概率指的就是根据以往经验得出来的概率;
例如,可以通过西瓜的颜色,敲的声音来判断是否成熟;因为你已经有了通过颜色和声音来判断的“经验”,不管这个经验是你自己学习的还是别人告诉你的。又如在上面的例子中,在拿到一个新样本的时候,事先上面也不做,我们就可以通过训练集这一历史数据来得出 P ( Y = 0 ) = 6 15 , P ( Y = 1 ) = 9 15 P(Y=0)=\frac{6}{15},P(Y=1)=\frac{9}{15} P(Y=0)=156,P(Y=1)=159,因为这是我们通过已有的经验得到的;最后举个例子,办公室失窃了,理论上每个人都可能是小偷;但我们可以根据对每个人的了解,人品分析得出一个可能性,比如张三偷的可能性为20%,李四偷的可能性为30%,而这就被称之为先验概率,是通过历史经验得来的。 -
后验概率: 所谓后验概率指的就是贝叶斯定理(公式)求解的结果;
例如,上面说的办公室失窃,我们可以通过先验概率知道,张三偷的可能性为20%,李四偷的可能性为30%,但事实是多少呢?那就得通过贝叶斯公式来进行计算了。 -
极大似然概率估计: 所谓极大似然概率估计,就是求解满足某个样本最有可能出现时的概率以及此时的参数值。详见
1.3 求解步骤
输入:
训练数据
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
T={(x1,y1),(x2,y2),...,(xm,ym)},其中
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
.
.
.
,
x
i
(
n
)
)
T
x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T
xi=(xi(1),xi(2),...,xi(n))T,
x
i
(
j
)
x_i^{(j)}
xi(j)是第
i
i
i个样本的第
j
j
j维特征,
x
i
(
j
)
∈
{
a
j
1
,
a
j
2
,
.
.
.
,
a
j
S
j
}
x_i^{(j)}\in\{a_{j1},a_{j2},...,a_{jS_j}\}
xi(j)∈{aj1,aj2,...,ajSj},
a
j
l
a_{jl}
ajl是第
j
j
j维特征可能取得第
l
l
l个值,
j
=
1
,
2
,
.
.
.
,
n
;
l
=
1
,
2
,
.
.
.
,
S
j
;
y
i
∈
{
c
1
,
c
2
,
.
.
.
,
c
k
}
j=1,2,...,n;\;\;l=1,2,...,S_j;\;\;y_i\in\{c_1,c_2,...,c_k\}
j=1,2,...,n;l=1,2,...,Sj;yi∈{c1,c2,...,ck},
S
j
S_j
Sj表示第j为特征可取值个数;
输出:实例
x
x
x的分类
(1)用极大似然估计计算先验概率及条件概率:
P
(
Y
=
c
k
)
=
∑
i
=
1
m
I
(
y
i
=
c
k
)
m
,
k
=
1
,
2
,
.
.
.
,
K
(1.8)
\begin{aligned} &P(Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(y_i=c_k)}{m},k=1,2,...,K\tag{1.8}\\[2ex] \end{aligned}
P(Y=ck)=mi=1∑mI(yi=ck),k=1,2,...,K(1.8)
P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 m I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 m I ( y i = c k ) j = 1 , 2 , . . . , n ; l = 1 , 2 , . . . , S j ; k = 1 , 2 , . . . , K (1.9) \begin{aligned} &P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(x_i^{(j)}=a_{jl,}y_i=c_k)}{\displaystyle\sum_{i=1}^mI(y_i=c_k)}\tag{1.9}\\[1ex] &j=1,2,...,n;\;\;l=1,2,...,S_j;\;\;k=1,2,...,K \end{aligned} P(X(j)=ajl∣Y=ck)=i=1∑mI(yi=ck)i=1∑mI(xi(j)=ajl,yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K(1.9)
注:最好是结合着前面的例子来看公式
(2)对于给定的实例 x = ( x ( 1 ) , x ( 2 ) , . . . , x ( n ) ) T x=(x^{(1)},x^{(2)},...,x^{(n)})^T x=(x(1),x(2),...,x(n))T
P ( Y = c k ) ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , . . . , K (1.10) \begin{aligned} P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k),k=1,2,...,K\tag{1.10} \end{aligned} P(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck),k=1,2,...,K(1.10)
(3)确定实例
x
x
x的类别
y
=
a
r
g
max
c
k
P
(
Y
=
c
k
)
∏
j
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
(1.11)
\begin{aligned} y = arg\max_{c_k}P(Y=c_k)\prod_{j=1}^nP(X^{(j)}=x^{(j)}|Y=c_k)\tag{1.11} \end{aligned}
y=argckmaxP(Y=ck)j=1∏nP(X(j)=x(j)∣Y=ck)(1.11)
2. 贝叶斯估计
从上面我们可以算是大致了解了朴素贝叶斯的过程,但是有一个不能忽略的问题就是:在训练集不充分的情况下,缺少某个维度的条件概率时,(例如,如果 P ( X ( 1 ) = 1 ∣ Y = 1 ) P(X^{(1)}=1|Y=1) P(X(1)=1∣Y=1)为0的话)那么在预测的时候,将会产生很大的错差。解决这个问题的办法就是在各个估计中加入平滑项,即贝叶斯估计。
P
λ
(
Y
=
c
k
)
=
∑
i
=
1
m
I
(
y
i
=
c
k
)
+
λ
m
+
K
λ
(2.1)
\begin{aligned} &P_{\lambda}(Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(y_i=c_k)+\lambda}{m+K\lambda}\tag{2.1} \end{aligned}
Pλ(Y=ck)=m+Kλi=1∑mI(yi=ck)+λ(2.1)
P
λ
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
=
∑
i
=
1
m
I
(
x
i
(
j
)
=
a
j
l
,
y
i
=
c
k
)
+
λ
∑
i
=
1
m
I
(
y
i
=
c
k
)
+
S
j
λ
(2.2)
\begin{aligned} &P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\displaystyle\sum_{i=1}^mI(x_i^{(j)}=a_{jl,}y_i=c_k)+\lambda}{\displaystyle\sum_{i=1}^mI(y_i=c_k)+S_j\lambda}\tag{2.2} \end{aligned}
Pλ(X(j)=ajl∣Y=ck)=i=1∑mI(yi=ck)+Sjλi=1∑mI(xi(j)=ajl,yi=ck)+λ(2.2)
式中 λ ≥ 0 \lambda\geq0 λ≥0.当 λ = 0 \lambda=0 λ=0时,就是极大似然估计;当 λ = 1 \lambda=1 λ=1时,称为拉普拉斯平滑(Laplace smoothing),这也是常用的做法。
我们将上面的例子用拉普拉斯平滑( λ = 1 \lambda=1 λ=1)再来计算一次。在计算之前我们知道,此时 K K K为类别数2, S j S_j Sj表示第 j j j个维度可能取值的个数,即 S 1 = 3 , S 2 = 3 S_1=3,S_2=3 S1=3,S2=3
易知:
P
(
Y
=
1
)
=
10
17
,
P
(
Y
=
0
)
=
7
17
P
(
X
(
1
)
=
1
∣
Y
=
1
)
=
3
12
,
P
(
X
(
1
)
=
2
∣
Y
=
1
)
=
4
12
,
P
(
X
(
1
)
=
3
∣
Y
=
1
)
=
5
12
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
2
12
,
P
(
X
(
2
)
=
M
∣
Y
=
1
)
=
5
12
,
P
(
X
(
2
)
=
L
∣
Y
=
1
)
=
5
12
P
(
X
(
1
)
=
1
∣
Y
=
0
)
=
4
9
,
P
(
X
(
1
)
=
2
∣
Y
=
0
)
=
3
9
,
P
(
X
(
1
)
=
3
∣
Y
=
0
)
=
2
9
P
(
X
(
2
)
=
S
∣
Y
=
0
)
=
4
9
,
P
(
X
(
2
)
=
M
∣
Y
=
0
)
=
3
9
,
P
(
X
(
2
)
=
L
∣
Y
=
0
)
=
2
9
\begin{aligned} &P(Y=1)=\frac{10}{17},P(Y=0)=\frac{7}{17}\\[1ex] &P(X^{(1)}=1|Y=1)=\frac{3}{12},P(X^{(1)}=2|Y=1)=\frac{4}{12},P(X^{(1)}=3|Y=1)=\frac{5}{12}\\[1ex] &P(X^{(2)}=S|Y=1)=\frac{2}{12},P(X^{(2)}=M|Y=1)=\frac{5}{12},P(X^{(2)}=L|Y=1)=\frac{5}{12}\\[1ex] &P(X^{(1)}=1|Y=0)=\frac{4}{9},P(X^{(1)}=2|Y=0)=\frac{3}{9},P(X^{(1)}=3|Y=0)=\frac{2}{9}\\[1ex] &P(X^{(2)}=S|Y=0)=\frac{4}{9},P(X^{(2)}=M|Y=0)=\frac{3}{9},P(X^{(2)}=L|Y=0)=\frac{2}{9} \end{aligned}
P(Y=1)=1710,P(Y=0)=177P(X(1)=1∣Y=1)=123,P(X(1)=2∣Y=1)=124,P(X(1)=3∣Y=1)=125P(X(2)=S∣Y=1)=122,P(X(2)=M∣Y=1)=125,P(X(2)=L∣Y=1)=125P(X(1)=1∣Y=0)=94,P(X(1)=2∣Y=0)=93,P(X(1)=3∣Y=0)=92P(X(2)=S∣Y=0)=94,P(X(2)=M∣Y=0)=93,P(X(2)=L∣Y=0)=92
以上的计算过程,就是用训练集训练好一个模型的参数,下面进行预测。
对于给定的
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
)
=
10
17
4
12
2
13
=
5
153
P
(
Y
=
0
)
P
(
X
(
1
)
=
2
∣
Y
=
0
)
P
(
X
(
2
)
=
S
∣
Y
=
0
)
=
7
17
3
9
4
9
=
28
459
\begin{aligned} &P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{10}{17}\frac{4}{12}\frac{2}{13}=\frac{5}{153}\\[1ex] &P(Y=0)P(X^{(1)}=2|Y=0)P(X^{(2)}=S|Y=0)=\frac{7}{17}\frac{3}{9}\frac{4}{9}=\frac{28}{459} \end{aligned}
P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=1710124132=1535P(Y=0)P(X(1)=2∣Y=0)P(X(2)=S∣Y=0)=1779394=45928
于是我们可以知道,样本 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T属于 y = 0 y=0 y=0.
3. 概念辨析
对于不同的书,对于一些算法或算法行为有着不同的称谓,有的概念名称甚至连原书作者也拿捏不准,这也导致我们在初学翻阅各种资料时候发现一会儿又多了这个概念,一会儿又多了那个概念,及其痛苦。但是名称不重要,重要的是我们知道所指代的具体东西就行。下面就整理出笔者在学习中遇到过的各种“叫法”,仅供参考。
所有的算法都称之为贝叶斯分类器,朴素贝叶斯有三种叫法,加入平滑项后叫贝叶斯估计
4.示例
参考
- 《统计学习》
- 《Python与机器学习实战》
- 《Python机器学习及实践》
- 《机器学习实战》
