朴素贝叶斯学习算法原理

要了解朴素贝叶斯学习算法,我们先从贝叶斯决策论说起。

贝叶斯决策论

贝叶斯决策论是一种在概率框架下实施决策的基本方法,通过概率计算来训练学习模型,其基本思想非常简单。
具体来说,假设有N种可能的类别标记,即 Y={c1,c2,c3,,cN} Y = { c 1 , c 2 , c 3 , … , c N } λij λ i j 是一个将真实标记为 cj c j 的样本误标记为 ci c i 所产生的损失,基于后验概率 P(ci|x⃗ ) P ( c i | x → ) 可获得将样本 x⃗  x → 分类为 ci c i 所产生的期望损失,即在样本 x⃗  x → 上产生的“风险条件”:

R(ci|x⃗ )=j=1NλijP(cj|x⃗ ) R ( c i | x → ) = ∑ j = 1 N λ i j P ( c j | x → )

我们的任务是,找到一个判断准则 h:XY h : X → Y 以最小化总体风险。


贝叶斯判断准则:为最小化总体风险,只需要在每个样本上选择那个能使条件风险 R(c|x⃗ ) R ( c | x → ) 最小的标记类别,即

h(x⃗ )=argmincYR(c|x⃗ ) h ∗ ( x → ) = a r g m i n c ∈ Y R ( c | x → )
此时,称 h h ∗ 为贝叶斯最优分类器。


若目标是最小化分类错误率,则误判损失 λij λ i j 可写为:

λij={01i=jij λ i j = { 0 i = j 1 i ≠ j

此时,条件风险为 R(c|x⃗ )=1P(c|x⃗ ) R ( c | x → ) = 1 − P ( c | x → ) ,于是,最小化分类错误率的贝叶斯最优分类器为
h(x⃗ )=argmaxcYP(c|x⃗ ) h ∗ ( x → ) = a r g m a x c ∈ Y P ( c | x → )

即对每个样本 x⃗  x → ,选择能使后验概率 P(c|x⃗ ) P ( c | x → ) 最大的标记类别。
基于贝叶斯定理, P(c|x⃗ ) P ( c | x → ) 可写为
P(c|x⃗ )=P(x⃗ ,c)P(x⃗ )=P(c)P(x⃗ |c)P(x⃗ ) P ( c | x → ) = P ( x → , c ) P ( x → ) = P ( c ) P ( x → | c ) P ( x → )
其中, P(c) P ( c ) 是类先验概率, P(x⃗ |c) P ( x → | c ) 是样本 x⃗  x → 相对于类标记c的类条件概率,或称为“似然”, P(x⃗ ) P ( x → ) 是用于归一化的“证据”因子。此时,则有
h(x⃗ )=argmaxcYP(c|x⃗ )=argmaxcYP(c)P(x⃗ |c)P(x⃗ ) h ∗ ( x → ) = a r g m a x c ∈ Y P ( c | x → ) = a r g m a x c ∈ Y P ( c ) P ( x → | c ) P ( x → )

可以看出,对于一个特定的样本 x⃗  x → ,其分类结果只与 P(c) P ( c ) P(x⃗ |c) P ( x → | c ) 有关,此时问题便转化为通过训练集求出 P(c) P ( c ) P(x⃗ |c) P ( x → | c ) ,不同的求法便产生了不同的学习算法。

朴素贝叶斯

  • 对于类先验概率 P(c) P ( c ) ,直观上可以通过
    P(c)=|Dc||D| P ( c ) = | D c | | D |
    来求。
  • 对于样本 x⃗  x → 的类条件概率 P(x⃗ |c) P ( x → | c ) ,由于类条件概率 P(x⃗ |c) P ( x → | c ) 是所有属性上的联合概率,当样本维度增加时,计算复杂度呈指数级增长,同时也难以从有限的训练样本直接估计得出。

因此,朴素贝叶斯分类器采用属性条件独立性假设:对已知类别,假设所有属性相互独立。在此假设下,

P(c|x⃗ =P(c)P(x⃗ |c)Px⃗ =P(c)P(x⃗ )i=1dP(xi|c) P ( c | x → ) = P ( c ) P ( x → | c ) P x → = P ( c ) P ( x → ) ∏ i = 1 d P ( x i | c )
其中,d为属性数目, xi x i x⃗  x → 在第i个属性上的取值。
此时,朴素贝叶斯分类器的表达式为
hnb(x⃗ )=argmaxcYP(c)i=1dP(xi|c) h n b ( x → ) = a r g m a x c ∈ Y P ( c ) ∏ i = 1 d P ( x i | c )
显然,朴素贝叶斯分类器的训练过程就是基于训练集D来估计先验概率P(c),并为每个属性估计条件概率 P(xi|c) P ( x i | c )

注意事项

  • 在具体问题中,很有可能出现 P(xi|c)=0 P ( x i | c ) = 0 的情形,此时,便得到 P(c)di=1P(xi|c)=0 P ( c ) ∏ i = 1 d P ( x i | c ) = 0 ,显然,属性 xi x i 中未出现的属性值抹去了其他属性携带的信息,这是不合理的,因此常用“拉普拉斯修正”进行改进。令N表示训练集D中可能的类别数, Ni N i 表示第i个属性可能的取值数,则有
    P^(c)=|Dc|+1|D|+N P ^ ( c ) = | D c | + 1 | D | + N
    P^(xi|c)=|Dc,xi|+1|Dc|+Ni P ^ ( x i | c ) = | D c , x i | + 1 | D c | + N i
    “拉普拉斯修正”实质上假设了属性值与类别均匀分布。
  • 可以看到,结果是一个连乘公式,且对于任意 1id 1 ≤ i ≤ d ,均有 P(xi|c)(0,1] P ( x i | c ) ∈ ( 0 , 1 ] ,当 d d 较大时,结果可能出现溢出。因此,常对其取log进行运算,公式变为
    logP(c|x⃗ )=logP(c)logP(x⃗ )+i=1dlogP(xi|c) log ⁡ P ( c | x → ) = log ⁡ P ( c ) − l o g P ( x → ) + ∑ i = 1 d log ⁡ P ( x i | c )

    hnb(x⃗ )=argmaxcYlogP(c)+i=1dlogP(xi|c) h n b ( x → ) = a r g m a x c ∈ Y ( log ⁡ P ( c ) + ∑ i = 1 d log ⁡ P ( x i | c ) )

理论结合实践。为此,我编写了朴素贝叶斯方法的垃圾邮件分类器,适合初学者使用。

你可能感兴趣的:(机器学习)