要了解朴素贝叶斯学习算法,我们先从贝叶斯决策论说起。
贝叶斯决策论
贝叶斯决策论是一种在概率框架下实施决策的基本方法,通过概率计算来训练学习模型,其基本思想非常简单。
具体来说,假设有N种可能的类别标记,即
Y={c1,c2,c3,…,cN}
,
λij
是一个将真实标记为
cj
的样本误标记为
ci
所产生的损失,基于后验概率
P(ci|x⃗ )
可获得将样本
x⃗
分类为
ci
所产生的期望损失,即在样本
x⃗
上产生的“风险条件”:
R(ci|x⃗ )=∑j=1NλijP(cj|x⃗ )
我们的任务是,找到一个判断准则
h:X→Y
以最小化总体风险。
贝叶斯判断准则:为最小化总体风险,只需要在每个样本上选择那个能使条件风险
R(c|x⃗ )
最小的标记类别,即
h∗(x⃗ )=argminc∈YR(c|x⃗ )
此时,称
h∗
为贝叶斯最优分类器。
若目标是最小化分类错误率,则误判损失
λij
可写为:
λij={01i=ji≠j
此时,条件风险为
R(c|x⃗ )=1−P(c|x⃗ )
,于是,最小化分类错误率的贝叶斯最优分类器为
h∗(x⃗ )=argmaxc∈YP(c|x⃗ )
即对每个样本
x⃗
,选择能使后验概率
P(c|x⃗ )
最大的标记类别。
基于贝叶斯定理,
P(c|x⃗ )
可写为
P(c|x⃗ )=P(x⃗ ,c)P(x⃗ )=P(c)P(x⃗ |c)P(x⃗ )
其中,
P(c)
是类先验概率,
P(x⃗ |c)
是样本
x⃗
相对于类标记c的类条件概率,或称为“似然”,
P(x⃗ )
是用于归一化的“证据”因子。此时,则有
h∗(x⃗ )=argmaxc∈YP(c|x⃗ )=argmaxc∈YP(c)P(x⃗ |c)P(x⃗ )
可以看出,对于一个特定的样本
x⃗
,其分类结果只与
P(c)
和
P(x⃗ |c)
有关,此时问题便转化为通过训练集求出
P(c)
和
P(x⃗ |c)
,不同的求法便产生了不同的学习算法。
朴素贝叶斯
因此,朴素贝叶斯分类器采用属性条件独立性假设:对已知类别,假设所有属性相互独立。在此假设下,
P(c|x⃗ )=P(c)P(x⃗ |c)Px⃗ =P(c)P(x⃗ )∏i=1dP(xi|c)
其中,d为属性数目,
xi
为
x⃗
在第i个属性上的取值。
此时,朴素贝叶斯分类器的表达式为
hnb(x⃗ )=argmaxc∈YP(c)∏i=1dP(xi|c)
显然,朴素贝叶斯分类器的训练过程就是基于训练集D来估计先验概率P(c),并为每个属性估计条件概率
P(xi|c)
。
注意事项
- 在具体问题中,很有可能出现
P(xi|c)=0
的情形,此时,便得到
P(c)∏di=1P(xi|c)=0
,显然,属性
xi
中未出现的属性值抹去了其他属性携带的信息,这是不合理的,因此常用“拉普拉斯修正”进行改进。令N表示训练集D中可能的类别数,
Ni
表示第i个属性可能的取值数,则有
P^(c)=|Dc|+1|D|+N
P^(xi|c)=|Dc,xi|+1|Dc|+Ni
“拉普拉斯修正”实质上假设了属性值与类别均匀分布。
- 可以看到,结果是一个连乘公式,且对于任意
1≤i≤d
,均有
P(xi|c)∈(0,1]
,当
d
较大时,结果可能出现溢出。因此,常对其取log进行运算,公式变为
logP(c|x⃗ )=logP(c)−logP(x⃗ )+∑i=1dlogP(xi|c)
hnb(x⃗ )=argmaxc∈Y(logP(c)+∑i=1dlogP(xi|c))
理论结合实践。为此,我编写了朴素贝叶斯方法的垃圾邮件分类器,适合初学者使用。