机器学习系列 13:贝叶斯分类 01 - 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器

  本内容将介绍 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器。在下一篇中介绍 贝叶斯网络

  贝叶斯分类 是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

  阅读本内容时,需要具备一定的概率论和统计学知识。在 这里 介绍了相关知识点,您可以先简单阅览一下;也可以直接阅读本内容,当遇到不了解的知识点时,再进行了解。

1.1 贝叶斯定理

  在概率论与统计学中,贝叶斯定理(Bayes Theorem,也称为贝叶斯法则)描述一个事件的概率,基于可能与该事件相关的条件的先验知识。

  贝叶斯定理可以使用以下数学公式描述

(1.1) P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A|B) = \frac{P(A)P(B|A)}{P(B)} \tag{1.1} P(AB)=P(B)P(A)P(BA)(1.1)

对上面公式中的各个概率说明如下:

  • P ( A ∣ B ) P(A|B) P(AB) 是已知 B B B 发生后 A A A 的条件概率,也由于得自 B B B 的取值而被称为 A A A 的后验概率。

  • P ( A ) P(A) P(A) A ​ A​ A 的先验概率或边缘概率。

  • P ( B ∣ A ) P(B|A) P(BA) 是已知 A A A 发生后 B B B 的条件概率,也称为 B B B 的后验概率和似然概率。

  • P ( B ) P(B) P(B) B ​ B​ B 的先验概率或边缘概率。

按这些术语,贝叶斯定理可表述为

后验概率 = (似然度 * 先验概率) / 标准化常量

也就是说,后验概率与先验概率和似然度的乘积成正比。

  另外,有时将 P ( B ∣ A ) / P ( B ) P(B|A) / P(B) P(BA)/P(B) 称为标准似然度,贝叶斯定理可表述为

后验概率 = 标准似然度 * 先验概率

1.2 贝叶斯决策论

  贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。对分类任务来说,在所有概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记

  假设有 K ​ K​ K 种可能的类别标记,即 Y = { c 1 , c 2 , ⋯   , c K } ​ \mathcal{Y} = \{ c_1,c_2,\cdots,c_K \}​ Y={c1,c2,,cK} λ i j ​ \lambda_{ij}​ λij 表示将一个真实标记为 c j ​ c_j​ cj 的样本误分类为 c i ​ c_i​ ci 所产生的损失。基于后验概率 P ( c i ∣ x ) ​ P(c_i | \mathbf{x})​ P(cix) 可获得将样本 x ​ \mathbf{x}​ x 分类为 c i ​ c_i​ ci 所产生的期望损失,即在样本 x ​ \mathbf{x}​ x 上的“条件风险”

(1.2) R ( c i ∣ x ) = ∑ j = 1 K λ i j P ( c j ∣ x ) R(c_i | \mathbf{x}) = \sum_{j=1}^{K} \lambda_{ij} P(c_j | \mathbf{x}) \tag{1.2} R(cix)=j=1KλijP(cjx)(1.2)

我们的任务是寻找一个判定准则 f : X → Y ​ f:\mathcal{X} \rightarrow \mathcal{Y}​ f:XY 以最小化总体风险

(1.3) R ( f ) = E x [ R ( f ( x )    ∣    x ) ] R(f) = \mathbb{E}_{\mathbf{x}} [R(f(\mathbf{x}) \; | \; \mathbf{x})] \tag{1.3} R(f)=Ex[R(f(x)x)](1.3)

显然,对每个样本 x ​ \mathbf{x}​ x,若 f ​ f​ f 能最小化条件风险 R ( f ( x )    ∣    x ) ​ R(f(\mathbf{x}) \; | \; \mathbf{x})​ R(f(x)x),则总体风险 R ( f ) ​ R(f)​ R(f) 也将被最小化。这就产生了 贝叶斯判定准则(Bayes decision rule):为最小化总体风险,只需在每个样本上选择那个能使条件风险 R ( c ∣ x ) ​ R(c|\mathbf{x})​ R(cx) 最小的类别标记,即

(1.4) f ∗ ( x ) = arg ⁡ min ⁡ c ∈ Y R ( c ∣ x ) f^{*}(\mathbf{x}) = \arg\min_{c \in \mathcal{Y}} R(c|\mathbf{x}) \tag{1.4} f(x)=argcYminR(cx)(1.4)

此时, f ∗ f^{*} f 称为 贝叶斯最优分类器(Bayes optimal classifier),与之对应的总体风险 R ( f ∗ ) R(f^*) R(f) 称为 贝叶斯风险(Bayes risk)。 1 − R ( f ∗ ) ​ 1-R(f^{*})​ 1R(f) 反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。

  具体来说,若目标是最小化分类错误率,则误判损失 λ i j ​ \lambda_{ij}​ λij 可写为

(1.5) λ i j = { 0 , i f ( i = j ) 1 , o t h e r w i s e \lambda_{ij} = \left \{ \begin{array}{cc} 0, & if(i=j) \\ 1, & otherwise \end{array} \right. \tag{1.5} λij={0,1,if(i=j)otherwise(1.5)

此时条件风险

(1.6) R ( c ∣ x ) = 1 − P ( c ∣ x ) R(c|\mathbf{x}) = 1 - P(c|\mathbf{x}) \tag{1.6} R(cx)=1P(cx)(1.6)

于是,最小化分类错误率的贝叶斯最优分类器

(1.7) f ∗ ( x ) = arg ⁡ max ⁡ c ∈ Y P ( c ∣ x ) f^{*}(\mathbf{x}) = \arg \max_{c\in\mathcal{Y}} P(c | \mathbf{x}) \tag{1.7} f(x)=argcYmaxP(cx)(1.7)

即对每个样本 x \mathbf{x} x,选择能使后验概率 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx) 最大的类别标记。

  不难看出,欲使用贝叶斯判定准则来最小化决策风险,首先要获得 后验概率 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx)。然而,在现实任务中这通常难以直接获得。从这个角度来看,机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx)。大体来说,主要有两种策略:给定 x ​ \mathbf{x}​ x,可通过直接建模 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx) 来预测 c ​ c​ c,这样得到的是“判别式模型” (discriminative models);也可先对联合概率分布 P ( x , c ) ​ P(\mathbf{x},c)​ P(x,c) 建模,然后再由此获得 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx),这样得到的是“生成式模型”(generative models)。比如,决策树、支持向量机等,都可归入判别式模型的范畴。对生成式模型来说,必然考虑

(1.8) P ( c ∣ x ) = P ( x , c ) P ( x ) P(c|\mathbf{x}) = \frac{P(\mathbf{x},c)}{P(\mathbf{x})} \tag{1.8} P(cx)=P(x)P(x,c)(1.8)

  基于贝叶斯定理, P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx) 可写为

(1.9) P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|\mathbf{x}) = \frac{P(c) P(\mathbf{x}|c)}{P(\mathbf{x})} \tag{1.9} P(cx)=P(x)P(c)P(xc)(1.9)

其中, P ( c ) P(c) P(c)类先验概率 P ( x ∣ c ) P(\mathbf{x}|c) P(xc) 是样本 x \mathbf{x} x 相对于类标记 c c c类条件概率,或称为 似然(likelihood); P ( x ) P(\mathbf{x}) P(x) 是用于归一化的“证据”因子。对给定样本 x \mathbf{x} x,证据因子 P ( x ) P(\mathbf{x}) P(x) 与类标记无关,因此估计 P ( c ∣ x ) P(c|\mathbf{x}) P(cx) 的问题就转化为基于训练集 D D D 来估计先验 P ( c ) P(c) P(c) 和似然 P ( x ∣ c ) P(\mathbf{x}|c) P(xc)

1.3 估计先验 P ( c ) P(c) P(c) 和 似然 P ( x i ∣ c ) P(x_i|c) P(xic)

1.3.1 估计先验 P ( c ) P(c) P(c)

  类先验概率 P ( c ) P(c) P(c) 表达了样本空间中各类样本所占的比例,根据大数定理,当训练集包含充足的独立同分布样本时, P ( c ) ​ P(c)​ P(c) 可通过各类样本出现的频率来进行估计

  令 D c D_c Dc 表示训练集 D D D 中第 c c c 类样本组成的集合,若有充足的独立同分布样本,则可容易地估计出类先验概
(1.10) P ( c ) = ∣ D c ∣ ∣ D ∣ P(c) = \frac{|D_c|}{|D|} \tag{1.10} P(c)=DDc(1.10)


1.3.2 估计似然 P ( x i ∣ c ) P(x_i|c) P(xic)

(1) x i x_i xi 为离散属性

  如果 x i x_i xi 为离散属性,采用和估计先验 P ( c ) ​ P(c)​ P(c) 相同的方法,使用频率来进行估计。

  令 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(xic) 可估计为

(1.11) P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P(x_i | c) = \frac{|D_{c,x_i}|}{|D_c|} \tag{1.11} P(xic)=DcDc,xi(1.11)

(2) x i x_i xi 为连续属性

  如果 x i x_i xi 为连续属性,估计似然 P ( x i ∣ c ) P(x_i|c) P(xic) 的一种常用策略是先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。假设 P ( x i ∣ c ) P(x_i|c) P(xic) 具有确定的形式并且被参数 θ c \theta_c θc 唯一确定,则我们的任务就是利用训练集 D D D 估计参数 θ c \theta_c θc。为明确起见,我们将 P ( x i ∣ c ) P(x_i|c) P(xic) 记为 P ( x i ∣ θ c ) P(x_i | \theta_c) P(xiθc)

  下面我们将介绍使用源自频率学派的 极大似然估计(MLE)来估计参数 θ c ​ \theta_c​ θc。如果您还不了解极大似然估计,可以参阅 这里。

  令 D c ​ D_c​ Dc 表示训练集 D ​ D​ D 中第 c ​ c​ c 类样本组成的集合,假设这些样本是独立同分布的,则参数 θ c ​ \theta_c​ θc 对于数据集 D c ​ D_c​ Dc 的似然是

(1.12) L ( D c ∣ θ c ) = ∏ x i ∈ D c P ( x i ∣ θ c ) L(D_c|\theta_c) = \prod_{x_i \in D_c} P(x_i|\theta_c) \tag{1.12} L(Dcθc)=xiDcP(xiθc)(1.12)

θ c ​ \theta_c​ θc 进行极大似然估计,就是去寻找能最大化似然 P ( D c ∣ θ c ) ​ P(D_c|\theta_c)​ P(Dcθc) 的参数值 θ ^ c ​ \hat \theta_c​ θ^c 。直观上看,极大似然估计是试图在 θ c ​ \theta_c​ θc 所有可能的值中,找到一个能使数据出现的“可能性”最大的值。

  式(1.12)中的连乘操作易造成下溢,通常使用对数似然(log-likelihood)

(1.13) L ( θ c ) = ln ⁡ P ( D c ∣ θ c ) = ∑ x i ∈ D c ln ⁡ P ( x i ∣ θ c ) \begin{aligned} L(\theta_c) &= \ln P(D_c | \theta_c) \\\\ &= \sum_{x_i \in D_c} \ln P(x_i | \theta_c) \end{aligned} \tag{1.13} L(θc)=lnP(Dcθc)=xiDclnP(xiθc)(1.13)

此时参数 θ c ​ \theta_c​ θc 的极大似然估计 θ ^ c ​ \hat \theta_c​ θ^c

(1.14) θ ^ c = arg ⁡ max ⁡ θ c L ( θ c ) \hat \theta_c = \arg\max_{\theta_c} L(\theta_c) \tag{1.14} θ^c=argθcmaxL(θc)(1.14)

  假设概率密度函数 p ( x i ∣ c ) ∼ N ( μ c , i ,    σ c , i 2 ) ​ p(x_i|c) \thicksim \mathcal{N}(\mu_{c,i}, \; \sigma_{c,i}^{2}) ​ p(xic)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 个属性上取值的均值和方差,则参数 μ c , i ​ \mu_{c,i}​ μc,i σ c , i 2 ​ \sigma_{c,i}^{2}​ σc,i2 的极大似然估计为(详细求解过程,可以参阅 这里)

(1.15) μ ^ c , i = 1 ∣ D c ∣ ∑ x i ∈ D c x i \hat{\mu}_{c,i} = \frac{1}{|D_c|} \sum_{x_i \in D_c} x_i \tag{1.15} μ^c,i=Dc1xiDcxi(1.15)

(1.16) σ ^ c , i 2 = 1 ∣ D c ∣ ∑ x i ∈ D c ( x i − μ ^ c , i ) 2 \hat{\sigma}_{c,i}^{2} = \frac{1}{|D_c|} \sum_{x_i \in D_c}(x_i - \hat{\mu}_{c,i})^2 \tag{1.16} σ^c,i2=Dc1xiDc(xiμ^c,i)2(1.16)

在求得 μ c , i ​ \mu_{c,i}​ μc,i σ c , i 2 ​ \sigma_{c,i}^{2}​ σc,i2 之后,我们可得到

(1.17) p ( x i ∣ c ) = 1 2 π σ ^ c , i exp ⁡ ( − ( x i − μ ^ c , i ) 2 2 σ ^ c , i 2 ) p(x_i|c) = \frac{1}{\sqrt{2\pi} \hat{\sigma}_{c,i}} \exp \left( -\frac{(x_i-\hat{\mu}_{c,i})^2}{2 \hat{\sigma}_{c,i}^{2}} \right) \tag{1.17} p(xic)=2π σ^c,i1exp(2σ^c,i2(xiμ^c,i)2)(1.17)

也就是说,通过极大似然法得到的正态分布均值就是样本均值,方差就是 ( x i − μ ^ c , i ) 2 ​ (x_i - \hat{\mu}_{c,i})^2​ (xiμ^c,i)2 的均值,这显然是一个符合直觉的结果。

  需注意的是,这种参数化的方法虽能使类条件概率估计变得相对简单,但估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。在现实应用中,欲做出能较好地接近潜在真实分布的假设,往往需在一定程度上利用关于应用任务本身的经验知识,否则若仅凭“猜测”来假设概率分布形式,很可能产生误导性的结果。

1.4 朴素贝叶斯分类器

1.4.1 朴素贝叶斯分类器的定义

  对似然 P ( x ∣ c ) P(\mathbf{x}|c) P(xc) 来说,由于它涉及关于 x \mathbf{x} x 所有属性的联合概率,直接根据样本出现的频率来估计将会出遇到严重的困难。例如,假设样本的 n n n 个属性都是二值的,则样本空间将有 2 n 2^n 2n 种可能的取值,在现实应用中,这个值往往远大于训练样本数 m m m,也就是说,很多样本取值在训练集中根本没有出现,直接使用频率来估计 P ( x ∣ c ) ​ P(\mathbf{x}|c)​ P(xc) 显然不可行,因为“未被观测到”与“出现概率为零”通常是不同的。

  为避开这个障碍,朴素贝叶斯分类器(Naive Bayes Classifier)采用了 “属性条件独立性假设”:对已知类别,假设所有属性相互独立。换言之,假设每个属性独立地对分类结果发生影响。

  基于属性条件独立性假设,式(1.9)可重写为

(1.18) P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) = P ( c ) P ( x ) ∏ i = 1 n P ( x i ∣ c ) P(c|\mathbf{x}) =\frac{P(c) P(\mathbf{x}|c)}{P(\mathbf{x})} =\frac{P(c)}{P(\mathbf{x})} \prod_{i=1}^{n}P(x_i | c) \tag{1.18} P(cx)=P(x)P(c)P(xc)=P(x)P(c)i=1nP(xic)(1.18)

其中, n n n 为属性数目, x i x_i xi x \mathbf{x} x 在第 i i i 个属性上的取值。

  由于对所有类别来说 P ( x ) ​ P(\mathbf{x})​ P(x) 相同,因此基于式(1.7)的贝叶斯判定准则有

(1.19) h n b ( x ) = arg ⁡ max ⁡ c ∈ Y P ( c ) ∏ i = 1 n P ( x i ∣ c ) h_{nb}(\mathbf{x}) = \arg \max_{c\in \mathcal{Y}} P(c) \prod_{i=1}^{n}P(x_i | c) \tag{1.19} hnb(x)=argcYmaxP(c)i=1nP(xic)(1.19)

这就是 朴素贝叶斯分类器的表达式

  显然,朴素贝叶斯分类器的训练过程就是基于训练集 D ​ D​ D 来估计类先验概率 P ( c ) ​ P(c)​ P(c),并为每个属性估计条件概率 P ( x i ∣ c ) ​ P(x_i |c)​ P(xic)


1.4.2 示例

  下面采用西瓜书中的例子进行说明,表 1.1 是西瓜数据集 3.0。

表 1.1 西瓜数据集 3.0
编号 色泽 根蒂 敲声 纹理 脐部 触感 密度 含糖率 好瓜
1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 0.697 0.460
2 乌黑 蜷缩 沉闷 清晰 凹陷 硬滑 0.774 0.376
3 乌黑 蜷缩 浊响 清晰 凹陷 硬滑 0.634 0.264
4 青绿 蜷缩 沉闷 清晰 凹陷 硬滑 0.608 0.318
5 浅白 蜷缩 浊响 清晰 凹陷 硬滑 0.556 0.215
6 青绿 稍蜷 浊响 清晰 稍凹 软粘 0.403 0.237
7 乌黑 稍蜷 浊响 稍糊 稍凹 软粘 0.481 0.149
8 乌黑 稍蜷 浊响 清晰 稍凹 硬滑 0.437 0.211
9 乌黑 稍蜷 沉闷 稍糊 稍凹 硬滑 0.666 0.091
10 青绿 硬挺 清脆 清晰 平坦 软粘 0.243 0.267
11 浅白 硬挺 清脆 模糊 平坦 硬滑 0.245 0.057
12 浅白 蜷缩 浊响 模糊 平坦 软粘 0.343 0.099
13 青绿 稍蜷 浊响 稍糊 凹陷 硬滑 0.639 0.161
14 浅白 稍蜷 沉闷 稍糊 凹陷 硬滑 0.657 0.198
15 乌黑 稍蜷 浊响 清晰 稍凹 软粘 0.360 0.370
16 浅白 蜷缩 浊响 模糊 平坦 硬滑 0.593 0.042
17 青绿 蜷缩 沉闷 稍糊 稍凹 硬滑 0.719 0.103

  现在我们需要根据西瓜数据集 3.0 的数据要对下面的测试例进行分类:

编号 色泽 根蒂 敲声 纹理 脐部 触感 密度 含糖率 好瓜
测1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 0.697 0.460

  具体计算过程如下:

  1. 估计类先验概率 P ( c ) P(c) P(c)
    P ( 好 瓜 = 是 ) = 8 17 ≈ 0.471 P(好瓜=是) = \frac{8}{17} \approx 0.471 P(=)=1780.471

    P ( 好 瓜 = 否 ) = 9 17 ≈ 0.529 P(好瓜=否) = \frac{9}{17} \approx 0.529 P(=)=1790.529

  2. 估计每个属性的条件概率 P ( x i ∣ c ) P(x_i | c) P(xic)

    (1) 离散属性
    P 青 绿 ∣ 是 = P ( 色 泽 = 青 绿 ∣ 好 瓜 = 是 ) = 3 8 = 0.375 P_{青绿|是} = P(色泽=青绿 | 好瓜=是) = \frac{3}{8} = 0.375 P绿=P(=绿=)=83=0.375

    P 青 绿 ∣ 否 = P ( 色 泽 = 青 绿 ∣ 好 瓜 = 否 ) = 3 9 ≈ 0.333 P_{青绿|否} = P(色泽=青绿 | 好瓜=否) = \frac{3}{9} \approx 0.333 P绿=P(=绿=)=930.333

    P 蜷 缩 ∣ 是 = P ( 根 蒂 = 蜷 缩 ∣ 好 瓜 = 是 ) = 5 8 = 0.625 P_{蜷缩|是} = P(根蒂=蜷缩 | 好瓜=是) = \frac{5}{8} = 0.625 P=P(==)=85=0.625

    P 蜷 缩 ∣ 否 = P ( 根 蒂 = 蜷 缩 ∣ 好 瓜 = 否 ) = 3 9 ≈ 0.333 P_{蜷缩|否} = P(根蒂=蜷缩 | 好瓜=否) = \frac{3}{9} \approx 0.333 P=P(==)=930.333

    P 浊 响 ∣ 是 = P ( 敲 声 = 浊 响 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P_{浊响|是} = P(敲声=浊响 | 好瓜=是) = \frac{6}{8} = 0.750 P=P(==)=86=0.750

    P 浊 响 ∣ 否 = P ( 敲 声 = 浊 响 ∣ 好 瓜 = 否 ) = 4 9 ≈ 0.444 P_{浊响|否} = P(敲声=浊响 | 好瓜=否) = \frac{4}{9} \approx 0.444 P=P(==)=940.444

    P 清 晰 ∣ 是 = P ( 纹 理 = 清 晰 ∣ 好 瓜 = 是 ) = 7 8 = 0.875 P_{清晰|是} = P(纹理=清晰 | 好瓜=是) = \frac{7}{8} = 0.875 P=P(==)=87=0.875

    P 清 晰 ∣ 否 = P ( 纹 理 = 清 晰 ∣ 好 瓜 = 否 ) = 2 9 ≈ 0.222 P_{清晰|否} = P(纹理=清晰 | 好瓜=否) = \frac{2}{9} \approx 0.222 P=P(==)=920.222

    P 凹 陷 ∣ 是 = P ( 脐 部 = 凹 陷 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P_{凹陷|是} = P(脐部=凹陷 | 好瓜=是) = \frac{6}{8} = 0.750 P=P(==)=86=0.750

    P 凹 陷 ∣ 否 = P ( 脐 部 = 凹 陷 ∣ 好 瓜 = 否 ) = 2 9 ≈ 0.222 P_{凹陷|否} = P(脐部=凹陷 | 好瓜=否) = \frac{2}{9} \approx 0.222 P=P(==)=920.222

    P 硬 滑 ∣ 是 = P ( 触 感 = 硬 滑 ∣ 好 瓜 = 是 ) = 6 8 = 0.750 P_{硬滑|是} = P(触感=硬滑 | 好瓜=是) = \frac{6}{8} = 0.750 P=P(==)=86=0.750

    P 硬 滑 ∣ 否 = P ( 触 感 = 硬 滑 ∣ 好 瓜 = 否 ) = 6 9 ≈ 0.667 P_{硬滑|否} = P(触感=硬滑 | 好瓜=否) = \frac{6}{9} \approx 0.667 P=P(==)=960.667

    (2) 连续属性

    针对属性“密度”和“含糖率”,我们都假设其服从高斯分布,然后求其均值和方差。

    “密度”属性 μ 密 度 ∣ 是 ≈ 0.574 \mu_{密度|是} \approx 0.574 μ0.574 σ 密 度 ∣ 是 2 ≈ 0.12 9 2 \sigma_{密度|是}^{2}\approx 0.129^2 σ20.1292 μ 密 度 ∣ 否 ≈ 0.496 \mu_{密度|否} \approx 0.496 μ0.496 σ 密 度 ∣ 否 2 ≈ 0.19 5 2 \sigma_{密度|否}^{2}\approx 0.195^2 σ20.1952

    p 密 度 : 0.697 ∣ 是 = p ( 密 度 = 0.697 ∣ 好 瓜 = 是 ) = 1 2 π ⋅ 0.129 exp ⁡ ( − ( 0.697 − 0.574 ) 2 2 ⋅ 0.12 9 2 ) ≈ 1.959 p_{密度:0.697|是} = p(密度=0.697 | 好瓜=是) = \frac{1}{\sqrt{2\pi}\cdot0.129} \exp \left( -\frac{(0.697-0.574)^2}{2\cdot0.129^2} \right) \approx 1.959 p:0.697=p(=0.697=)=2π 0.1291exp(20.1292(0.6970.574)2)1.959

    p 密 度 : 0.697 ∣ 否 = p ( 密 度 = 0.697 ∣ 好 瓜 = 否 ) = 1 2 π ⋅ 0.195 exp ⁡ ( − ( 0.697 − 0.496 ) 2 2 ⋅ 0.19 5 2 ) ≈ 1.203 p_{密度:0.697|否} = p(密度=0.697 | 好瓜=否) = \frac{1}{\sqrt{2\pi}\cdot0.195} \exp \left( -\frac{(0.697-0.496)^2}{2\cdot0.195^2} \right) \approx 1.203 p:0.697=p(=0.697=)=2π 0.1951exp(20.1952(0.6970.496)2)1.203

    ”含糖量“属性 μ 含 糖 率 ∣ 是 ≈ 0.279 \mu_{含糖率|是} \approx 0.279 μ0.279 σ 含 糖 率 ∣ 是 2 ≈ 0.10 1 2 \sigma_{含糖率|是}^{2}\approx 0.101^2 σ20.1012 μ 含 糖 率 ∣ 否 ≈ 0.154 \mu_{含糖率|否} \approx 0.154 μ0.154 σ 含 糖 率 ∣ 否 2 ≈ 0.10 8 2 \sigma_{含糖率|否}^{2}\approx 0.108^2 σ20.1082

    p 含 糖 率 : 0.460 ∣ 是 = p ( 含 糖 率 = 0.460 ∣ 好 瓜 = 是 ) = 1 2 π ⋅ 0.101 exp ⁡ ( − ( 0.697 − 0.279 ) 2 2 ⋅ 0.10 1 2 ) ≈ 0.788 p_{含糖率:0.460|是} = p(含糖率=0.460 | 好瓜=是) = \frac{1}{\sqrt{2\pi}\cdot0.101} \exp \left( -\frac{(0.697-0.279)^2}{2\cdot0.101^2} \right) \approx 0.788 p:0.460=p(=0.460=)=2π 0.1011exp(20.1012(0.6970.279)2)0.788

    p 含 糖 率 : 0.460 ∣ 否 = p ( 含 糖 率 = 0.460 ∣ 好 瓜 = 否 ) = 1 2 π ⋅ 0.108 exp ⁡ ( − ( 0.697 − 0.154 ) 2 2 ⋅ 0.10 8 2 ) ≈ 0.066 p_{含糖率:0.460|否} = p(含糖率=0.460 | 好瓜=否) = \frac{1}{\sqrt{2\pi}\cdot0.108} \exp \left( -\frac{(0.697-0.154)^2}{2\cdot0.108^2} \right) \approx 0.066 p:0.460=p(=0.460=)=2π 0.1081exp(20.1082(0.6970.154)2)0.066

  3. 计算概率

    P 青 绿 ∣ 是 × P 蜷 缩 ∣ 是 × P 浊 响 ∣ 是 × P 清 晰 ∣ 是 × P 凹 陷 ∣ 是 × P 硬 滑 ∣ 是 × p 密 度 : 0.697 ∣ 是 × p 含 糖 率 : 0.460 ∣ 是 × P ( 好 瓜 = 是 ) ≈ 0.038 P_{青绿|是} \times P_{蜷缩|是} \times P_{浊响|是} \times P_{清晰|是} \times P_{凹陷|是} \times P_{硬滑|是}\times p_{密度:0.697|是} \\ \times p_{含糖率:0.460|是} \times P(好瓜=是) \approx 0.038 P绿×P×P×P×P×P×p:0.697×p:0.460×P(=)0.038

    P 青 绿 ∣ 否 × P 蜷 缩 ∣ 否 × P 浊 响 ∣ 否 × P 清 晰 ∣ 否 × P 凹 陷 ∣ 否 × P 硬 滑 ∣ 否 × p 密 度 : 0.697 ∣ 否 × p 含 糖 率 : 0.460 ∣ 否 × P ( 好 瓜 = 否 ) ≈ 6.80 × 1 0 − 5 P_{青绿|否} \times P_{蜷缩|否} \times P_{浊响|否} \times P_{清晰|否} \times P_{凹陷|否} \times P_{硬滑|否}\times p_{密度:0.697|否} \\ \times p_{含糖率:0.460|否} \times P(好瓜=否) \approx 6.80 \times 10^{-5} P绿×P×P×P×P×P×p:0.697×p:0.460×P(=)6.80×105

    由于 0.038 > 6.80 × 1 0 − 5 0.038 > 6.80 \times 10^{-5} 0.038>6.80×105,因此,朴素贝叶斯分类器将测试样本“测 1”判别为“好瓜”。需注意,在实际应用中,我们通常取对数,将“连乘”转化为“连加”以避免数值下溢。

1.4.3 拉普拉斯修正

  针对 离散型属性,如果某个属性值在训练集中没有与某个类同时出现过,则直接基于式(1.11)进行概率估计得到 P ( x i ∣ c ) = 0 P(x_i|c) = 0 P(xic)=0;再根据式(1.18)进行连乘计算出的概率值为 0 0 0。也就是说不管其他属性如何取值,都会因为 P ( x i ∣ c ) = 0 P(x_i|c) = 0 P(xic)=0 导致分类器认为该样本属于类型 c c c 的概率为 0 ​ 0​ 0,这显然是不合理的。

  为了避免这个问题的出现,因此在估计概率值时通常要进行 “平滑”(smoothing),常用 “拉普拉斯修正”(Laplacian Correction)。具体来说,令 N N N 表示训练集 D D D 中可能的类别数, N i N_i Ni 表示第 i i i 个属性可能的取值数量,则式(1.10)和式(1.11)分别修正为

(1.20) P ^ ( c ) = ∣ D c ∣ + 1 ∣ D ∣ + N \hat{P}(c) = \frac{|D_c| + 1}{|D| + N} \tag{1.20} P^(c)=D+NDc+1(1.20)

(1.21) P ^ ( x i ∣ c ) = ∣ D c , x i ∣ + 1 ∣ D c ∣ + N i \hat{P}(x_i | c) = \frac{|D_{c,x_i}| + 1}{|D_c| + N_i} \tag{1.21} P^(xic)=Dc+NiDc,xi+1(1.21)

  显然,拉普拉斯修正避免了因训练集样本不充分而导致概率估计为零的问题,并且在训练集变大时,修正过程所引入的先验的影响也会逐渐变得可忽略,使得估值渐趋向于实际概率值。

1.4.4 总结

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

  在现实任务中,朴素贝叶斯分类器有多种使用方式。例如,如果任务对预测速度要求较高,则对给定训练集,可将朴素贝叶斯分类器涉及的所有概率估值事先计算好并存储起来,这样在进行预测时只需“查表”即可进行判别;如果任务数据更替频繁,则可采用“懒惰学习”(lazy learning)方式,先不进行任何训练,待收到预测请求时再根据当前数据集进行概率估值;如果数据不断增加,则可在现有估值的基础上,仅对新增样本的属性值所涉及的概率估值进行计数修正即可实现增量学习。

1.5 半朴素贝叶斯

  为了降低贝叶斯公式(1.9)中估计后验概率 P ( c ∣ x ) ​ P(c|\mathbf{x})​ P(cx) 的困难,朴素贝叶斯分类器采用了属性条件独立性假设,但在现实任务中这个假设很难成立。于是,人们尝试对属性条件独立性假设进行一定程度的放松,由此产生了一类称为“半朴素贝叶斯分类器”(Semi-naive Bayes Classifiers)的学习方法。

  半朴素贝叶斯分类器的基本想法是适当考虑一部分属性间的相互依赖信息,从而既不需要进行完全联合概率计算,又不至于彻底忽略了比较强的属性依赖关系。“独依赖估计”(One-Dependent Estimator,简称 ODE)是半朴素贝叶斯分类器最常用的一种策略。顾名思义,所谓“独依赖”就是假设每个属性在类别之外最多仅依赖于一个其他属性,即

(1.22) P ( c ∣ x ) ∝ P ( c ) ∏ i = 1 n P ( x i ∣ c , p a i ) P(c|\mathbf{x}) \propto P(c) \prod_{i=1}^{n}P(x_i|c,pa_i) \tag{1.22} P(cx)P(c)i=1nP(xic,pai)(1.22)

其中 p a i ​ pa_i​ pai 为属性 x i ​ x_i​ xi 所依赖的属性,称为 x i ​ x_i​ xi 的父属性。此时,对每个属性 x i ​ x_i​ xi,如果父属性 p a i ​ pa_i​ pai 已知,则可采用类似式(1.21)的办法来估计概率值 P ( x i ∣ c , p a i ) ​ P(x_i | c,pa_i)​ P(xic,pai)。于是,问题的关键就转化为如何确定每个属性的父属性,不同的做法产生不同的独依赖分类器

  最直接的做法是假设所有属性都依赖于同一个属性,称为“超父”(super-parent),然后通过交叉验证等模型选择方法来确定超父属性,由此形成了 SPODE(Super-Parent ODE)方法。例如,在图 1.1(b)中, x 1 ​ x_1​ x1 是超父属性。

机器学习系列 13:贝叶斯分类 01 - 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器_第1张图片 机器学习系列 13:贝叶斯分类 01 - 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器_第2张图片 机器学习系列 13:贝叶斯分类 01 - 贝叶斯决策论、朴素贝叶斯分类器 和 半朴素贝叶斯分类器_第3张图片
图 1.1 朴素贝叶斯与两种半朴素贝叶斯分类器所考虑的属性依赖关系

  TAN(Tree Augmented Naive Bayes)则是在最大带权生成树(maximum weighted spanning tree)算法的基础上,通过以下步骤将属性间依赖关系约简为如图 1.1(c)所示的树形结构:

  1. 计算任意两个属性之间的条件互信息(conditional mutual information)
    (1.23) I ( x i , x j ∣ y ) = ∑ x i , y i ; c ∈ Y P ( x i , x j ∣ c ) log ⁡ P ( x i , x j ∣ c ) P ( x i ∣ c ) P ( x j ∣ c ) I(x_i,x_j|y) = \sum_{x_i,y_i;c\in\mathcal{Y}} P(x_i,x_j|c) \log \frac{P(x_i,x_j|c)}{P(x_i|c)P(x_j|c)} \tag{1.23} I(xi,xjy)=xi,yi;cYP(xi,xjc)logP(xic)P(xjc)P(xi,xjc)(1.23)

  2. 以属性为结点构建完全图,任意两个结点之间边的权重设为 I ( x i , x j ∣ y ) I(x_i,x_j|y) I(xi,xjy)

  3. 构建此完全图的最大带权生成树,挑选根变量,将边置为有向。

  4. 加入类别结点 y y y,增加从 y ​ y​ y 到每个属性的有向边。

  容易看出,条件互信息 I ( x i , x j ∣ y ) I(x_i,x_j|y) I(xi,xjy) 刻画了属性 x i x_i xi x j ​ x_j​ xj 在已知类别情况下的相关性,因此,通过最大生成树算法,TAN 实际上仅保留了强相关属性之间的依赖性。

  AODE(Averaged One-Dependent Estimator)是一种基于集成学习机制、更为强大的独依赖分类器。与 SPODE 通过模型选择确定超父属性不同,AODE 尝试将每个属性作为超父来构建 SPODE,然后将那些具有足够训练数据支撑的 SPODE 集成起来作为最终结果,即
(1.24) P ( c ∣ x ) ∝ ∑ i = 1 ,    ∣ D x i ∣ ≥ m ′ n P ( c , x i ) ∏ j = 1 n P ( x j ∣ c , x i ) P(c|\mathbf{x}) \propto \sum_{i=1, \; |D_{x_i}|\geq m^{'}}^{n} P(c,x_i) \prod_{j=1}^{n}P(x_j | c,x_i) \tag{1.24} P(cx)i=1,DximnP(c,xi)j=1nP(xjc,xi)(1.24)

其中 D x i D_{x_i} Dxi 是在第 i i i 个属性上取值为 x i x_i xi 的样本的集合, m ′ m^{'} m 为阈值常数(一般默认设置为 30)。显然 AODE 需估计 P ( c , x i ) P(c,x_i) P(c,xi) P ( x j ∣ c , x i ) P(x_j|c,x_i) P(xjc,xi)。类似式(7.20),有

(1.25) P ^ ( c , x i ) = ∣ D c , x i ∣ + 1 ∣ D ∣ + N i \hat{P}(c,x_i) = \frac{|D_{c,x_i}|+1}{|D|+N_i} \tag{1.25} P^(c,xi)=D+NiDc,xi+1(1.25)

(1.26) P ^ ( x j ∣ c , x i ) = ∣ D c , x i , x j ∣ + 1 ∣ D c , x i ∣ + N j \hat{P}(x_j|c,x_i) = \frac{|D_{c,x_i,x_j}|+1}{|D_{c,x_i}|+N_j} \tag{1.26} P^(xjc,xi)=Dc,xi+NjDc,xi,xj+1(1.26)

其中 N i N_i Ni 是第 i i i 个属性可能的取值数量, D c , x i D_{c,x_i} Dc,xi 是类别为 c c c 且在第 i i i 个属性上取值为 x i x_i xi 的样本集合, D c , x i , x j D_{c,x_i,x_j} Dc,xi,xj 是类别为 c c c 且在第 i i i 个和第 j j j 个属性上取值分别为 x i x_i xi x j ​ x_j​ xj 的样本集合。

  不难看出,与朴素贝叶斯分类器类似,AODE 的训练过程也是“计数”,即在训练数据集上对符合条件的样本进行计数的过程。与朴素贝叶斯分类器相似,AODE 无需模型选择,即能通过预计算节省预测时间,也能采取懒惰学习方式在预测时再进行计数,并且易于实现增量学习。

  既然将属性条件独立性假设放松为独依赖假设可能获得泛化性能的提升,那么,能否通过考虑属性间的高阶依赖(即对多个属性依赖)来进一步提升泛化性能呢?也就是说,将式(1.22)中的属性 p a i ​ pa_i​ pai 替换为包含 k ​ k​ k 个属性的集合 p a i ​ \mathbf{pa_i}​ pai,从而将 ODE 拓展为 k ​ k​ kDE。需注意的是,随着 k ​ k​ k 的增加,准确估计概率 P ( x i ∣ y , p a i ) ​ P(x_i |y, \mathbf{pa_i})​ P(xiy,pai) 所需的训练样本数量将以指数级增加。因此,若训练数据非常充分,泛化性能有可能提升;但在有限样本条件下,则又陷入估计高阶联合概率的泥沼。

参考:

[1] 周志华《机器学习》
[2] 李航《统计学习方法》
[3] 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

你可能感兴趣的:(01_机器学习,机器学习系列)