从零开始学AI——7

64 阅读3分钟

前言

五一节狠狠耍了几天,所以学的有些不太认真,哈哈。最后EM算法如果看不太懂的话我建议可以跳过,如果不想跳的话可以动手算算就清楚了

第七章

本章学习贝叶斯分类器,需要大家掌握贝叶斯定理

P(AB)=P(AB)P(B)=P(BA)P(A)  P(AB)=P(BA)P(A)P(B)P(AB) = P(A|B)P(B) = P(B|A)P(A) \ \Rightarrow \ P(A|B) = \frac{P(B|A)P(A)}{P(B)}

{A1,A2,,An}\{A_1, A_2, \dots, A_n\}是样本空间Ω\Omega的一个划分,则可通过全概率公式计算P(B)P(B)

P(B)=i=1nP(BAi)P(Ai)P(B) = \sum_{i=1}^{n} P(B|A_i)P(A_i)

7.1 贝叶斯决策论

贝叶斯决策论是基于概率实施决策的方法,其核心目标是在所有相关概率已知的理想情况下,找到对样本的最优分类策略。假设我们有一个包含 dd 个特征的数据集,特征向量表示为 x=(x1,x2,,xd)T\mathbf{x} = (x_1, x_2, \dots, x_d)^{T},存在 NN 个可能的类别 Y={c1,c2,,cN}\mathcal{Y} = \{c_1, c_2, \dots, c_N\}。定义误判损失λij\lambda_{ij}为将真实类别cjc_{j}的样本错误分类为cic_{i}的代价,则样本x\mathbf{x}被分类为cic_{i}条件风险(期望损失)为:

R(cix)=j=1NλijP(cjx)R(c_{i}|\mathbf{x})=\sum_{j=1}^{N}\lambda_{ij}P(c_{j}|\mathbf{x})

其中后验概率P(cjx)P(c_{j}|\mathbf{x})表示已知样本x\mathbf{x}时属于类别cjc_{j}的概率。我们的目标是找到映射函数h:XYh:\mathcal{X} \rightarrow \mathcal{Y}以最小化总体风险

R(h)=Ex[R(h(x)x)]R(h)=\mathbb{E}_{\mathbf{x}}[R(h(\mathbf{x})|\mathbf{x})]

根据贝叶斯判定准则,对每个x\mathbf{x}选择使条件风险最小的类别,即最优分类器为:

h(x)=argmincYR(cx)h^{*}(\mathbf{x})=\arg\min_{c \in \mathcal{Y}} R(c|\mathbf{x})

此时hh^{*}称为贝叶斯最优分类器R(h)R(h^{*})贝叶斯风险,其补集1R(h)1-R(h^{*})代表理论最大分类精度。当采用0-1损失函数λij=1δij\lambda_{ij}=1-\delta_{ij}时,条件风险可直接展开简化为:

R(cix)=1P(cix)\begin{align} R(c_{i}|\mathbf{x}) &= 1-P(c_{i}|\mathbf{x}) \end{align}

推导中利用了j=1NP(cjx)=1\sum_{j=1}^{N}P(c_{j}|\mathbf{x})=1的性质。此时最小化风险等价于最大化后验概率

h(x)=argmaxcYP(cx)h^{*}(\mathbf{x})=\arg \max_{c \in \mathcal{Y}}P(c|\mathbf{x})

对于部分模型(决策树、BP神经网络等)他们是直接学习条件概率分布(P(yx))(P(y|\mathbf{x})),或者说直接学习一个决策边界,这种模型可以直接得到后验概率P(cx)P(c|\mathbf{x}),称为判别式模型;而有些模型会学习数据的联合概率分布P(x,y)P(\mathbf{x},y),试图理解每个类别的数据是如何生成的,通过贝叶斯定理来计算后验概率,称为生成式模型。很明显,我们这个模型就是生成式模型,需要考虑贝叶斯定理

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

其中p(c)p(c)是类别的先验概率,P(xc)P(\mathbf{x}|c)是类别cc下出现x\mathbf{x}的概率,称为似然,P(x)P(\mathbf{x})就是x\mathbf{x}出现的概率称为证据。对于所有类别cc来说,P(x)P(\mathbf{x})没有任何区别,所以最终后验概率转为了P(c)P(c)P(xc)P(\mathbf{x}|c)h(x)=argmaxcYP(xc)P(c)h^*(\mathbf{x}) = \arg\max_{c \in \mathcal{Y}} P(\mathbf{x}|c) P(c)

对于先验概率P(c)P(c)估计是比较简单的,假设我们的训练集 DD 包含 D|D| 个样本,其中属于类别 cc 的样本子集为 DcD_c,其包含 Dc|D_c| 个样本,一共有KK类。那么,假设样本足够大时,根据大数定律P(c)P(c) 就是: P(c)DcDP(c) \approx \frac{|D_c|}{|D|} 简单来说,就是类别 cc 的样本在训练集中所占的比例。但这里我们尝试采用极大似然估计估计P(c)P(c)来介绍这种方法。 极大似然估计(MLE)是一个通用的参数估计方法: MLE 的目标是找到一组参数值,使得观察到当前这组数据的概率(即似然)最大化,它可以应用于各种模型的参数估计。 以P(c)P(c)为例,将估计P(c)P(c)视为一个MLE问题,我们假设一组参数向量θc\theta_{c}唯一确定了该样本的分布,即参数是概率本身θc=P(c)\theta_{c}=P(c),满足约束条件cθc=1\sum_{c}\theta_{c}=1。观测到当前数据集的似然函数为:

L(θD)=P(Dθ)c=1KθcDcL(\boldsymbol{\theta}|D) = P(D|\boldsymbol{\theta}) \propto \prod_{c=1}^K \theta_c^{|D_c|}

其中省略了组合数常数项(不影响极值求解)。面对连乘形式的似然函数,常规处理方式是取对数

L(θD)=lnL(θD)=c=1KDclnθc\mathcal{L}(\boldsymbol{\theta} | D) = \ln L(\boldsymbol{\theta} | D) = \sum_{c=1}^K |D_{c}| \ln \theta_c

接着采用拉格朗日乘子法,构建拉格朗日函数(注意约束条件):

J(θ,λ)=c=1KDclnθcλ(c=1Kθc1)\mathcal{J}(\boldsymbol{\theta}, \lambda) = \sum_{c=1}^K |D_c| \ln \theta_c - \lambda \left( \sum_{c=1}^K \theta_c - 1 \right)

通过标准推导最终得到MLE估计量

θ^cMLE=DcD\hat{\theta}_c^{MLE} = \frac{|D_c|}{|D|}

这正是所需的经验频率估计结果。

注:原书中以P(xc)P(\mathbf{x}|c)为例说明最大似然估计,但因其后续未使用该结果,此处改用P(c)P(c)作为示例,二者核心推导思想完全一致

原来在贝叶斯网上用到了,但我懒得改了,大家动手自己算一遍吧

7.2 朴素贝叶斯分类器

回到贝叶斯决策,P(c)P(c)的估计已经给出,现在还需计算P(xc)P(\mathbf{x}|c)。将其展开为P(x1,x2,,xdc)P(x_{1},x_{2},\dots,x_{d}|c),即所有特征的联合分布概率。若所有属性为离散型且每属性有kk种取值,则x\mathbf{x}的组合数高达kdk^{d}种。要准确估计P(xc)P(\mathbf{x}|c)的分布,需极大样本量,这在实际中往往不可行。为此,朴素贝叶斯分类器引入特征条件独立性假设:给定类别cc时,所有特征x1,x2,,xdx_1, x_2, \dots, x_d相互独立。其数学形式为: P(xc)=P(x1,x2,,xdc)假设i=1dP(xic)P(\mathbf{x}|c) = P(x_1, x_2, \dots, x_d | c) \stackrel{\text{假设}}{\Rightarrow} \prod_{i=1}^d P(x_i|c) 因此h(x)=argmaxcYP(xc)P(c)h^*(\mathbf{x}) = \arg\max_{c \in \mathcal{Y}} P(\mathbf{x}|c) P(c)可以转为

hnb(x)=argmaxcYP(c)i=1dP(xic)h_{nb}(\mathbf{x})=\arg \max_{c \in \mathcal{Y}} P(c)\prod_{i=1}^d P(x_i|c)

注意这里的xi\mathbf{x}_{i}指的是属性而不是某个样本更不是属性值,不要和之前的地方混淆,另外hnbh_{nb}的下标缩写指的是朴素贝叶斯(Naive Bayes)。

对于离散属性
vi,kv_{i,k}表示第ii个特征取值为kkkmax=Lik_{\max}=L_{i}为第ii个特征能够取到LiL_{i}个值,Dc,i,kD_{c,i,k}cc类别中第ii个特征值取值为kk的样本集合。类条件概率的估计为

P(xi=vi,kc)=Dc,i,kDcP(x_{i}=v_{i,k}|c) = \frac{|D_{c,i,k}|}{|D_{c}|}

但存在零概率问题:若vi,kv_{i,k}在类别cc中未出现(即Dc,i,k=0|D_{c,i,k}|=0),会导致i=1dP(xic)=0\prod_{i=1}^d P(x_i|c)=0拉普拉斯修正通过引入伪计数解决该问题,修正后的估计式为

P^(c)=Dc+1D+KP^(xi=vi,kc)=Dc,i,k+1Dc+Li\begin{align} \hat{P}(c) &= \frac{|D_{c}|+1}{|D|+K} \\ \hat{P}(x_{i}=v_{i,k}|c) &= \frac{|D_{c,i,k}|+1}{|D_{c}|+L_{i}} \end{align}

其中KK为类别总数,LiL_{i}为第ii个特征的取值数。

对于连续属性
常常假设属性服从高斯分布N(μi,c,σi,c2)\mathcal{N}(\mu_{i,c}, \sigma^2_{i,c}),其参数通过样本均值和方差估计:

μ^i,c=1DcxDcxiσ^i,c2=1DcxDc(xiμ^i,c)2\begin{align} \hat{\mu}_{i,c} &= \frac{1}{|D_c|}\sum_{\mathbf{x} \in D_c} x_i \\ \hat{\sigma}^2_{i,c} &= \frac{1}{|D_c|}\sum_{\mathbf{x} \in D_c} (x_i - \hat{\mu}_{i,c})^2 \end{align}

类条件概率密度为

P(xic)=12πσ^i,c2exp((xiμ^i,c)22σ^i,c2){P}(x_i|c) = \frac{1}{\sqrt{2\pi\hat{\sigma}^2_{i,c}}} \exp\left(-\frac{(x_i - \hat{\mu}_{i,c})^2}{2\hat{\sigma}^2_{i,c}}\right)

7.3 半朴素贝叶斯分类器

朴素贝叶斯分类器的假设条件是属性之间完全独立,这一强假设在现实中往往难以满足。为此,半朴素贝叶斯分类通过弱化独立性假设来改进模型,其核心思想是允许每个特征 xix_i 最多依赖于一个或少数几个其他特征(称为父属性 paipa_i)。此时分类目标仍为最大化:

h(x)=argmaxcYP(xc)P(c)h^*(\mathbf{x}) = \arg\max_{c \in \mathcal{Y}} P(\mathbf{x}|c) P(c)

但类条件概率改写为:

P(xc)idP(xic,pai)P(\mathbf{x}|c) \propto \prod_{i}^d P(x_{i}|c,pa_{i})

独依赖估计(ODE)是最简单的实现方式,其中三种典型方法如下:

  1. SPODE(Super-Parent ODE)

    • 核心思想:所有属性均依赖同一个超父属性,该属性通过交叉验证等模型选择方法确定。
    • 公式P(xc)=P(x1,x2,,xdc)=P(paic)jidP(xjc,pai))P(\mathbf{x}|c)=P(x_{1},x_{2},\dots,x_{d}|c)=P(pa_{i}|c)\prod_{j\neq i}^{d}P(x_{j}|c,pa_{i}))
    • 局限性:虽然引入依赖关系,但全局共享单一父属性的设定可能过于简化。

    用了P(xy)=P(x1,,xdy)=P(x1y)P(x2y,x1)P(x3y,x1,x2)P(xdy,x1,,xd1)P(\mathbf{x}|y) = P(x_1, \dots, x_d | y) = P(x_1|y) P(x_2|y, x_1) P(x_3|y, x_1, x_2) \dots P(x_d|y, x_1, \dots, x_{d-1})和假设立刻得到公式

  2. TAN(Tree-Augmented Naive Bayes)

    • 核心思想:允许每个特征 xix_i 拥有不同的父特征 paipa_i,但依赖关系必须构成树状结构(即除根节点外,每个节点仅有一个父节点)。
    • 构建方法
      • 计算类别 cc 下任意两个属性 xi,xjx_{i}, x_{j} 之间的依赖关系时,采用条件互信息(Conditional Mutual Information)。其意义是:在已知类别变量 cc 的条件下,观测到 xjx_j 的值能为推断 xix_i 的值提供多少额外信息量(反之对 xjx_j 同理)。该关系的数学表示为 I(xi;xjc)I(x_i; x_j \mid c),其值越大,表明在给定类别后,这两个属性间的统计依赖性越强。因此,该度量结果可直接作为后续图模型中边的权重
      • I(xi,xjy)=xi,xj;cYP(xi,xjc)log(P(xi,xjc)P(xic)P(xjc))I(x_{i},x_{j}|y)=\sum_{x_{i},x_{j};c \in \mathcal{Y}}P(x_{i},x_{j}|c)\log\left( \frac{P(x_{i},x_{j}|c)}{P(x_{i}|c)P(x_{j}|c)} \right)
      • dd个属性作为结点构建完全图,任意两个结点之间的边的权重设为条件互信息
      • 带权完全图上应用最大生成树算法,寻找权重总和达到全局最大值的树
      • 为了明确无向树中哪个是父节点 (paipa_i),哪个是子节点 (xix_i),任意选择一个节点作为根节点,从根节点开始,将树中所有的边赋予方向,使它们都背离根节点
      • 最后引入类别结点,增加类别结点到每个属性结点的有向边
    • 比较:相比SPODE,TAN能更灵活地捕捉特征间的局部依赖关系。但它比朴素贝叶斯和 SPODE 计算量更大。
  3. AODE (Aggregated One-Dependence Estimators)

    • 核心思想:基于SPODE,认为每个属性都可以成为超父属性,构建那些具有足够训练数据支持的SPODE集成起来作为最后结果
    • 公式P(cx)i=1 s.t. N(xi)md(P(c,xi)j=1dP(xjc,xi))P(c|\mathbf{x}) \propto \sum_{i=1 \text{ s.t. } N(x_i) \ge m}^d \left( {P}(c, x_i) \prod_{j=1}^d {P}(x_j | c, x_i) \right)
      • 其中N(xi)N(x_i)是属性值xix_{i}在训练集出现的次数,mm是一个阈值,一般取3030,用于避免使用出现次数过少的特征作为超父导致估计不准
    • 比较:不需要选择模型,易于实现增量学习,但是计算量更大

以上都是基于独依赖的方法,如果希望更好的泛化性能可以让依赖的属性个数不再只有11个,但这会带来指数级的计算量以及对训练集数量的要求。

7.4 贝叶斯网

半朴素贝叶斯分类器确实比朴素分类器进步,但他们依旧受限于依赖假设,我们希望找到一种更通用灵活的方法,这就是贝叶斯网(Bayesian Network, BN)。 一个贝叶斯网络的“骨架”是一个有向无环图 (DAG),我们记作G=(V,E)G = (V, E)

  • 节点VV: 图 GG 中的每一个节点都代表系统中的一个随机变量。我们通常用 X1,X2,,XdX_1, X_2, \dots, X_d 来表示这 dd 个变量(节点)。
  • 有向边EE: 图 GG 中的一条从节点 XiX_i 指向节点 XjX_j 的边(记作 XiXjX_i \to X_j)表示 XiX_iXjX_j 有一个直接的影响或依赖,沿用半朴素贝叶斯方法,我们称 XiX_iXjX_j 的一个父结点,而 XjX_jXiX_i 的一个子结点。
  • 无环: 这是 DAG 的关键特性。意味着从图中任何一个结点出发,沿着边的方向走,永远不可能回到起点。这保证了属性最终不能依赖自己。

但仅有DAG结构还不够,我们还需要量化结点之间的依赖强度,这由参数完成。我们用 Θ\Theta 来表示整个网络的所有参数集合。设属性 xix_{i} 的父结点集为 πi\pi_{i},那么 xix_i 对其父结点的依赖程度由条件概率分布 (CPD) P(xiπi)P(x_i | \pi_{i}) 来描述,该分布是参数集合 Θ\Theta 的一部分,记为θxiπi\theta_{x_{i}|\pi_{i}}

可以思考一下,如果两个属性 AABB 相互独立,那么条件概率等于边缘概率,即 P(AB)=P(A)P(A|B)=P(A);只有当它们存在依赖关系时,两者才不相等。

整个贝叶斯网络的参数集合 Θ\Theta 就是所有节点 XiX_i 的参数 θxiπi\theta_{x_i | \pi_{i}} 的集合: Θ={θx1π1,θx2π2,,θxdπd}\Theta = \{ \theta_{x_1 | \pi_{1}}, \theta_{x_2 | \pi_{2}}, \dots, \theta_{x_d | \pi_{d} }\} 特别的,如果所有变量都是离散的,那么每个 CPD P(xiπi)P(x_i | \pi_{i}) 通常用一个条件概率表 (Conditional Probability Table, CPT) 来表示:

  • CPT 会列出父节点 πi\pi_{i} 的每一种可能的取值组合。
  • 对于父节点的每一种组合,CPT 会给出 xix_i 取其每一个可能值的概率。
  • 因此,参数 θxiπi\theta_{x_{i}|\pi_{i}} 就是这个 CPT 表中存储的所有概率值。

我们最终得到了一个贝叶斯网 B=G,ΘB = \langle G, \Theta \rangle,现在需要计算整个网络的联合概率分布 P(x)=P(x1,x2,,xd)P(\mathbf{x})=P(x_{1},x_{2},\dots,x_{d})。根据概率的链式法则(此前也使用过),联合概率分布可以分解为:

P(x1,x2,,xd)=P(x1)×P(x2x1)×P(x3x2,x1)××P(xdx1,x2,,xd1)=i=1dP(xix1,x2,,xi1)\begin{align} P(x_{1},x_{2},\dots,x_{d}) &=P(x_{1})\times P(x_{2}|x_{1}) \times P(x_{3}|x_{2},x_{1})\times \dots \times P(x_{d}|x_{1},x_{2},\dots,x_{d-1}) \\ &=\prod_{i=1}^dP(x_{i}|x_{1},x_{2},\dots,x_{i-1}) \end{align}

由于贝叶斯网是一个有向无环图(DAG),总存在一种拓扑排序使得对于任意有向边 xjxix_j \to x_i,节点 xjx_j 在排序中必然位于 xix_i 之前。这意味着父结点始终排在子结点之前。基于此,我们引入条件独立性假设给定节点 xix_i 的父节点集 πi\pi_i 时,xix_i 与所有非后代节点条件独立

在这一假设下,重新观察联合概率的乘积项 P(xix1,x2,,xi1)P(x_{i}|x_{1},x_{2},\dots,x_{i-1})。对于节点 xix_i,集合 {x1,x2,,xi1}\{x_{1},x_{2},\dots,x_{i-1}\} 中的结点要么是其父结点(πi\pi_i),要么是满足条件独立性的非后代结点。因此,该项可简化为仅依赖于父结点的条件概率 P(xiπi)P(x_{i}|\pi_{i})。最终,贝叶斯网的联合概率分布可表示为:

P(x1,x2,,xd)=i=1dP(xiπi)P(x_{1},x_{2},\dots,x_{d})=\prod_{i=1}^{d}P(x_{i}|\pi_{i})

在概率图模型中,我们经常需要判断变量间的条件独立性关系。我们希望仅通过观察有向无环图(DAG)的结构,就能判断出:当给定(观测到)一组变量 Z\mathbf{Z} 的值时,另外两组变量 X\mathbf{X}Y\mathbf{Y} 是否相互条件独立。我们用 XYZ\mathbf{X} \perp \mathbf{Y} | \mathbf{Z} 表示这个条件独立关系。

DAG中任意三个相连的结点x1,x2,x3x_{1},x_{2},x_{3}存在以下三种经典结构,它们的独立性表现各不相同:

同父结构

graph TD
    x1 --> x2
    x1 --> x3

在这个结构中,x1x_{1}x2x_{2}x3x_{3}共同父结点独立性:如果x1x_{1}已知(即被观测),那么x2x_{2}x3x_{3}将直接由x1x_{1}决定,此时它们之间是条件独立的;但如果x1x_{1}未知,x2x_{2}就可以通过影响x1x_{1}来间接影响x3x_{3}(基于贝叶斯网络的性质),因此两者是相关的。

V型结构(或称冲撞结构)

graph TD
    x2 --> x1
    x3 --> x1

这个结构中,x2x_{2}x3x_{3}都是x1x_{1}的父结点。 独立性:如果x1x_{1}未被观测,x2x_{2}x3x_{3}之间没有直接连接路径,此时两者是独立的;但如果观测到x1x_{1},根据贝叶斯公式,x2x_{2}x3x_{3}会变得相关。

顺序结构

graph LR
    x2 --> x1
    x1 --> x3

这是最直观的结构。 独立性:如果x1x_{1}被观测,那么x3x_{3}的状态可以完全从x1x_{1}推断出来,此时x2x_{2}x3x_{3}是条件独立的;但如果x1x_{1}未被观测,x2x_{2}可以通过x1x_{1}影响x3x_{3},两者就存在依赖关系。

为了系统性地分析有向图中变量间的条件独立性,可以使用有向分离方法。具体操作分为两个步骤:首先需要将原始有向图转换为对应的无向图(称为"道德图"),转换过程包括:

  1. 找到图中所有的V型结构,并在两个父结点之间添加无向边(这个过程称为"道德化")
  2. 将所有剩余的有向边改为无向边

通过这种转换得到的道德图,可以方便地判断独立性:只需要将已知变量集合Z\mathbf{Z}对应的结点及其边从图中移除,然后检查目标变量xxyy是否位于不同的连通分支。如果是,就称xxyyZ\mathbf{Z}有向分离,此时条件独立关系xyzx \perp y|\mathbf{z}成立。

7.4.1 学习

现在我们来看贝叶斯网是如何从数据中学习得到的。当我们有一个训练数据集时,我们并不知道变量之间确切的依赖关系(也就是图的结构),这时候就需要通过算法自动地从数据中发现或学习出这个图结构,这个过程就叫做贝叶斯网络结构学习

在结构学习中,最常用的方法是"评分搜索"方法。这个方法的核心思想是:首先定义一个评分函数 s(BD)s(B|D),这个函数的作用是衡量给定的贝叶斯网BB对数据集DD的拟合好坏程度。然后,我们需要在所有可能的DAG结构空间中进行搜索,目标是找到一个使得这个评分函数最优的结构GG^*

根据不同的归纳偏好,我们可以选择不同形式的评分函数。这里我们选用最小描述长度MDL准则。MDL的基本思想很直观:把学习任务看作数据压缩任务,我们要找到一个编码长度最小的模型。具体来说,MDL评分函数的数学表达式是:

s(BD)=f(θ)BLL(BD)s(B|D) = f(\theta)|B| - LL(B|D)

这个公式中各个部分的含义需要详细解释:

  • B|B|表示贝叶斯网的参数个数,也就是这个模型的复杂度
  • f(θ)f(\theta)表示描述每个参数所需要的字节数,这个取决于我们选择的编码方案
  • LL(BD)=i=1mlogP(xi)LL(B|D)=\sum_{i=1}^{m}\log P(\mathbf{x}_{i})贝叶斯网络的对数似然函数,表示模型对数据的拟合程度

这个公式可以这样理解:第一项f(θ)Bf(\theta)|B|计算的是描述贝叶斯网BB本身需要的字节数,而第二项LL(BD)LL(B|D)计算的是用这个概率分布来描述数据集DD需要的字节数。我们的目标就是要找到一个合适的BB,使得s(BD)s(B|D)最小。

关于f(θ)f(\theta)的选择,有两个常见的情况:

  • f(θ)=1f(\theta)=1时,我们认为每个参数用1字节描述,这时候得到的就是AIC评分函数
  • f(θ)=12logmf(\theta)=\frac{1}{2}\log m时(其中mm是样本量),我们得到的就是BIC评分函数

对于公式中的第一项f(θ)Bf(\theta)|B|,需要注意:一旦图的结构GG确定了,那么各个节点之间的父子关系就固定下来了,相应的参数个数也就确定了。所以这一项只依赖于图结构GG的选择。而第二项的对数似然LL(BD)LL(B|D)可以分解为θxiπi\theta_{x_{i}|\pi_{i}}的对数求和,其估计直接从数据集DD中的统计频率计算得到。因此,整个结构学习问题就转化为在DAG空间中寻找最优的图结构GG的问题

遗憾的是,在DAG空间中找最优是一个NP问题,常用启发式的算法完成:

  • 贪心算法
  • 添加约束

总之,经过这样的学习,我们就得到了一个贝叶斯网络 B=(G,Θ)B=(G, \Theta)。这个网络表示了一个关于变量 X\mathbf{X} 的联合概率分布 P(x)P(\mathbf{x}),这就是我们要的。

7.4.2 推断

在学习好一个完整的贝叶斯网络后,我们需要用它对新观测到的数据进行概率推断。这里需要明确几个关键概念:新数据对应的变量称为证据变量(用集合EE表示),其具体观测值记为ee;我们感兴趣的待推测变量称为查询变量(用集合QQ表示),其可能取值记为qq。通过计算后验概率分布

P(Q=qE=e)=P(Q=q,E=e)P(E=e)P(Q=q|E=e)=\frac{P(Q=q,E=e)}{P(E=e)}

我们可以得到查询变量在不同取值下的概率分布,这个过程就是概率推断——后续可以基于该分布进行决策(例如选择概率最大的类别作为分类结果)。 分子部分P(Q=q,E=e)P(Q=q,E=e)可以通过链式法则和条件概率表(CPT)直接计算:

P(Q=q,E=e)=xiP(xiπi)P(Q=q,E=e)=\prod_{x_{i}}P(x_{i}|\pi_{i})

其中πi\pi_i表示xix_i的父节点集合。而分母P(E=e)P(E=e)则需要通过全概率公式计算:

P(E=e)=qP(Q=q,E=e)P(\mathbf{E}=\mathbf{e}) = \sum_{\mathbf{q}'} P(\mathbf{Q}=\mathbf{q}', \mathbf{E}=\mathbf{e})

虽然分母的计算形式与分子类似,但实际计算复杂度是NP-hard的(因为需要穷举所有可能的q\mathbf{q}'组合)。因此在实际应用中,我们常采用近似推断方法,其中吉布斯采样是最常用的技术之一。

吉布斯采样的理论基础是马尔科夫链:在一定条件下,无论初始状态如何,当采样次数趋于无穷时,马尔科夫链一定会收敛到平稳分布。对于贝叶斯网络推断,吉布斯采样的平稳分布恰好就是我们需要的后验分布P(Q=qE=e)P(Q=q|E=e)

书上说吉布斯采样与马尔科夫链的详细理论会在后续章节说明,此处暂时接受这个结论

具体实施步骤

  1. 固定证据变量:始终保持E=eE=e不变。首先初始化所有非证据变量q0\mathbf{q}^{0}(可随机初始化或根据启发式规则赋值)。
  2. 迭代采样:假设当前状态为qt={q1t,...,qQt}\mathbf{q}^{t}=\{q^{t}_{1},...,q^{t}_{|Q|}\},要生成下一个状态qt+1\mathbf{q}^{t+1},需要按顺序遍历每个查询变量QjQQ_j \in Q
  3. 单变量采样:对于每个QjQ_j,根据其条件概率分布采样新值qjt+1q^{t+1}_{j}。这个分布依赖于:Q1,...,Qj1Q_1,...,Q_{j-1}的最新值(即q1t+1,...,qj1t+1q^{t+1}_{1},...,q^{t+1}_{j-1})和Qj+1,...,QQQ_{j+1},...,Q_{|Q|}的旧值(即qj+1t,...,qQtq^{t}_{j+1},...,q^{t}_{|Q|}),以及固定证据E=eE=e。数学表示为:
qjt+1P(QjQ1=q1t+1,...,Qj1=qj1t+1,Qj+1=qj+1t,...,QQ=qQt,E=e)q^{t+1}_{j} \sim P(Q_{j}|Q_{1}=q^{t+1}_{1},...,Q_{j-1}=q^{t+1}_{j-1},Q_{j+1}=q^{t}_{j+1},...,Q_{|Q|}=q^{t}_{|Q|},E=e)
  1. 状态更新:完成所有变量的遍历后,即完成从qt\mathbf{q}^{t}qt+1\mathbf{q}^{t+1}的转移。

计算优化:实际计算时,QjQ_j的条件概率分布仅依赖于其马尔可夫毯MB(Qj)MB(Q_j)(包含父节点、子节点及其它父节点),这使得采样过程可以局部高效完成。

马尔可夫毯相关内容也放在后续里

结果估计:经过TT次采样后,若与q\mathbf{q}相同的样本出现nqn_q次,则后验概率可估计为:

P^(Q=qE=e)=nqT\hat{P}(Q=q|E=e)=\frac{n_{q}}{T}

注意事项

  • 马尔科夫链的收敛速度通常较慢,需要足够多的采样次数。
  • 当网络中存在极端概率(如0或1)时,可能破坏马尔科夫链的遍历性,导致平稳分布不存在。

7.5 EM算法

在之前的学习讨论中,我们隐含地假设训练数据集包含了贝叶斯网络中所有随机变量的观测值,这种情况称为完整数据。在这种理想情况下,模型的对数似然函数 LL(ΘD)LL(\Theta|D) 可以方便地分解为网络中各个变量的条件概率分布的对数之和。此时,我们可以直接使用最大似然估计方法,通过计算训练数据中的统计频次来直接估计每个 CPT 中的概率参数 Θ\Theta

然而在实际应用中,我们经常会遇到训练数据中某些变量的取值是未知或无法直接观测的情况。这些未被观测到的变量被称为隐变量,我们通常用集合 ZZ 来表示,而将可以观测到的变量用集合 XX 表示。隐变量的存在给贝叶斯网络的学习过程带来了挑战,尤其是在进行模型参数 Θ\Theta 的估计时。

当训练数据包含隐变量 ZZ 时,我们无法直接利用包含隐变量的完整数据对数似然 LL(ΘX,Z)=lnP(X,ZΘ)LL(\Theta|X,Z) = \ln P(X,Z|\Theta) 进行计算和最大化,因为 ZZ 的值是未知的。此时,我们的目标转变为最大化仅基于已观测数据 XX 的对数似然,这被称为对数边际似然(log marginal likelihood)LL(ΘX)=lnP(XΘ)LL(\Theta|X)=\ln P(X|\Theta) 这里的 P(XΘ)P(X|\Theta) 被称为边际概率分布,因为它是在联合概率分布 P(X,ZΘ)P(X,Z|\Theta) 的基础上,通过对隐变量 ZZ 的所有可能取值进行求和得到的 LL(ΘX)=lnZP(X,ZΘ)LL(\Theta|X)=\ln \sum_{Z}P(X,Z|\Theta)

由于对数函数内包含求和运算,这个对数边际似然函数通常是非凸且难以直接求解。因此,我们需要采用专门的迭代优化算法,例如期望最大化(EM)算法,来间接地最大化这个对数边际似然,从而估计模型参数 Θ\Theta。在这些算法的迭代过程中,会利用到对隐变量 ZZ当前模型参数下的期望

EM 算法是处理含有隐变量缺失数据的参数学习问题的标准且强大的工具。它是一种迭代算法,通过交替执行两个核心步骤来逐步逼近观测数据似然函数的最大值:

E-步 (Expectation Step):

  • 目标: 在当前参数 Θ(t)\Theta^{(t)} (可以推断隐变量分布P(ZX,Θ(t))P(Z|X,\Theta^{(t)}))和观测数据 XX 下,计算完整数据(包含观测数据 XX 和隐变量 ZZ)的对数似然函数 logP(X,ZΘ)\log P(X, Z | \Theta)期望值,这个期望值记为 Q(ΘΘ(t))Q(\Theta | \Theta^{(t)})
  • Q(ΘΘ(t))=EZX,Θ(t)[logP(X,ZΘ)]Q(\Theta | \Theta^{(t)}) = E_{Z | X, \Theta^{(t)}} [\log P(X, Z | \Theta)]
  • 原理: 这个期望是基于隐变量的后验概率 P(ZX,Θ(t))P(Z | X, \Theta^{(t)}) 计算的,本质上是用概率来填充隐变量。对于贝叶斯网络来说,完整数据对数似然 logP(X,ZΘ)\log P(X, Z | \Theta) 仍然可以分解为基于网络结构中各个变量条件概率的乘积的对数形式。

M-步 (Maximization Step):

  • 目标: 寻找一组新的参数 Θ(t+1)\Theta^{(t+1)},使得在 E-步中计算得到的期望函数 Q(ΘΘ(t))Q(\Theta | \Theta^{(t)}) 达到最大值
  • Θ(t+1)=argmaxΘQ(ΘΘ(t))\Theta^{(t+1)} = \arg\max_{\Theta} Q(\Theta | \Theta^{(t)})
  • 原理: 对于贝叶斯网络,这等价于使用 E-步计算得到的期望统计量(比如期望计数)来直接更新网络参数(例如条件概率表中的条目 θ^ijk(t+1)\hat{\theta}_{ijk}^{(t+1)})。

迭代过程: 算法会反复交替执行 E-步和 M-步,直到满足收敛条件为止。

本文由博客一文多发平台 OpenWrite 发布!