前言
最近几天晃晃荡荡的,时不时来图书馆学习周志华老师的机器学习西瓜书,看到第七章贝叶斯分类器感觉很有意思,在此站搜索了一下发现了几篇优秀博文,忍不住说一句:写的真TM好哈哈哈,我想总结总结来加深这一部分的学习。文中的一些解释都基于西瓜数据集。
贝叶斯决策论
首先我们需要了解一下贝叶斯分类的定义:贝叶斯分类是以贝叶斯定理为基础的一种分类算法,其主要思想为:先验概率+新的数据=后验概率 已知某条件概率,如何得到事件交换后的概率;即在已知P(B|A)的情况下求得P(A|B)。**条件概率P(B|A)表示事件A已经发生的前提下,事件B发生的概率。**其基本求解公式为:
P
(
B
∣
A
)
=
P
(
A
B
)
/
P
(
A
)
P(B|A)=P(AB)/P(A)
P(B∣A)=P(AB)/P(A)。这样说简洁明了但是好像又有些许简单,那就从贝叶斯决策说起吧。
贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记,下面我们以多分类任务为例来解释其基本原理:假设有
N
N
N种可能的类别标记,即
Y
=
{
c
1
,
c
2
,
…
,
c
N
}
,
λ
i
j
\mathcal{Y}=\{c_{1},c_{2},\ldots,c_{N}\},\lambda_{ij}
Y={c1,c2,…,cN},λij将一个真实标记为
c
j
c_j
cj的样本误分类为
c
i
c_i
ci所产生的损失。基于后验概率
P
(
c
i
∣
x
)
P(c_{i}\mid\boldsymbol{x})
P(ci∣x)可获得将样本
x
\boldsymbol{x}
x分类为
c
i
c_i
ci所产生的期望损失,即在样本
x
\boldsymbol{x}
x上的条件风险:
R
(
c
i
∣
x
)
=
∑
j
=
1
N
λ
i
j
P
(
c
j
∣
x
)
R(c_{i}\mid\boldsymbol{x})=\sum_{j=1}^{N}\lambda_{ij}P(c_{j}\mid\boldsymbol{x})
R(ci∣x)=∑j=1NλijP(cj∣x).
我们的任务是寻找一个判定准则
h
:
X
↦
Y
h:\mathcal{X}\mapsto \mathcal{Y}
h:X↦Y以最小化总体风险
R
(
h
)
=
E
x
[
R
(
h
(
x
)
∣
x
)
]
(
1
)
R\left(h\right)=\mathbb{E}_{x}\left[R\left(h\left(x\right)\mid x\right)\right]\quad(1)
R(h)=Ex[R(h(x)∣x)](1)显然,对每个样本
x
\boldsymbol{x}
x,若
h
h
h能最小化条件风险
R
(
h
(
x
)
∣
x
)
R\left(h\left(x\right)\mid x\right)
R(h(x)∣x),则总体风险
R
(
h
)
R(h)
R(h)也将被最小化。这就产生了贝叶斯判定准则(Bayes decision rule):为最小化总体风险,只需在每个样本上选择那个能使条件风险
R
(
c
∣
x
)
R(c\mid\boldsymbol{x})
R(c∣x)最小的类别标记,即
h
∗
(
x
)
=
arg
min
c
∈
Y
R
(
c
∣
x
)
h^{*}\left(x\right)=\arg\min_{c\in Y}R\left(c\mid x\right)
h∗(x)=argminc∈YR(c∣x).
此时,
h
∗
h^{*}
h∗ 称为贝叶斯最优分类器(Bayes optimal classifer),与之对应的总体风险
R
(
h
∗
)
R(h^{*})
R(h∗)称为贝叶斯风险(Bayes risk)。
1
−
R
(
h
∗
)
1-R(h^{*})
1−R(h∗)反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。
一些解释:后验概率:
P
(
c
i
∣
x
)
P(c_{i}\mid\boldsymbol{x})
P(ci∣x),其中
c
i
c_{i}
ci是我们需要判断的类别,比如说好瓜、坏瓜;
x
\boldsymbol{x}
x是属性(自变量),比如说色泽青绿、根蒂蜷缩等等,这个概率表示的是具有某些属性的条件下属于
c
i
c_i
ci类,在现实任务中通常难以获得,机器学习所要实现的就是基于有限的训练样本尽可能准确的计算出后验概率,主要有两种策略,一种称为“判别式模型”,直接建模后验概率预测
c
c
c,包括决策树、BP神经网络、支持向量机等,另一种对联合概率分布
P
(
x
,
c
)
P(\boldsymbol{x},c)
P(x,c)建模,由此获得后验概率。
基于贝叶斯定理,
P
(
c
∣
x
)
P(c\mid\boldsymbol{x})
P(c∣x)可写为
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
(
2
)
P(c\mid\boldsymbol{x})=\frac{P(c)P(\boldsymbol{x}\mid c)}{P(\boldsymbol{x})}\quad(2)
P(c∣x)=P(x)P(c)P(x∣c)(2)其中,
P
(
c
)
P(c)
P(c)是类“先验”概率;
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c)是样本
x
\boldsymbol{x}
x相对于类标记
c
c
c的条件概率;
P
(
x
)
P(x)
P(x)是用于归一化的"证据"因子。对给定样本
x
\boldsymbol{x}
x,证据因子
P
(
x
)
P(x)
P(x)与类标记无关,因此估计
P
(
c
∣
x
)
P(c\mid\boldsymbol{x})
P(c∣x)的问题就转化为如何基于训练数据
D
D
D来估计先验
P
(
c
)
P(c)
P(c)和
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c)。
对于类先验概率
P
(
c
)
P(c)
P(c),训练集包含充足的独立同分布样本时,可以通过频率估计概率;对于类条件概率
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c),涉及关于
x
\boldsymbol{x}
x所有属性的联合概率,假设样本的
d
d
d个属性都是二值的,则样本空间的将有
2
d
2^d
2d种可能的取值,这个值往往远大于训练样本数,“未被观测到”与“出现概率为0”通常是不同的。这个问题在参考2中的脱单问题中展现,很有意思。
贝叶斯学习与极大似然估计
接着上边的问题,类条件概率
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c)的一种常用策略是假定其具有某种确定的概率分布形式,再基于训练样本对概率分布进行参数估计,我们的任务就转化为利用训练集
D
D
D估计参数
Θ
c
\Theta_c
Θc,为明确起见,我们将
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c)记为
P
(
x
∣
Θ
c
)
P(\boldsymbol{x}\mid \Theta_c)
P(x∣Θc)。
统计学界的两个学派提供了不同的解决方案:频率主义学派认为虽然参数未知但是它是客观存在的固定值,因此可以通过优化似然函数等准则确定参数值;贝叶斯学派认为参数是随机变量,其本身也可以有分布。有关似然估计的内容可以看一下参考2的这篇博客。
令
D
c
D_{c}
Dc表示训练集
D
D
D中第
c
c
c类样本组成的集合,假设这些样本是独立同分布的,则参数
θ
c
\theta_{c}
θc对于数据集
D
c
D_{c}
Dc的似然是
P
(
D
c
∣
θ
c
)
=
∏
x
∈
D
c
P
(
x
∣
θ
c
)
(
3
)
P(D_{c}\mid\theta_{c})=\prod_{x\in D_{c}}P(x\mid\theta_{c})\quad(3)
P(Dc∣θc)=x∈Dc∏P(x∣θc)(3)当然连乘操作导致最终的结果可能非常接近0,甚至最后一位非零位数超出了机器显示位数,称为下溢,通常使用对数似然:
L
L
(
θ
c
)
=
log
P
(
D
c
∣
θ
c
)
=
∑
x
∈
D
c
log
P
(
x
∣
θ
c
)
\begin{aligned} LL(\boldsymbol{\theta}_{c})& =\log P(D_{c}\mid\boldsymbol{\theta}_{c}) =\sum_{x\in D_{c}}\log P(x\mid\theta_{c}) \end{aligned}
LL(θc)=logP(Dc∣θc)=x∈Dc∑logP(x∣θc)此时参数的极大似然估计为
θ
^
c
=
arg
max
θ
c
L
L
(
θ
c
)
.
\hat{\theta}_{c}=\arg\max_{\theta_{c}}LL(\theta_{c}).
θ^c=argmaxθcLL(θc).
需注意的是,这种参数化的方法虽能使类条件概率估计变得相对简单,但是估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布、在现实应用中,欲做出能较好地接近潜在真实分布的假设,往往需在一定程度上利用关于应用任务本身的经验知识,否则若仅凭“猜测”来假设概率分布形式,很可能产生误导性的结果。
朴素贝叶斯分类器
不难发现,基于贝叶斯公式(2)来估计后验概率
P
(
c
∣
x
)
P(c\mid\boldsymbol{x})
P(c∣x)的主要困难在于类条件概率
P
(
x
∣
c
)
P(\boldsymbol{x}\mid c)
P(x∣c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。基于有限训练样本直接估计联合概率,在计算上将会遭遇组合爆炸问题,在数据上将会遭遇样本稀疏问题;属性数越多,问题越严重。为避开这个障碍,朴素贝叶斯分类器采用了“属性条件独立性假设”:对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。
基于属性条件独立性假设,式(2)中的后验概率
P
(
c
∣
x
)
P(c\mid\boldsymbol{x})
P(c∣x)可以写为:
P
(
c
∣
x
)
=
P
(
c
)
P
(
x
∣
c
)
P
(
x
)
=
P
(
c
)
P
(
x
)
∏
i
=
1
d
P
(
x
i
∣
c
)
P(c\mid\boldsymbol{x})=\frac{P(c) P(\boldsymbol{x}\mid c)}{P(\boldsymbol{x})}=\frac{P(c)}{P(\boldsymbol{x})}\prod_{i=1}^{d}P(x_{i}\mid c)
P(c∣x)=P(x)P(c)P(x∣c)=P(x)P(c)i=1∏dP(xi∣c)其中
d
d
d为属性数目,
x
i
x_i
xi为
x
\boldsymbol{x}
x在第
i
i
i个属性上的取值。
对于所有类别来说,
P
(
x
)
P(\boldsymbol{x})
P(x)相同,此时朴素贝叶斯分类器的表达式为:
h
n
b
(
x
)
=
arg
max
c
∈
Y
P
(
c
)
∏
i
=
1
d
P
(
x
i
∣
c
)
h_{nb}(x)=\arg\max_{c\in\mathcal{Y}}P(c)\prod_{i=1}^{d}P(x_{i}\mid c)
hnb(x)=argc∈YmaxP(c)i=1∏dP(xi∣c)对于类先验概率
P
(
c
)
P(c)
P(c)、每个属性估计条件概率
P
(
x
i
∣
c
)
P(x_{i}\mid c)
P(xi∣c)书中都有介绍,包括连续属性和离散属性。
P
(
c
)
=
∣
D
c
∣
∣
D
∣
P(c)=\frac{|D_{c}|}{|D|}
P(c)=∣D∣∣Dc∣
P
(
x
i
∣
c
)
=
∣
D
c
,
x
i
∣
∣
D
c
∣
P(x_{i}\mid c)=\frac{|D_{c,x_{i}}|}{|D_{c}|}
P(xi∣c)=∣Dc∣∣Dc,xi∣
D
c
D_c
Dc表示训练集
D
D
D中第
c
c
c类样本组成的集合,令
D
c
,
x
i
D_{c,x_i}
Dc,xi 表示
D
c
D_c
Dc中在第
i
i
i个属性上取值为
x
i
x_i
xi的样本组成的集合。
拉普拉斯修正
若某个属性值在训练集中没有与某个类同时出现过,则以频率作为概率估计导致连乘后的朴素贝叶斯表达式为0,比如西瓜数据集中3.0中敲声清脆出现两次但是都是坏瓜,即:
P
清脆
∣
是
=
P
(
敲声
=
清脆
∣
好瓜
=
是
)
=
0
P_{\text{清脆}|\text{是}}=P(\text{敲声}=\text{清脆}|\text{好瓜}=\text{是})=0
P清脆∣是=P(敲声=清脆∣好瓜=是)=0因此无论该样本的其他属性是什么,哪怕在其他属性上明显像好瓜,分类结果都是坏瓜,这显然不太合理。
为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常进行拉普拉斯修正,具体来说对类先验概率
P
(
c
)
P(c)
P(c)、每个属性估计条件概率
P
(
x
i
∣
c
)
P(x_{i}\mid c)
P(xi∣c)修正为:
P
^
(
c
)
=
∣
D
c
∣
+
1
∣
D
∣
+
N
P
^
(
x
i
∣
c
)
=
∣
D
c
,
x
i
∣
+
1
∣
D
c
∣
+
N
i
\begin{aligned} \hat{P}\left(c\right)& =\frac{\left|D_{c}\right|+1}{\left|D\right|+N}\\ \hat{P}\left(x_{i}|c\right)& =\frac{\left|D_{c,x_{i}}\right|+1}{\left|D_{c}\right|+N_{i}} \end{aligned}
P^(c)P^(xi∣c)=∣D∣+N∣Dc∣+1=∣Dc∣+Ni∣Dc,xi∣+1具体来说,令
N
N
N表示训练集
D
D
D中可能的类别数,也就是好瓜坏瓜两类,
N
i
N_i
Ni 表示第
i
i
i个属性可能的取值数。
D
c
D_c
Dc表示训练集
D
D
D中第
c
c
c类样本组成的集合,令
D
c
,
x
i
D_{c,x_i}
Dc,xi 表示
D
c
D_c
Dc中在第
i
i
i个属性上取值为
x
i
x_i
xi的样本组成的集合,这个问题在参考5中也有详细提到。
总结
后续的内容还有半朴素贝叶斯分类器、ADOE、贝叶斯网等内容,也是对朴素贝叶斯分类器的进一步优化,在参考5中也有说明朴素贝叶斯分类器的优缺点,使用步骤等等,非常不错,这篇就写到这里吧。
参考
1、《机器学习》——周志华
2、机器学习之朴素贝叶斯分类器原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)
3、极大似然估计(Maximum likelihood estimation)
4、机器学习-贝叶斯分类器(附Python代码)
5、【海量数据挖掘/数据分析】 之 贝叶斯分类算法(朴素贝叶斯分类、贝叶斯分类计算流程、拉普拉斯修正、贝叶斯分类实例计算)