朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法(与贝叶斯估计是不同的方概念),对于给定的训练数据集,首先基于特征条件独立假设学习输入和输出的联合概率分布;然后基于此模型,对于给定的输入 x x x ,利用贝叶斯定理求出后验概率最大的输出 y y y 。朴素贝叶斯方法实现简单,学习与预测的效率都很高,是一种常用的方法。
1. 基本方法
设输入空间
X
⊆
R
n
\mathcal{X}\subseteq\mathbf{R^n}
X⊆Rn 为
n
\text{n}
n 维向量的集合,输出空间为类标记集合
Y
=
{
c
1
,
…
,
c
k
}
\mathcal{Y}= \{c_1,\ldots,c_k\}
Y={c1,…,ck}。输入为特征向量
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 是定义在输出空间的随机变量,
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=x|Y=c_k)
P(X=x∣Y=ck) 有指数级数量的参数,其估计实际上是不可行的。假设
x
(
j
)
x^{(j)}
x(j) 可取值有
S
j
S_j
Sj 个,
j
=
1
,
2
,
…
,
n
j=1,2,\ldots,n
j=1,2,…,n ,
Y
Y
Y 可取值有
K
K
K 个,那么参数个数为
K
∏
i
=
1
n
S
j
K\prod_{i=1}^n S_j
K∏i=1nSj 。
朴素贝叶斯对条件概率分布做了各特征独立的假设。由于这是一个较强的假设,朴素贝叶斯也就由此得名。具体的,其假设内容为
P
(
X
=
x
∣
Y
=
c
k
)
=
P
(
X
(
1
)
=
x
(
1
)
,
…
,
X
(
n
)
=
x
(
n
)
∣
Y
=
c
k
)
=
∏
i
=
1
n
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
(
1
)
\begin{aligned} P(X=x|Y=c_k) & =P(X^{(1)}=x^{(1)},\ldots,X^{(n)}=x^{(n)}|Y=c_k) \\ & =\prod_{i=1}^{n}P(X^{(j)}=x{(j)}|Y=c_k) \qquad\qquad\qquad\qquad(\textbf{1}) \end{aligned}
P(X=x∣Y=ck)=P(X(1)=x(1),…,X(n)=x(n)∣Y=ck)=i=1∏nP(X(j)=x(j)∣Y=ck)(1)
朴素贝叶斯属于生成模型。由于做了各特征独立的假设,使得朴素贝叶斯法变得简单,但同时也就牺牲了一定得分类准确度。
朴素贝叶斯法进行分类时,对给定的输入的
x
x
x ,通过学习到的模型计算后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P(Y=c_k|X=x)
P(Y=ck∣X=x) ,将后验概率最大的类作为模型预测的输出,后验概率计算方法如下
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
∑
x
P
(
X
=
x
∣
Y
=
c
k
)
P
(
Y
=
c
k
)
(
2
)
P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\begin{matrix}\sum_xP(X=x|Y=c_k)P(Y=c_k) \end{matrix}} \qquad\qquad\qquad\qquad (\textbf{2})
P(Y=ck∣X=x)=∑xP(X=x∣Y=ck)P(Y=ck)P(X=x∣Y=ck)P(Y=ck)(2)
将式
(
1
)
(\textbf{1})
(1) 带入式
(
2
)
(\textbf{2})
(2) 有
P
(
Y
=
c
k
∣
X
=
x
)
=
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
k
=
1
,
2
,
…
,
K
P(Y=c_k|X=x)=\frac{P(Y=c_k)\prod_{j}P(X{(j)}=x{(j)|Y=c_k})}{\begin{matrix} \sum_kP(Y=c_k)\prod_jP(X{(j)}=x{(j)}|Y=c_k) \end{matrix}} k=1,2,\ldots,K
P(Y=ck∣X=x)=∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)k=1,2,…,K
于是朴素贝叶斯分类器可以表示为
y
=
f
(
x
)
=
arg
max
c
i
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
∑
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=f(x)=\arg \underset{c_i}{\max} \frac{P(Y=c_k)\prod_{j}P(X{(j)}=x{(j)|Y=c_k})}{\begin{matrix} \sum_kP(Y=c_k)\prod_jP(X{(j)}=x{(j)}|Y=c_k) \end{matrix}}
y=f(x)=argcimax∑kP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
注意到,分母中对所有
c
i
c_i
ci 都是相同的,所以,
y
=
arg
max
c
i
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y=\arg \underset{c_i}{\max}P(Y=c_k)\prod_{j}P(X{(j)}=x{(j)|Y=c_k})
y=argcimaxP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
2. 参数估计
在朴素贝叶斯法中,学习意味着估计
P
(
Y
=
c
k
)
、
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
P(Y=c_k)、P(X^{(j)}=x{(j)}|Y=c_k)
P(Y=ck)、P(X(j)=x(j)∣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,\ldots,K
P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,…,K
设第
j
j
j 个特征
x
(
j
)
x^{(j)}
x(j) 可能取值的范围为
{
a
j
1
,
a
j
2
,
…
,
a
j
s
j
}
\{a_{j1},a_{j2},\ldots,a_{js_j}\}
{aj1,aj2,…,ajsj} ,条件概率
P
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
P(X^{(j)}=a_{jl}|Y=c_k)
P(X(j)=ajl∣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
)
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)}
P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl,yi=ck)
j = 1 , 2 , … , n ; l = 1 , 2 , … , S j ; k = 1 , 2 , … , K j=1,2,\ldots,n;\quad l=1,2,\ldots,S_j; \quad k=1,2,\ldots,K j=1,2,…,n;l=1,2,…,Sj;k=1,2,…,K
式中, x i ( j ) x_i^{(j)} xi(j) 是第 i i i 个样本的第 j j j 个特征; a i l a_{il} ail 是第 j j j 个特征可能取的第 l l l 个值, I I I 为指示函数。
3. 算法描述
Input:
\textbf{Input:}
Input:
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)}
其中
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
…
,
x
i
(
n
)
)
T
x_i=(x_i^{(1)},x_i^{(2)},\ldots,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},\ldots,a_{js_j} \}
xi(j)∈{aj1,aj2,…,ajsj} ,
a
i
l
a_{il}
ail 是第
j
j
j 个特征可能取的第
l
l
l 个值
Output:
\textbf{Output:}
Output: 实例
x
x
x 的分类
- 计算先验概率以及条件概率
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,\ldots,K P(Y=ck)=N∑i=1NI(yi=ck),k=1,2,…,K
P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( X i ( j ) = a j l , Y = c k ) ∑ i = 1 N I ( y i = c k ) P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^{N}I(X_i^{(j)}=a_{jl},Y=c_k)}{\sum_{i=1}^{N}I(y_i=c_k)} P(X(j)=ajl∣Y=ck)=∑i=1NI(yi=ck)∑i=1NI(Xi(j)=ajl,Y=ck)
j = 1 , 2 , … , n ; l = 1 , 2 , … , S j ; k = 1 , 2 , … , K j=1,2,\ldots,n;\quad l=1,2,\ldots,S_j; \quad k=1,2,\ldots,K j=1,2,…,n;l=1,2,…,Sj;k=1,2,…,K
-
对于给定的实例 x = ( x ( 1 ) , x ( 2 ) , … , x ( n ) ) T x=(x^{(1)},x^{(2)},\ldots,x^{(n)})^T x=(x(1),x(2),…,x(n))T ,计算
P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) k = 1 , 2 , … , K P(Y=c_k)\prod_{j}P(X{(j)}=x{(j)|Y=c_k}) k=1,2,\ldots,K P(Y=ck)j∏P(X(j)=x(j)∣Y=ck)k=1,2,…,K -
确定实例 x x x 的类
y = arg max c i P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=\arg \underset{c_i}{\max}P(Y=c_k)\prod_{j}P(X{(j)}=x{(j)|Y=c_k}) y=argcimaxP(Y=ck)j∏P(X(j)=x(j)∣Y=ck)
4. 贝叶斯估计
用极大似然估计可能会出现估计值为 0 的情况,这时会影响到后验概率的计算结果,会使分类产生偏差,解决这一问题的方法是采用贝叶斯估计。具体先验概率和条件概率的贝叶斯估计值为
P
λ
(
Y
=
c
k
)
=
∑
i
=
1
N
I
(
y
i
=
c
k
)
+
λ
N
+
K
λ
P_\lambda(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
)
=
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_\lambda(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\ge 0
λ≥0 。等价于在随机变量各个取值上的频数上赋予一个正数
λ
>
0
\lambda>0
λ>0 。当
λ
=
0
\lambda=0
λ=0 时就是极大似然估计。常取
λ
=
1
\lambda=1
λ=1 ,这是称为拉普拉斯平滑。显然,对任何
l
=
1
,
2
,
…
,
S
j
,
k
=
1
,
2
,
…
,
K
l=1,2,\ldots,S_j,\quad k=1,2,\ldots,K
l=1,2,…,Sj,k=1,2,…,K ,有
P
λ
(
X
(
j
)
=
a
j
l
∣
Y
=
c
k
)
>
0
P_\lambda(X^{(j)}=a_{jl}|Y=c_k)>0
Pλ(X(j)=ajl∣Y=ck)>0
∑ i = 1 S j P λ ( X ( j ) = a j l ∣ Y = c k ) = 1 \sum_{i=1}^{S_j}P_\lambda(X^{(j)}=a_{jl}|Y=c_k)=1 i=1∑SjPλ(X(j)=ajl∣Y=ck)=1