贝叶斯决策论是在概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。下面我们以多分类任务为例来解释其基本原理。
假设有 N N N种可能的类别标记,即 Y = { c 1 , c 2 , … , c N } , λ i j \mathcal{Y}=\left\{c_{1}, c_{2}, \ldots, c_{N}\right\}, \lambda_{i j} Y={c1,c2,…,cN},λij是将一个真实标记为 c j c_j cj的样本误分类为 c i c_i ci所产生的损失。基于后验概率 P ( c i ∣ x ) P(c_i|x) P(ci∣x)可获得将样本 x x x分类为 c i c_i ci所产生的期望损失,即在样本 x x x上的“条件风险”:
R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R\left(c_{i} \mid \boldsymbol{x}\right)=\sum_{j=1}^{N} \lambda_{i j} P\left(c_{j} \mid \boldsymbol{x}\right) R(ci∣x)=j=1∑NλijP(cj∣x)
我们的任务是寻找一个判别准则 h : X ↦ Y h: \mathcal{X} \mapsto \mathcal{Y} h:X↦Y以最小化总体风险:
R ( h ) = E x [ R ( h ( x ) ∣ x ) ] R(h)=\mathbb{E}_{\boldsymbol{x}}[R(h(\boldsymbol{x}) \mid \boldsymbol{x})] R(h)=Ex[R(h(x)∣x)]
显然,对每个样本 x x x,若 h h h能最小化条件风险 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)∣x),则总体风险 R ( h ) R(h) R(h)也将被最小化。这样就产生了贝叶斯判定准则:为最小化总体风险,只需在每个样本上选择那个能使条件风险 R ( c ∣ x ) R(c|x) R(c∣x)最小的类别标记,即
h ∗ ( x ) = arg min c ∈ Y R ( c ∣ x ) h^{*}(\boldsymbol{x})=\underset{c \in \mathcal{Y}}{\arg \min } R(c \mid \boldsymbol{x}) h∗(x)=c∈YargminR(c∣x)
此时, h ∗ h^* h∗称为贝叶斯最优分类器,与之对应的总体风险 R ( h ∗ ) R(h^*) R(h∗)称为贝叶斯风险。 1 − R ( h ∗ ) 1 - R(h^*) 1−R(h∗)反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。
具体来说,若目标是最小化分类错误率,则误判损失 λ i j \lambda_{i j} λij可以写为
λ i j = { 0 , if i = j 1 , otherwise \lambda_{i j}= \begin{cases}0, & \text { if } i=j \\ 1, & \text { otherwise }\end{cases} λij={0,1, if i=j otherwise
此时条件风险为
R ( c ∣ x ) = 1 − P ( c ∣ x ) R(c|x)=1-P(c|x) R(c∣x)=1−P(c∣x)
于是,最小化分类错误率的贝叶斯最优分类器为:
h ∗ ( x ) = arg max c ∈ Y P ( c ∣ x ) h^{*}(\boldsymbol{x})=\underset{c \in \mathcal{Y}}{\arg \max } P(c \mid \boldsymbol{x}) h∗(x)=c∈YargmaxP(c∣x)
即对每个样本 x x x,选择能使后验概率 P ( c ∣ x ) P(c|x) P(c∣x)最大的类别标记
想要使用贝叶斯判定准则来最小化决策风险,首先要获得后验概率 P ( c ∣ x ) P(c|x) P(c∣x)。然而,在现实任务中这通常难以直接获得。从这个角度来看,机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率 P ( c ∣ x ) P(c|x) P(c∣x)。大体来说,主要有两种策略:给定 x x x,可通过直接建模 P ( c ∣ x ) P(c|x) P(c∣x)来预测c,这样得到的是“判别式模型”;也可以先对联合概率分布 P ( x , c ) P(x,c) P(x,c)建模,然后再由此获得 P ( c ∣ x ) P(c|x) P(c∣x),这样得到的是“生成式模型”。
显然,前面介绍的决策树、BP神经网络、支持向量机等,都可纳入判别式模型的范畴。对生成式模型来说,必然考虑
P ( c ∣ x ) = P ( x , c ) P ( x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c \mid \boldsymbol{x})=\frac{P(\boldsymbol{x}, c)}{P(\boldsymbol{x})}=\frac{P(c)P(\boldsymbol{x}|c)}{P(\boldsymbol{x})} P(c∣x)=P(x)P(x,c)=P(x)P(c)P(x∣c)
其中, P ( c ) P(c) P(c)是类“先验”概率; P ( x ∣ c ) P(x|c) P(x∣c)是样本 x x x相对于类标记 c c c的类条件概率,或者称为“似然”; P ( x ) P(x) P(x)是用于归一化的“证据”因子。对给定样本 x x x,证据因子 P ( x ) P(x) P(x)与类标记无关,因此估计 P ( c ∣ x ) P(c|x) P(c∣x)的问题就转化为如何基于训练数据D来估计先验 P ( c ) P(c) P(c)和似然 P ( x ∣ c ) P(x|c) P(x∣c).
类先验概率 P ( c ) P(c) P(c)表达了样本空间中各类样本所占的比例,根据大数定律,当训练集包含充足的独立同分布样本时, P ( c ) P(c) P(c)可通过各类样本出现的频率来进行估计。
对类条件概率 P ( x ∣ c ) P(x|c) P(x∣c)来说,由于它涉及关于 x x x所有属性的联合概率,直接根据样本出现的频率来估计将会遇到严重的困难。例如,假设样本的 d d d个属性都是二值的,则样本空间将由 2 d 2^d 2d种可能的取值,在现实应用中,这个值往往远大于训练样本数 m m m,也就是说,很多样本取值在训练集中根本没有出现,直接使用频率来估计 P ( x ∣ c ) P(x|c) P(x∣c)显然不可行,因为“未被观测到”与“出现概率为零”通常是不同的。
估计类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。具体地,记关于类别 c c c的类条件概率为 P ( x ∣ c ) P(x|c) P(x∣c),假设 P ( x ∣ c ) P(x|c) P(x∣c)具有确定的形式并且被参数向量 θ c \theta_c θc唯一确定,则我们的任务就是利用训练集 D D D估计参数 θ c \theta_c θc。为明确起见,我们将 P ( x ∣ c ) P(x|c) P(x∣c)记为 P ( x ∣ θ c ) P(x|\theta_c) P(x∣θc)。
事实上,概率模型的训练过程就是参数估计过程。对于参数估计,统计学界的两个学派分别提供了不同的解决方案:频率主义学派认为参数虽然未知,但却是客观存在的固定值,因此,可通过优化似然函数等准则来确定参数值;贝叶斯学派则认为参数是未观察到的随机变量,其本身也可有分布,因此,可假定参数服从一个先验分布,然后基于观测到的数据来计算参数的后验分布。本节介绍源自频率主义学派的极大似然估计(ELM),这是根据数据采样来估计概率分布参数的经典方法。
令 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 ) P\left(D_{c} \mid \boldsymbol{\theta}_{c}\right)=\prod_{\boldsymbol{x} \in D_{c}} P\left(\boldsymbol{x} \mid \boldsymbol{\theta}_{c}\right) P(Dc∣θc)=x∈Dc∏P(x∣θc)
对 θ c \theta_c θc进行极大似然估计,就是去寻找能最大化似然 P ( D c ∣ θ c ) P\left(D_{c} \mid \boldsymbol{\theta}_{c}\right) P(Dc∣θc)的参数值 θ ^ c \hat{\boldsymbol{\theta}}_{c} θ^c.直观上看,极大似然估计是试图在 θ c \theta_c θc所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
上式的连乘操作容易造成下溢,通常使用对数似然:
L L ( θ c ) = log P ( D c ∣ θ c ) = ∑ x ∈ D c log P ( x ∣ θ c ) \begin{aligned} L L\left(\boldsymbol{\theta}_{c}\right) &=\log P\left(D_{c} \mid \boldsymbol{\theta}_{c}\right) \\ &=\sum_{\boldsymbol{x} \in D_{c}} \log P\left(\boldsymbol{x} \mid \boldsymbol{\theta}_{c}\right) \end{aligned} LL(θc)=logP(Dc∣θc)=x∈Dc∑logP(x∣θc)
此时参数 θ c \theta_c θc的极大似然估计 θ ^ c \hat{\boldsymbol{\theta}}_{c} θ^c为
θ ^ c = arg max θ c L L ( θ c ) \hat{\boldsymbol{\theta}}_{c}=\underset{\boldsymbol{\theta}_{c}}{\arg \max } L L\left(\boldsymbol{\theta}_{c}\right) θ^c=θcargmaxLL(θc)
需注意的是,这种参数化的方法虽能使类条件概率估计变得相对简单,但估计结果的准确性严重依赖所假设的概率分布形式是否符合潜在的真实数据分布。在现实应用中,欲做出能较好地接近潜在真实分布的假设,往往需在一定程度上利用关于应用任务本身的经验知识,否则若仅凭“猜测”来假设概率分布形式,很可能产生误导性的结果。
基于贝叶斯公式来估计后验概率 P ( c ∣ x ) P(c|x) P(c∣x)的主要困难在于:类条件概率 P ( x ∣ c ) P(x|c) P(x∣c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为了避开这个障碍,朴素贝叶斯分类器采用了“属性条件独立性假设”:对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。基于属性条件独立性假设可得:
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\left(x_{i} \mid c\right) 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在第 i i i个属性上的取值。
对所有类别来说 P ( x ) P(x) P(x)相同,于是,最小化分类错误率的贝叶斯最优分类器的贝叶斯判别准则有:
h n b ( x ) = arg max c ∈ Y P ( c ) ∏ i = 1 d P ( x i ∣ c ) h_{n b}(\boldsymbol{x})=\underset{c \in \mathcal{Y}}{\arg \max } P(c) \prod_{i=1}^{d} P\left(x_{i} \mid c\right) hnb(x)=c∈YargmaxP(c)i=1∏dP(xi∣c)
显然,朴素贝叶斯分类器的训练过程就是基于训练集 D D D来估计类先验概率 P ( c ) P(c) P(c),并为每个属性估计条件概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c).
令 D c D_c Dc表示训练集 D D D中第 c c c类样本组成的集合,若有充足的独立同分布样本,则可容易地估计出类先验概率:
P ( c ) = ∣ D c ∣ ∣ D ∣ P(c)=\frac{\left|D_{c}\right|}{|D|} P(c)=∣D∣∣Dc∣
对离散属性而言,令 D c , x i D_{c,x_i} Dc,xi表示 D c D_c Dc中第 i i i个属性上取值为 x i x_i xi的样本组成的集合,则条件概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c)可估计为
P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P\left(x_{i} \mid c\right)=\frac{\left|D_{c, x_{i}}\right|}{\left|D_{c}\right|} P(xi∣c)=∣Dc∣∣Dc,xi∣
对连续属性可考虑概率密度函数,假定 p ( x i ∣ c ) ∼ N ( μ c , i , σ c , i 2 ) p\left(x_{i} \mid c\right) \sim \mathcal{N}\left(\mu_{c, i}, \sigma_{c, i}^{2}\right) p(xi∣c)∼N(μc,i,σc,i2),其中 μ c , i \mu_{c, i} μc,i和 σ c , i 2 \sigma_{c, i}^{2} σc,i2分别是第 c c c类样本在第 i i i个属性上取值的均值和方差,则有
p ( x i ∣ c ) = 1 2 π σ c , i exp ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) p\left(x_{i} \mid c\right)=\frac{1}{\sqrt{2 \pi} \sigma_{c, i}} \exp \left(-\frac{\left(x_{i}-\mu_{c, i}\right)^{2}}{2 \sigma_{c, i}^{2}}\right) p(xi∣c)=2πσc,i1exp(−2σc,i2(xi−μc,i)2)
下面我们以西瓜数据集3.0训练一个朴素贝叶斯分类器。
对以下测试例子进行分类:
首先估计类先验概率 P ( c ) P(c) P(c),显然有
然后,为每个属性估计条件概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c):
于是,有
由于 0.038 > 6.80 × 1 0 − 5 0.038>6.80×10^{-5} 0.038>6.80×10−5,因此,朴素贝叶斯分类器将测试样本判别为“好瓜”。
需要注意,若某个属性值在训练集中没有与某个类同时出现过,则直接按上述方法将会出现问题。例如,在使用西瓜数据集3.0训练朴素贝叶斯分类器时,对一个“敲声=清脆”的测试例,有
P 清脆|是 = P ( 敲声 = 清脆 ∣ 好瓜 = 是 ) = 0 8 = 0 P_{\text {清脆|是 }}=P(\text { 敲声 }=\text { 清脆 } \mid \text { 好瓜 }=\text { 是 })=\frac{0}{8}=0 P清脆|是 =P( 敲声 = 清脆 ∣ 好瓜 = 是 )=80=0
则连城式计算出来的概率也为零,因此,无论该样本的其他属性是什么,哪怕在其他属性上明显像好瓜,分类的结果都将是“好瓜=否”,这显然不太合理。
为了避免其他属性携带的信息被训练集中未出现的属性值“抹去”,在估计概率值时通常需要进行“平滑”,常用“拉普拉斯修正”。具体来说,令 N N N表示训练集 D D D中可能的类别数, N i N_i Ni表示第 i i i个属性可能的取值数,修正得:
P ^ ( c ) = ∣ D c ∣ + 1 ∣ D ∣ + N P ^ ( x i ∣ c ) = ∣ D c , x i ∣ + 1 ∣ D c ∣ + N i \begin{aligned} \hat{P}(c) &=\frac{\left|D_{c}\right|+1}{|D|+N} \\ \hat{P}\left(x_{i} \mid 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
例如,在本节的例子中,类先验概率可估计为
P ^ ( 好瓜 = 是 ) = 8 + 1 17 + 2 ≈ 0.474 , P ^ ( 好瓜 = 否 ) = 9 + 1 17 + 2 ≈ 0.526 \hat{P}(\text { 好瓜 }=\text { 是 })=\frac{8+1}{17+2} \approx 0.474, \quad \hat{P}(\text { 好瓜 }=\text { 否 })=\frac{9+1}{17+2} \approx 0.526 P^( 好瓜 = 是 )=17+28+1≈0.474,P^( 好瓜 = 否 )=17+29+1≈0.526
类似得, P ^ 青绿|是 \hat{P}_{\text {青绿|是 }} P^青绿|是 和 P ^ 青绿|否 \hat{P}_{\text {青绿|否 }} P^青绿|否 可估计为
P ^ 青绿|是 = P ^ ( 色泽 = 青绿 ∣ 好瓜 = 是 ) = 3 + 1 8 + 3 ≈ 0.364 \hat{P}_{\text {青绿|是 }}=\hat{P}(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 是 })=\frac{3+1}{8+3} \approx 0.364 P^青绿|是 =P^( 色泽 = 青绿 ∣ 好瓜 = 是 )=8+33+1≈0.364
P ^ 青绿|否 = P ^ ( 色泽 = 青绿 ∣ 好瓜 = 否 ) = 3 + 1 9 + 3 ≈ 0.333 \hat{P}_{\text {青绿|否 }}=\hat{P}(\text { 色泽 }=\text { 青绿 } \mid \text { 好瓜 }=\text { 否 })=\frac{3+1}{9+3} \approx 0.333 P^青绿|否 =P^( 色泽 = 青绿 ∣ 好瓜 = 否 )=9+33+1≈0.333
同时,上文提到的概率 P 清 脆 ∣ 是 P_{清脆|是} P清脆∣是可估计为
P ^ 清脆|是 = P ^ ( 敲声 = 清脆 ∣ 好瓜 = 是 ) = 0 + 1 8 + 3 ≈ 0.091 \hat{P}_{\text {清脆|是 }}=\hat{P}(\text { 敲声 }=\text { 清脆 } \mid \text { 好瓜 }=\text { 是 })=\frac{0+1}{8+3} \approx 0.091 P^清脆|是 =P^( 敲声 = 清脆 ∣ 好瓜 = 是 )=8+30+1≈0.091
显然,拉普拉斯修正避免了因训练集样本不充分而导致概率估值为零的问题,并且在训练集变大时,修正过程所引入的先验的影响也会逐渐变得可忽略,使得估值逐渐趋向于实际概率值。拉普拉斯修正实质上假设了属性值与类别均匀分布,这是在朴素贝叶斯学习过程中额外引入的关于数据的先验。
为了降低估计后验概率 P ( c ∣ x ) P(c|x) P(c∣x)的困难,朴素贝叶斯分类器采用了属性条件独立性假设,但在现实任务中这个假设往往很难成立。于是,人们尝试对属性条件独立性假设进行一定程度的放松,由此产生了一类称为“半朴素贝叶斯分类器”的学习方法。
半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息,从而既不徐进行完全联合概率计算,又不至于彻底忽略了比较强的属性依赖关系。“独依赖估计”是半朴素贝叶斯分类器最常见的一种策略。顾名思义,所谓“独依赖”就是假设每个属性在类别之外最多仅依赖于一个其他属性,即
P ( c ∣ x ) ∝ P ( c ) ∏ i = 1 d P ( x i ∣ c , p a i ) P(c \mid \boldsymbol{x}) \propto P(c) \prod_{i=1}^{d} P\left(x_{i} \mid c, p a_{i}\right) P(c∣x)∝P(c)i=1∏dP(xi∣c,pai)
其中 p a i p a_{i} pai为属性 x i x_i xi所依赖的属性,称为 x i x_i xi的父属性。此时,对每个属性 x i x_i xi,若其父属性 p a i p a_{i} pai已知,则可采用类似拉普拉斯修正的办法来估计概率值 P ( x i ∣ c , p a i ) P\left(x_{i} \mid c, p a_{i}\right) P(xi∣c,pai)。于是,问题的关键就转化为如何确定每个属性的父属性,不同的做法产生不同的独依赖分类器。