朴素贝叶斯算法

朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法(与贝叶斯估计是不同的方概念),对于给定的训练数据集,首先基于特征条件独立假设学习输入和输出的联合概率分布;然后基于此模型,对于给定的输入 x x x ,利用贝叶斯定理求出后验概率最大的输出 y y y 。朴素贝叶斯方法实现简单,学习与预测的效率都很高,是一种常用的方法。

1. 基本方法

设输入空间 X ⊆ R n \mathcal{X}\subseteq\mathbf{R^n} XRn 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} xX ,输出为类标记 y ∈ Y y \in \mathcal{Y} yY 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=xY=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=xY=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 Ki=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=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=i=1nP(X(j)=x(j)Y=ck)(1)

朴素贝叶斯属于生成模型。由于做了各特征独立的假设,使得朴素贝叶斯法变得简单,但同时也就牺牲了一定得分类准确度。
朴素贝叶斯法进行分类时,对给定的输入的 x x x ,通过学习到的模型计算后验概率分布 P ( Y = c k ∣ X = x ) P(Y=c_k|X=x) P(Y=ckX=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=ckX=x)=xP(X=xY=ck)P(Y=ck)P(X=xY=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=ckX=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)=argcimaxkP(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)jP(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)=Ni=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)=ajlY=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)=ajlY=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 的分类

  1. 计算先验概率以及条件概率
    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)=Ni=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)=ajlY=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

  1. 对于给定的实例 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)jP(X(j)=x(j)Y=ck)k=1,2,,K

  2. 确定实例 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)jP(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)=ajlY=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)=ajlY=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=1SjPλ(X(j)=ajlY=ck)=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值