模式识别与机器学习复习笔记(下)

本文是国科大《模式识别与机器学习》课程的简要复习,基于课件然后让ai帮忙补充了一些解释。本文是第九到第十二章。(原本是包括第十三章深度学习部分的,但是单篇文章现在有字数限制,加上第十三章发不出来,那部分只好删掉写在另一篇文章里面)本文章更多是对于课件的知识点的记录总结,找了点例题和讲解,建议结合其他资料或者课件来看。

第九章 降维-特征变换

9.1 线性降维基础与动机

核心问题:高维数据 → 维度灾难

高维空间中,点与点之间的欧氏距离变得非常相似(大部分点都集中在球壳上),导致很多算法失效。

(想象:2维、3维距离分布还比较宽,到10维、100维、1000维后,距离几乎全部挤在非常窄的区间,几乎都差不多远了)

线性降维一般形式

数据:
X=(x1,x2,...,xN)∈RD×NX = (x^1, x^2, \dots, x^N) \in \mathbb{R}^{D \times N}X=(x1,x2,...,xN)∈RD×N (D维,N个样本)

低维表示:
Z=(z1,z2,...,zN)∈RD′×NZ = (z^1, z^2, \dots, z^N) \in \mathbb{R}^{D' \times N}Z=(z1,z2,...,zN)∈RD′×N (D' << D)

投影矩阵:
W=[w1,w2,...,wD′]∈RD×D′W = [w_1, w_2, \dots, w_{D'}] \in \mathbb{R}^{D \times D'}W=[w1,w2,...,wD′]∈RD×D′ (列向量是投影方向)

降维公式(核心公式 ):
Z=WTX或对单个样本z=WTx Z = W^T X \qquad \text{或对单个样本} \quad z = W^T x Z=WTX或对单个样本z=WTx

【直观理解】

想象你在D维空间里有一堆点,你选D'个互相正交的"新坐标轴"(就是w1到wD'),然后把所有点投影到这些新轴上,得到的新坐标就是z。这就是线性降维最本质的操作。


这一章重点在mds和pca算法上:

MDS vs PCA 快速对比表

项目 MDS PCA
输入 距离矩阵 D 原始数据矩阵 X
目标 保持点对间距离 最小重构误差 或 最大方差
是否需要原始坐标 不需要 需要
计算复杂度 O(N³)(特征分解) O(min(N,D)³) 或 SVD 更快
几何意义 全局距离保持 最大信息量方向投影
典型应用 心理度量、城市嵌入 特征提取、降噪、人脸识别

9.2 多维缩放 MDS(经典距离保持方法)

核心目标只给你距离矩阵 ,恢复出点的低维坐标,使得低维欧氏距离尽可能等于原始距离(距离保持

典型应用场景:城市间距离表 → 画地图(经典例子)

经典MDS算法核心步骤

(下面公式我跳过了推导过程,不好理解的话看下面例题就行。考试的话能记住公式会算应该够了)

  1. 已知距离矩阵 D=[dij]D = [d_{ij}]D=[dij] (dijd_{ij}dij是第i个点到第j个点的距离)

  2. 构造内积矩阵 B

    假设低维点已中心化(∑zi=0\sum z^i = 0∑zi=0),则:

    dij2=∥zi∥2+∥zj∥2−2(zi)Tzj d_{ij}^2 = \|z^i\|^2 + \|z^j\|^2 - 2 (z^i)^T z^j dij2=∥zi∥2+∥zj∥2−2(zi)Tzj

    经过一系列行/列求和 + 中心化操作,最终得到:

    bij=−12(dij2−1N∑kdik2−1N∑kdkj2+1N2∑k,ldkl2) b_{ij} = -\frac{1}{2} \left( d_{ij}^2 - \frac{1}{N}\sum_k d_{ik}^2 - \frac{1}{N}\sum_k d_{kj}^2 + \frac{1}{N^2}\sum_{k,l} d_{kl}^2 \right) bij=−21 dij2−N1k∑dik2−N1k∑dkj2+N21k,l∑dkl2

bij=−12(dij2−行平均−列平均+全局平均)b_{ij} = -\frac{1}{2} \Bigg( d_{ij}^2 \quad {\color{red} - \text{行平均} } \quad {\color{blue} - \text{列平均} } \quad {\color{purple} + \text{全局平均} } \Bigg)bij=−21(dij2−行平均−列平均+全局平均)

矩阵形式:
B=−12JD(2)JJ=I−1N11T(中心化矩阵) B = -\frac{1}{2} J D^{(2)} J \qquad J = I - \frac{1}{N} \mathbf{1}\mathbf{1}^T \quad \text{(中心化矩阵)}B=−21JD(2)JJ=I−N111T(中心化矩阵)

  1. 对 B 做特征值分解

    B=VΛVT B = V \Lambda V^T B=VΛVT

  2. 取前 D' 个最大特征值及其向量:

    Z=Λ~1/2V~T Z = \tilde{\Lambda}^{1/2} \tilde{V}^T Z=Λ~1/2V~T

【直观理解】

MDS 就像"只知道城市间开车距离,却要画出一张尽量准确的地图"。它通过数学手段把"距离"转换成了"内积",再用特征分解直接得到坐标------非常优雅,但计算量大(O(N³))。

zzz = (z¹, z², ..., zᴺ) 就是我们最终想要得到的低维坐标

例题

假设3个城市A、B、C在一条直线上,距离矩阵D已知(单位:km)。

目标:用MDS降到1维(D'=1),恢复坐标。

输入:

距离矩阵D(对称,N=3):
D=(012101210)D = \begin{pmatrix} 0 & 1 & 2 \\ 1 & 0 & 1 \\ 2 & 1 & 0 \end{pmatrix}D= 012101210

矩阵是任意两个城市之间的距离,比如A到B=1, A到C=2, B到C=1

直线排列:A--1--B--1--C

步骤1:计算D的平方矩阵D(2)D^{(2)}D(2)(目的:距离平方便于内积公式)。
D(2)=(014101410)D^{(2)} = \begin{pmatrix} 0 & 1 & 4 \\ 1 & 0 & 1 \\ 4 & 1 & 0 \end{pmatrix}D(2)= 014101410

步骤2:计算行均值、列均值、总均值(目的:中心化,消除偏移)。

行均值(每行平均距离平方):

行1(1N∑jd1j2\frac{1}{N} \sum_j d_{1j}^2N1∑jd1j2): (0+1+4)/3 = 5/3

行2: (1+0+1)/3 = 2/3

行3: (4+1+0)/3 = 5/3

列均值同上(D是对称的)。

总均值(全局平均距离平方1N2∑i∑jdij2\frac{1}{N^2}\sum_i \sum_j d_{ij}^2N21∑i∑jdij2):所有元素和/9 = (0+1+4 +1+0+1 +4+1+0)/9 = 12/9 = 4/3

即:

1N∑jd1j2, 1N∑jd2j2, 1N∑jd3j2\]=\[5/3, 2/3, 5/3\]\\left\[ \\frac{1}{N} \\sum_j d_{1j}\^2, \\ \\frac{1}{N} \\sum_j d_{2j}\^2, \\ \\frac{1}{N} \\sum_j d_{3j}\^2 \\right\] = \[5/3, \\ 2/3, \\ 5/3\]\[N1∑jd1j2, N1∑jd2j2, N1∑jd3j2\]=\[5/3, 2/3, 5/3

步骤3:计算内积矩阵B(用公式,这里仔细看一下是哪个对应哪个)。

对每个bijb_{ij}bij:
bij=−12(dij2−1N∑kdik2−1N∑kdkj2+1N2∑k,ldkl2)b_{ij} = -\frac{1}{2} \left( d_{ij}^2 - \frac{1}{N}\sum_k d_{ik}^2 - \frac{1}{N}\sum_k d_{kj}^2 + \frac{1}{N^2}\sum_{k,l} d_{kl}^2 \right)bij=−21 dij2−N1k∑dik2−N1k∑dkj2+N21k,l∑dkl2
bij=−12(dij2−第i行平均−第j列平均+全局平均)b_{ij} = -\frac{1}{2} \Bigg( d_{ij}^2 \quad {\color{red} - \text{第i行平均} } \quad {\color{blue} - \text{第j列平均} } \quad {\color{purple} + \text{全局平均} } \Bigg)bij=−21(dij2−第i行平均−第j列平均+全局平均)

计算后:
b11=−12(0−5/3−5/3+4/3)=−12(−6/3)=1b_{11} = -\frac{1}{2} (0 - 5/3 - 5/3 + 4/3) = -\frac{1}{2} (-6/3) = \mathbf{1}b11=−21(0−5/3−5/3+4/3)=−21(−6/3)=1
b12=−12(1−5/3−2/3+4/3)=−12(0)=0b_{12} = -\frac{1}{2} (1 - 5/3 - 2/3 + 4/3) = -\frac{1}{2} (0) = \mathbf{0}b12=−21(1−5/3−2/3+4/3)=−21(0)=0
b13=−12(4−5/3−5/3+4/3)=−12(2)=−1b_{13} = -\frac{1}{2} (4 - 5/3 - 5/3 + 4/3) = -\frac{1}{2} (2) = \mathbf{-1}b13=−21(4−5/3−5/3+4/3)=−21(2)=−1
b22=−12(0−2/3−2/3+4/3)=−12(0)=0b_{22} = -\frac{1}{2} (0 - 2/3 - 2/3 + 4/3) = -\frac{1}{2} (0) = \mathbf{0}b22=−21(0−2/3−2/3+4/3)=−21(0)=0

B=(10−1000−101)B = \begin{pmatrix} 1 & 0 & -1 \\ 0 & 0 & 0 \\ -1 & 0 & 1 \end{pmatrix}B= 10−1000−101

步骤4:对B做特征值分解(动机:提取主成分坐标)。

我们需要找到 BBB 的特征值 λ\lambdaλ 和特征向量 vvv。解方程 ∣B−λI∣=0|B - \lambda I| = 0∣B−λI∣=0:∣1−λ0−10−λ0−101−λ∣=0  ⟹  −λ((1−λ)2−1)=0\begin{vmatrix} 1-\lambda & 0 & -1 \\ 0 & -\lambda & 0 \\ -1 & 0 & 1-\lambda \end{vmatrix} = 0 \implies -\lambda((1-\lambda)^2 - 1) = 0 1−λ0−10−λ0−101−λ =0⟹−λ((1−λ)2−1)=0解得特征值为:λ1=2,λ2=0,λ3=0\lambda_1 = 2, \lambda_2 = 0, \lambda_3 = 0λ1=2,λ2=0,λ3=0。因为我们目标是降到 1维(D′=1D'=1D′=1),所以只取最大的特征值 λ1=2\lambda_1 = 2λ1=2。

求 λ1=2\lambda_1 = 2λ1=2 对应的单位特征向量 v1v_1v1:(B−2I)v=0  ⟹  (−10−10−20−10−1)(xyz)=0  ⟹  y=0,x=−z(B - 2I)v = 0 \implies \begin{pmatrix} -1 & 0 & -1 \\ 0 & -2 & 0 \\ -1 & 0 & -1 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} = 0 \implies y=0, x=-z(B−2I)v=0⟹ −10−10−20−10−1 xyz =0⟹y=0,x=−z归一化后得:v1=(120−12)v_1 = \begin{pmatrix} \frac{1}{\sqrt{2}} \\ 0 \\ -\frac{1}{\sqrt{2}} \end{pmatrix}v1= 2 10−2 1

步骤5:取前D'=1个,计算Z(低维表示)。

恢复坐标 ZZZ公式为 Z=λ1⋅v1Z = \sqrt{\lambda_1} \cdot v_1Z=λ1 ⋅v1:Z=2⋅(120−12)=(10−1)Z = \sqrt{2} \cdot \begin{pmatrix} \frac{1}{\sqrt{2}} \\ 0 \\ -\frac{1}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} 1 \\ 0 \\ -1 \end{pmatrix}Z=2 ⋅ 2 10−2 1 = 10−1

最终结果:

恢复出的1维坐标为:城市 A:1 城市 B:0 城市 C:-1

9.3 主成分分析 PCA

核心目标:找数据最重要方向(主成分),投影后保留最大信息(方差)或最小重构误差。

PCA 是线性、无监督,常用于降噪、压缩、特征提取。

(PCA 是前面学过的 K-means 聚类算法的"松弛"版本,在实际应用中,人们经常在运行 K-means 之前先运行 PCA)

PCA 算法过程有两种常见实现(特征分解和 SVD)重点还是看例题就行。

输入:

数据矩阵X=(x1,...,xN)∈RD×NX=(x^1,\dots,x^N)\in\mathbb{R}^{D\times N}X=(x1,...,xN)∈RD×N(D 维,N 个样本)

目标低维维数D′D'D′

训练步骤(两种主流实现)

方式1:协方差矩阵 + 特征分解(最经典)

计算均值向量:xˉ=1N∑j=1Nxj\bar{x}=\frac{1}{N}\sum_{j=1}^N x^jxˉ=N1∑j=1Nxj

中心化:xi←xi−xˉx^i \leftarrow x^i - \bar{x}xi←xi−xˉ(对所有样本做,X 变为中心化矩阵)

计算协方差矩阵:S=XXT∈RD×DS=XX^T\in\mathbb{R}^{D\times D}S=XXT∈RD×D(注意:课件中直接用XXTXX^TXXT,未除以N或N-1)

对SSS进行特征值分解:S=WΛWTS=W\Lambda W^TS=WΛWT

得到特征值λ1≥λ2≥⋯≥λD\lambda_1\ge\lambda_2\ge\dots\ge\lambda_Dλ1≥λ2≥⋯≥λD

对应特征向量w1,w2,...,wDw_1,w_2,\dots,w_Dw1,w2,...,wD(已正交归一化)

取前D′D'D′个最大特征值对应的特征向量,组成投影矩阵:
W=(w1,w2,...,wD′)∈RD×D′W=(w_1,w_2,\dots,w_{D'})\in\mathbb{R}^{D\times D'}W=(w1,w2,...,wD′)∈RD×D′

方式2:直接用 SVD(数值更稳定)

同上:中心化XXX(均值xˉ\bar{x}xˉ保存,用于测试)

对中心化后的XXX做奇异值分解:X=UΣVTX=U\Sigma V^TX=UΣVT
U∈RD×DU\in\mathbb{R}^{D\times D}U∈RD×D(左奇异向量矩阵)
Σ∈RD×N\Sigma\in\mathbb{R}^{D\times N}Σ∈RD×N(奇异值对角矩阵)
V∈RN×NV\in\mathbb{R}^{N\times N}V∈RN×N

取UUU的前D′D'D′列:W=U[:,1:D′]W=U[:,1:D']W=U[:,1:D′](即u1,u2,...,uD′u_1,u_2,\dots,u_{D'}u1,u2,...,uD′)

测试/投影新样本 x(两种方式通用):

中心化:x′=x−xˉx'=x-\bar{x}x′=x−xˉ

得到低维表示:z=WTx′∈RD′z=W^Tx'\in\mathbb{R}^{D'}z=WTx′∈RD′

(可选)重构:x^=Wz+xˉ=WWT(x−xˉ)+xˉ\hat{x}=Wz+\bar{x}=WW^T(x-\bar{x})+\bar{x}x^=Wz+xˉ=WWT(x−xˉ)+xˉ

选择D′D'D′的方法:

方差保留比例(最常用):
∑d=1D′λd∑d=1Dλd≥t\frac{\sum_{d=1}^{D'}\lambda_d}{\sum_{d=1}^D\lambda_d}\ge t∑d=1Dλd∑d=1D′λd≥t(t=0.85~0.95)

交叉验证:用低维 z 做下游任务(如 KNN 分类),选效果最好的D′D'D′

可视化:看特征值衰减曲线(课件 MNIST 图),拐点后可截断

【直观理解】

PCA 就是在"找数据最拉伸的方向"(最大方差),把所有点投影到这些方向上。过程非常机械:中心化 → 算协方差/SVD → 取前k个方向 → 投影。

PCA-(协方差矩阵 + 特征分解) 例题详解(2D → 1D)

原始数据(3个样本,2维,未中心化):

样本1:(3,4)(3,4)(3,4)

样本2:(1,2)(1,2)(1,2)

样本3:(2,0)(2,0)(2,0)

第一步:计算均值并进行"去中心化"

PCA 处理的第一步必须是将坐标原点移动到数据的中心(均值点)。

计算均值 μ\muμ:
xxx 轴均值:μx=3+1+23=63=2\mu_x = \frac{3+1+2}{3} = \frac{6}{3} = 2μx=33+1+2=36=2
yyy 轴均值:μy=4+2+03=63=2\mu_y = \frac{4+2+0}{3} = \frac{6}{3} = 2μy=34+2+0=36=2

均值向量 μ=(2,2)\mu = (2, 2)μ=(2,2)

样本去中心化(每个样本减去均值):

新样本1:(3−2,4−2)=(1,2)(3-2, 4-2) = (1, 2)(3−2,4−2)=(1,2)

新样本2:(1−2,2−2)=(−1,0)(1-2, 2-2) = (-1, 0)(1−2,2−2)=(−1,0)

新样本3:(2−2,0−2)=(0,−2)(2-2, 0-2) = (0, -2)(2−2,0−2)=(0,−2)

现在我们的去中心化矩阵 XXX(按列排列样本)为:X=[1−1020−2]X = \begin{bmatrix} 1 & -1 & 0 \\ 2 & 0 & -2 \end{bmatrix}X=[12−100−2]

第二步:计算协方差矩阵
Σ\SigmaΣ协方差矩阵公式为 Σ=1NXXT\Sigma = \frac{1}{N} XX^TΣ=N1XXT(

有时分母用 N−1N-1N−1,这里我们按常规 PCA 教学中的 NNN 来计算):

计算 XXTXX^TXXT:XXT=[1−1020−2][12−100−2]XX^T = \begin{bmatrix} 1 & -1 & 0 \\ 2 & 0 & -2 \end{bmatrix} \begin{bmatrix} 1 & 2 \\ -1 & 0 \\ 0 & -2 \end{bmatrix}XXT=[12−100−2] 1−1020−2

XXT=[2228]XX^T = \begin{bmatrix} 2 & 2 \\ 2 & 8 \end{bmatrix}XXT=[2228]

求协方差矩阵 Σ\SigmaΣ:Σ=13[2228]=[2/32/32/38/3]\Sigma = \frac{1}{3} \begin{bmatrix} 2 & 2 \\ 2 & 8 \end{bmatrix} = \begin{bmatrix} 2/3 & 2/3 \\ 2/3 & 8/3 \end{bmatrix}Σ=31[2228]=[2/32/32/38/3]

(注:为了计算方便,我们直接对 XXTXX^TXXT 进行特征分解,特征向量是一样的,只是特征值差了 1/N1/N1/N 倍)

第三步:特征分解(求解特征值和特征向量)

我们直接解刚才那个矩阵 A=[2228]A = \begin{bmatrix} 2 & 2 \\ 2 & 8 \end{bmatrix}A=[2228]:

解特征方程 ∣A−λI∣=0|A - \lambda I| = 0∣A−λI∣=0:

方程为 λ2−10λ+12=0\lambda^2 - 10\lambda + 12 = 0λ2−10λ+12=0。

解得:λ1=5+13≈8.61\lambda_1 = 5 + \sqrt{13} \approx 8.61λ1=5+13 ≈8.61(最大特征值)λ2=5−13≈1.39\lambda_2 = 5 - \sqrt{13} \approx 1.39λ2=5−13 ≈1.39求最大特征值对应的特征向量 v1v_1v1:

代入 λ1=5+13\lambda_1 = 5 + \sqrt{13}λ1=5+13 到 (A−λI)v=0(A-\lambda I)v=0(A−λI)v=0:

2−(5+13)228−(5+13)\]\[xy\]=\[00\]  ⟹  \[−3−13223−13\]\[xy\]=\[00\]\\begin{bmatrix} 2-(5+\\sqrt{13}) \& 2 \\\\ 2 \& 8-(5+\\sqrt{13}) \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\end{bmatrix} \\implies \\begin{bmatrix} -3-\\sqrt{13} \& 2 \\\\ 2 \& 3-\\sqrt{13} \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\end{bmatrix}\[2−(5+13 )228−(5+13 )\]\[xy\]=\[00\]⟹\[−3−13 223−13 \]\[xy\]=\[00

取 2x+(3−13)y=02x + (3-\sqrt{13})y = 02x+(3−13 )y=0,得 v1≈[0.29,0.96]Tv_1 \approx [0.29, 0.96]^Tv1≈[0.29,0.96]T(已单位化)。这个向量就是主成分方向。

第四步:降维投影(2D → 1D)

目标是将 2 维的去中心化数据投影到 v1v_1v1 方向上,得到 1 维坐标 zzz。

公式为:zi=v1T⋅xcentered_iz_i = v_1^T \cdot x_{centered\_i}zi=v1T⋅xcentered_i

样本1:[0.29,0.96]⋅[12]=0.29+1.92=2.21[0.29, 0.96] \cdot \begin{bmatrix} 1 \\ 2 \end{bmatrix} = 0.29 + 1.92 = \mathbf{2.21}[0.29,0.96]⋅[12]=0.29+1.92=2.21

样本2:[0.29,0.96]⋅[−10]=−0.29[0.29, 0.96] \cdot \begin{bmatrix} -1 \\ 0 \end{bmatrix} = \mathbf{-0.29}[0.29,0.96]⋅[−10]=−0.29

样本3:[0.29,0.96]⋅[0−2]=−1.92[0.29, 0.96] \cdot \begin{bmatrix} 0 \\ -2 \end{bmatrix} = \mathbf{-1.92}[0.29,0.96]⋅[0−2]=−1.92

总结

原始数据:(3,4),(1,2),(2,0)(3,4), (1,2), (2,0)(3,4),(1,2),(2,0)

1维表示(压缩后坐标):2.21,−0.29,−1.922.21, -0.29, -1.922.21,−0.29,−1.92

这三个数字就是降维后的结果。它们保留了原始数据中最大的方差(即样本之间的差异性)。

对比:MDS 是通过距离矩阵来恢复坐标,不需要知道原始坐标。PCA 是通过协方差矩阵来找投影方向,需要原始特征空间。

如果是svd方式计算,就是直接对 XXX 进行分解:X=UΣVTX = U\Sigma V^TX=UΣVT。

9.4 非线性降维:核PCA(Kernelized PCA)

这里到本章后面更侧重概念理解,上面两个小节会侧重计算过程(因为后面的方法在考试里面很难出计算题)。

为什么用核PCA?(核心动机)

线性PCA在数据呈非线性结构时失效

现实数据常有非线性(如人脸光照变化、基因表达曲线),需要先非线性映射到高维再线性降维,等价于原空间非线性降维。

核PCA就是"聪明实现":用核函数隐式升维,不需显式计算高维坐标。

性质与优缺点

  • 性质:升维与降维统一、非线性与线性统一。核选择决定效果(高斯核最常用,捕捉局部非线性;多项式核捕全局)。
  • 优点:处理非线性信号好,无迭代、无局部最小。
  • 缺点:需调核参数,N大时内存/时间爆炸(O(N³)),对新样本投影需算所有训练点核(无显式W)。
  • 适用场景:小样本非线性数据(如图像特征提取早期用)。

【直观理解】

普通PCA像用直尺量弯路,核PCA像先把弯纸"卷成筒"(高维展开成线性),再用直尺量------纸还是那张纸,但弯曲被"拉平"了。核函数是"魔术手",不用真卷纸,只算"相似度"就行。


9.5 流形学习

为什么用流形学习?(核心假设与动机)

高维数据常躺在低维"流形"上(局部像欧氏空间的弯曲表面,如下图左边的瑞士卷)。

欧氏距离在高维失效(3D嵌入2D数据,欧氏距不准)。

流形学习假设数据均匀分布在低维流形上,想恢复内在几何结构 (测地距离:沿曲面最短路径)。

测地距离性质

  • 近点:用欧氏距近似。
  • 远点:通过邻域点链累加(像图最短路径)。

各种流形方法区别

(这里不再一个一个介绍,后面章末总结那里加上了前面的pca,mds一起对比,更详细的可自行查阅学习)

整体性质

  • 全局方法(ISOMAP):适合展开型流形(如卷曲平面),保留远距。
  • 局部方法(LLE、Laplacian):适合复杂局部结构,但全局可能扭曲。
  • t-SNE:最实用可视化工具,局部簇清晰,但距离/尺度无意义(别用下游任务)。
  • 共同缺点:大多对新样本扩展难(非参数),噪声/采样密度敏感。
  • 扩展:UMAP(页78~84,未在旧课件但推荐):更快、保留全局更好、可参数化、对新样本友好,当代替代t-SNE首选。

【直观理解】

流形像"皱巴巴的纸":高维观察皱巴巴,低维想展开平。ISOMAP像"拉直所有皱";LLE像"局部小块平整";t-SNE像"用力把簇分开,避免挤一起"(拥挤问题)。现实:MNIST手写数字、脸部表情常在低维流形上。


章末总结

本章所有降维方法大对比

类型 方法 保持什么 线性/非线性 全局/局部 典型考点
线性 MDS 距离 线性 全局 输入距离矩阵,无需坐标 补充:可通过平移/旋转/镜像得到多个等价解;经典算法基于双中心化 + 特征分解;常与ISOMAP对比
线性 PCA 方差/重构 线性 全局 最常用,二阶统计 补充:需中心化数据;最大方差方向 = 最小重构误差方向;特征值大小反映保留方差比例;SVD实现更稳定
非线性 核PCA 高维方差 非线性 全局 核技巧,升维后线性 补充:不显式计算高维映射;需选择核函数及参数(如高斯核的σ);对新样本投影需计算所有训练样本的核;计算复杂度O(N³)
流形 ISOMAP 全局测地距 非线性 全局 最短路径 + MDS 补充:用k-NN或ε球构建邻接图;测地距离 ≈ 图上最短路径;对噪声和采样密度不均敏感;典型应用:瑞士卷展开
流形 LLE 局部重构 非线性 局部 邻点线性表示 补充:每个点由最近邻线性重构;求解稀疏重构权重 → 低维嵌入保持权重;对局部空洞(holes)敏感;无参数迭代
流形 t-SNE 局部相似 非线性 局部优先 可视化,拥挤问题,随机性 补充:高维用高斯分布,低维用t分布解决拥挤问题;结果受随机初始化影响大;不适合除可视化外的下游任务;不保留全局距离

第十章 半监督学习

这一章虽然理论较多,但其核心思想非常直观------即"如何利用大量廉价的未标注数据来辅助少量昂贵的标注数据"。

10.1 引言与基本概念

  1. 为什么要用半监督学习?

在现实世界中,获取有标注数据 (Labeled Data) 往往非常昂贵且稀缺(需要专家人工标注),而无标注数据 (Unlabeled Data) 却极其丰富且廉价 。

全监督学习的成本极高。

半监督学习的目标:给定少量标注数据 DL\mathcal{D}_LDL 和大量无标注数据 DU\mathcal{D}_UDU(通常 U≫LU \gg LU≫L),我们希望结合两者,训练出一个比"仅用标注数据"更好的模型 。

10.2 三大核心假设和归纳式的概念

如果无标注数据和有标注数据之间没有任何联系,那么半监督学习是不可能成功的 。算法之所以有效,是因为数据分布满足以下某种假设。

  1. 平滑性假设 (Smoothness Assumption)

    定义:如果高密度区域中的两个点 x1,x2x_1, x_2x1,x2 距离很近,那么它们的输出(标签)y1,y2y_1, y_2y1,y2 也应该很近 。

    推论:如果两个点之间有一条高密度路径相连,那么它们很有可能属于同一类 。

    通俗解释:"近朱者赤,近墨者黑" (Near by ink is black) 。

  2. 聚类假设 (Cluster Assumption)
    定义 :如果两个点在同一个簇(Cluster)中,那么它们很有可能属于同一个类别 。
    等价形式 :低密度分割。即决策边界应该尽量通过数据分布稀疏(低密度)的区域,而不应该切断高密度的簇 。关系:这是平滑性假设的一个特例 。
    直观理解 :想象你在切蛋糕(找分类边界)。

    平滑性:蛋糕上的奶油是连在一起的,你不会觉得这块奶油的一半是甜的,另一半是咸的。低密度分割:切蛋糕时,你会顺着蛋糕之间的缝隙切(低密度区),而不会硬生生把一个完整的草莓(高密度簇)切成两半。

  3. 流形假设 (Manifold Assumption)
    定义 :高维数据(如图像、文本)通常分布在一个低维的流形结构上 。
    应用 :在流形上邻近的样本(而不是原始欧氏空间邻近)拥有相似的输出 。

    这通常用于基于图的算法中,通过图结构来近似流形。
    直观理解 :想象一个瑞士卷 (Swiss Roll) 蛋糕。在三维空间看,蛋糕卷的一层和下一层可能挨得很近(欧氏距离小),但它们其实属于不同的层(类别不同)。流形假设就是要把这个卷展开成二维的平面,只有在展开后的平面上挨得近的点,才是真正的相似。

归纳式的这一类方法就像是一个"循环增强器"。

输入:一个现成的监督学习算法(如逻辑回归、SVM、KNN) + 少量标注数据 + 大量无标注数据。

输出:一个在增强数据集上训练好的更强的分类器。

10.3 自我训练

自我训练和下一节的多视角学习都是Wrapper Methods(包装式方法),即在现有的监督学习算法外层"套"一个半监督的循环。

(这一章多个算法之间的区分和对比放在最后总结那里,如果不涉及计算题目的话,这里面几个方法只说一下概念)

算法流程自我训练是最简单的半监督学习方法,其核心逻辑是**"滚雪球"** 。

  1. 初始阶段:仅使用少量的有标注数据 DL\mathcal{D}_LDL 训练一个初始模型 fff 。
  2. 循环标注:利用模型 fff 对大量的无标注数据 DU\mathcal{D}_UDU 进行预测,计算每个样本的置信度 。
  3. 扩充集合:挑选出模型"最笃定"(置信度最高)的一批样本,给它们打上伪标签 (Pseudo-labels),并把它们从 DU\mathcal{D}_UDU 挪到 DL\mathcal{D}_LDL 中 。
  4. 模型进化:使用更新后的有标注集合重新训练模型 fff,如此往复,直到 DU\mathcal{D}_UDU 为空或满足停止条件。

【直观理解】 自我训练就像是一个 "闭门造车"的学生 。他先自学了一点基础(初始模型),然后开始做大量的练习题(无标注数据)。他觉得自己最有把握的那些题,就直接当成标准答案(伪标签)背下来,并以此为基础继续往下学。

10.4 协同训练与多视角学习

核心思想:多视角互补

协同训练的前提是数据具有多视角 (Multi-view) 特征 。

例子:描述一个网页,视角1可以是"网页上的文字",视角2可以是"指向该网页的链接文本"。这两个视角虽然来源不同,但描述的是同一个东西 。

逻辑:如果两个视角都是"充分"的(单独一个视角就能分类),且"相互独立"(给定类别时,两个视角的特征不相关),那么我们就可以让两个模型互相教对方。

算法步骤:

  1. 基于视角1的特征训练模型 f1f_1f1,基于视角2训练 f2f_2f2。
  2. 让 f1f_1f1 在无标注数据中找它最自信的样本,标注后送给 f2f_2f2 作为训练集。
  3. 同时,让 f2f_2f2 找它最自信的样本,标注后送给 f1f_1f1 训练。
  4. 两个模型交叉授课,直到达到平衡。

【直观理解】 协同训练就像是 "两个互补的学生"在一起复习。学生A擅长文科,学生B擅长理科。遇到一张综合试卷(无标注数据),学生A先把文科题做了并教给B,学生B把理科题做了并教给A。通过这种"我教你,你教我" 的方式,两个人的综合水平都提高了。

10.5 生成式模型

生成式模型假设所有数据(无论有标还是无标)都是由同一个潜在的概率混合模型生成的。半监督学习的任务就是通过观测到的样本,利用 EM 算法 把这个模型的参数"抠"出来。

数学表达与推导:

假设数据由 KKK 个混合成分(组件)组成,每个成分对应一个类别。

其概率密度函数为:p(x∣Θ)=∑j=1Kαj⋅p(x∣θj)p(x|\Theta) = \sum_{j=1}^{K} \alpha_j \cdot p(x|\theta_j)p(x∣Θ)=j=1∑Kαj⋅p(x∣θj)αj\alpha_jαj:第 jjj 个混合成分的权重(即该类发生的先验概率),满足 ∑αj=1\sum \alpha_j = 1∑αj=1。
θj\theta_jθj:第 jjj 个成分的参数(如高斯分布的均值 μ\muμ 和方差 Σ\SigmaΣ)。
Θ\ThetaΘ:模型的所有参数集合。

推导动机: 对于有标注数据 (xi,yi)(x_i, y_i)(xi,yi),我们知道它属于哪个成分;

但对于无标注数据 xjx_jxj,我们不知道它属于谁。因此,我们需要最大化混合似然函数:L(Θ)=∑(x,y)∈DLln⁡(αyp(x∣θy))+∑x∈DUln⁡(∑j=1Kαjp(x∣θj))L(\Theta) = \sum_{(x,y) \in \mathcal{D}L} \ln(\alpha_y p(x|\theta_y)) + \sum{x \in \mathcal{D}U} \ln \left( \sum{j=1}^K \alpha_j p(x|\theta_j) \right)L(Θ)=(x,y)∈DL∑ln(αyp(x∣θy))+x∈DU∑ln(j=1∑Kαjp(x∣θj))左半部分:有监督部分,标签已知,直接计算。

右半部分:无监督部分,标签是隐变量,需要对所有可能的 KKK 个类求和。

上面两个公式是推导,实际运算的时候还会有个EM算法,下面会结合例题来理解EM算法在半监督学习下的使用。

在全监督学习中,我们直接统计频率;在纯无监督(聚类)中,我们只看 QijQ_{ij}Qij。

半监督的特殊点在于: 更新模型参数时,要把"确定性信息"(有标数据)和"概率性信息"(无标数据)加权合并。

EM 算法是两步循环,公式逻辑如下:

(前面的聚类那一节里面提到过em算法,直接使用即可)

E-步 :算"归属感" (Expectation)计算无标注样本 xix_ixi 属于第 jjj 类的概率(即响应度):Qij=αj⋅p(xi∣θj)∑k=1Kαk⋅p(xi∣θk)Q_{ij} = \frac{\alpha_j \cdot p(x_i | \theta_j)}{\sum_{k=1}^K \alpha_k \cdot p(x_i | \theta_k)}Qij=∑k=1Kαk⋅p(xi∣θk)αj⋅p(xi∣θj)

注意:这其实就是贝叶斯公式。分子是"我想去的那个类的概率",分母是"所有可能去的类的总概率"。αj\alpha_jαj 表示在还没看到具体的特征 xxx 之前,样本属于第 jjj 类的天然概率。手算题中,为了简化计算过程,老师通常会假设每一类出现的概率是均等的。

M-步 :算"新参数" (Maximization)以更新均值 μj\mu_jμj 为例,这是最常考的计算:
μj=∑x∈DL,y=jx+∑x∈DUQij⋅xNj+∑x∈DUQij\mu_j = \frac{\sum_{x \in \mathcal{D}L, y=j} x + \sum{x \in \mathcal{D}U} Q{ij} \cdot x}{N_j + \sum_{x \in \mathcal{D}U} Q{ij}}μj=Nj+∑x∈DUQij∑x∈DL,y=jx+∑x∈DUQij⋅x

变量解释:

分子左边:有标数据里,属于 jjj 类的样本直接相加。

分子右边:无标数据里,所有样本乘以它们属于 jjj 类的概率。

分母:这一类"名义上"的总人数(整数个有标样本 + 概率化后的无标样本)。

把它想象成 "班级合并" 。有标数据是"正式生",1个人就计1票;无标数据是"旁听生",他们只有 QijQ_{ij}Qij 的票权(比如 0.5 票)。更新班级平均分(均值)时,把所有人的"票权 ×\times× 分数"加起来,除以"总票数"即可。

权重 αj\alpha_jαj 的更新:别忘了混合比例 αj\alpha_jαj 也要更新。αj=该类总票数总样本量 (L+U)\alpha_j = \frac{\text{该类总票数}}{\text{总样本量 } (L+U)}αj=总样本量 (L+U)该类总票数初值问题:计算题通常会给你一个初始的 μ\muμ 和 σ\sigmaσ,第一步永远是先做 E-步。

典型例题

题目:已知两类 A 和 B。

有标:x1=1x_1=1x1=1 (A类)。无标:x2=3x_2=3x2=3。

已知:当前参数 μA=1,μB=5\mu_A=1, \mu_B=5μA=1,μB=5,且 A、B 两类先验概率 α\alphaα 相等,方差相等。

求:经过一轮 EM 后,新的 μA\mu_AμA 是多少?

第一步 (E-步):看无标点 x2=3x_2=3x2=3。

它到 μA=1\mu_A=1μA=1 距离是 2,到 μB=5\mu_B=5μB=5 距离也是 2。

所以它属于 A 和 B 的概率平分:Q2A=0.5,Q2B=0.5Q_{2A} = 0.5, Q_{2B} = 0.5Q2A=0.5,Q2B=0.5。

展开说一下这个计算

根据贝叶斯准则,无标注样本 xix_ixi 属于 AAA 类的概率 QiAQ_{iA}QiA 为:QiA=αA⋅12πσAexp⁡(−(xi−μA)22σA2)αA⋅12πσAexp⁡(−(xi−μA)22σA2)+αB⋅12πσBexp⁡(−(xi−μB)22σB2)Q_{iA} = \frac{\alpha_A \cdot \frac{1}{\sqrt{2\pi}\sigma_A} \exp\left( -\frac{(x_i - \mu_A)^2}{2\sigma_A^2} \right)}{\alpha_A \cdot \frac{1}{\sqrt{2\pi}\sigma_A} \exp\left( -\frac{(x_i - \mu_A)^2}{2\sigma_A^2} \right) + \alpha_B \cdot \frac{1}{\sqrt{2\pi}\sigma_B} \exp\left( -\frac{(x_i - \mu_B)^2}{2\sigma_B^2} \right)}QiA=αA⋅2π σA1exp(−2σA2(xi−μA)2)+αB⋅2π σB1exp(−2σB2(xi−μB)2)αA⋅2π σA1exp(−2σA2(xi−μA)2)

在手工计算题中,老师为了不考查开方计算能力,通常会设定 αA=αB\alpha_A = \alpha_BαA=αB 且 σA=σB=σ\sigma_A = \sigma_B = \sigmaσA=σB=σ。此时,分子分母中所有的系数 α,2π,σ\alpha, \sqrt{2\pi}, \sigmaα,2π ,σ 全部约掉。公式简化为:QiA=exp⁡(−(xi−μA)22σ2)exp⁡(−(xi−μA)22σ2)+exp⁡(−(xi−μB)22σ2)Q_{iA} = \frac{\exp\left( -\frac{(x_i - \mu_A)^2}{2\sigma^2} \right)}{\exp\left( -\frac{(x_i - \mu_A)^2}{2\sigma^2} \right) + \exp\left( -\frac{(x_i - \mu_B)^2}{2\sigma^2} \right)}QiA=exp(−2σ2(xi−μA)2)+exp(−2σ2(xi−μB)2)exp(−2σ2(xi−μA)2)

条件:x2=3,μA=1,μB=5x_2 = 3, \mu_A = 1, \mu_B = 5x2=3,μA=1,μB=5,假设 σ2=1\sigma^2 = 1σ2=1(为了方便计算)。步骤1:计算指数项样本到 A 的距离平方:(3−1)2=4(3-1)^2 = 4(3−1)2=4样本到 B 的距离平方:(3−5)2=4(3-5)^2 = 4(3−5)2=4步骤2:代入简化公式Q2A=e−4/2e−4/2+e−4/2=e−2e−2+e−2=11+1=0.5Q_{2A} = \frac{e^{-4/2}}{e^{-4/2} + e^{-4/2}} = \frac{e^{-2}}{e^{-2} + e^{-2}} = \frac{1}{1+1} = 0.5Q2A=e−4/2+e−4/2e−4/2=e−2+e−2e−2=1+11=0.5

这个公式本质上是在比拼 "距离的指数" 。如果一个点到两个中心的距离相等,那么它们的 e−diste^{-\text{dist}}e−dist 项就完全一样,分出来就是 0.50.50.5 vs 0.50.50.5。如果它离 A 近,离 B 远,那么分母中 A 的那一项就会比 B 大得多,导致 Q2AQ_{2A}Q2A 趋近于 111。

第二步 (M-步):更新 μA\mu_AμA。

分子(A类的总分):1×x1(正式生)+0.5×x2(旁听生)=1×1+0.5×3=2.51 \times x_1 (\text{正式生}) + 0.5 \times x_2 (\text{旁听生}) = 1\times1 + 0.5\times3 = 2.51×x1(正式生)+0.5×x2(旁听生)=1×1+0.5×3=2.5。

分母(A类的总票数):1(正式生)+0.5(旁听生)=1.51 (\text{正式生}) + 0.5 (\text{旁听生}) = 1.51(正式生)+0.5(旁听生)=1.5。

结果:μAnew=2.5/1.5=1.67\mu_A^{new} = 2.5 / 1.5 = 1.67μAnew=2.5/1.5=1.67。

再来一个例题

场景:一维空间下,已知两个高斯分布(A类和B类),方差均为1。

标注数据:x1=1x_1=1x1=1 (A类),x2=5x_2=5x2=5 (B类)。

无标数据:x3=3x_3=3x3=3。

当前均值:μA=1.5,μB=4.5\mu_A=1.5, \mu_B=4.5μA=1.5,μB=4.5。

解题步骤:步骤1 (E-步):

计算 x3x_3x3 的归属感。

计算 x3x_3x3 到 μA\mu_AμA 和 μB\mu_BμB 的距离。

由于 x3=3x_3=3x3=3 位于中间,假设算出 Q3A=0.5,Q3B=0.5Q_{3A}=0.5, Q_{3B}=0.5Q3A=0.5,Q3B=0.5(即它一半属于A,一半属于B)。

步骤2 (M-步):

更新 μA\mu_AμA。μAnew=x1(纯A)+x3⋅Q3A1+0.5=1+3⋅0.51.5≈1.67\mu_A^{new} = \frac{x_1(\text{纯A}) + x_3 \cdot Q_{3A}}{1 + 0.5} = \frac{1 + 3 \cdot 0.5}{1.5} \approx 1.67μAnew=1+0.5x1(纯A)+x3⋅Q3A=1.51+3⋅0.5≈1.67

结论:你可以看到,无标注样本 x3x_3x3 把 A 类的中心点从 1.5 "拉"向了 1.67。随着迭代,模型会找到最符合整体数据分布的中心。

10.6 半监督支持向量机S3VMs

核心思想: 低密度分割 (Low-density Separation)

理论出发点:

S3VMs 的全称是 Semi-Supervised Support Vector Machines。它最著名的实现是 TSVM (Transductive SVM)。 其核心假设是聚类假设:它认为分类边界(超平面)不应该穿过数据密集的区域,而应该通过数据稀疏的"缝隙"。

S3VM 的目标是尝试为每一个无标注样本 xj∈DUx_j \in \mathcal{D}_Uxj∈DU 寻找一个伪标签 y^j∈{−1,+1}\hat{y}_j \in \{-1, +1\}y^j∈{−1,+1},使得在所有样本上建立的 SVM 间隔最大化。

优化目标公式min⁡w,b,y^12∥w∥2+CL∑i=1Lξi+CU∑j=L+1L+Uξj\min_{w, b, \hat{y}} \frac{1}{2}\|w\|^2 + C_L \sum_{i=1}^L \xi_i + C_U \sum_{j=L+1}^{L+U} \xi_jw,b,y^min21∥w∥2+CLi=1∑Lξi+CUj=L+1∑L+Uξj12∥w∥2\frac{1}{2}\|w\|^221∥w∥2:正则项,决定了超平面的间隔大小(值越小,间隔越大)。
CL∑ξiC_L \sum \xi_iCL∑ξi:标注数据的惩罚项。CLC_LCL 是对错分有标数据的惩罚权重。
CU∑ξjC_U \sum \xi_jCU∑ξj:无标注数据的惩罚项。CUC_UCU 是对错分无标数据的惩罚权重。
ξ\xiξ:松弛变量,允许部分样本不满足间隔约束。

在普通 SVM 中,标签 yyy 是常数;但在 S3VM 中,y^\hat{y}y^ 是变量。这意味着我们需要同时确定 "哪种打标方式最好"以及"在这种打标方式下间隔最大"

注意:由于 y^\hat{y}y^ 只能取 +1+1+1 或 −1-1−1,这变成了一个巨大的整数规划问题。在无标注数据量很大时,遍历所有标签组合是指数级的(2U2^U2U),这是无法直接求解的(NP-Hard)。

计算复杂度:S3VM 的主要缺点是计算开销大,因为涉及大量的标签尝试和交换。

局部最优:由于是启发式搜索,它可能会陷入局部最优解,而不是全局最好的分类边界

10.7 基于图的半监督学习核心思想:标签传播

核心思想:

基于图的方法将数据点看作图的节点,将点与点之间的相似度看作边的权重。

逻辑

如果两个点在图上的距离很近(或者有很多路径相连),那么它们的标签应该趋于一致。

流形假设的体现: 标签就像一种"颜色"或者"流感",从有标注的节点开始,沿着边向邻近的无标注节点扩散,直到全图达到某种平衡。

算法流程 (以标签传播 LP 为例)建图:

  1. 计算所有样本(有标+无标)两两之间的相似度 wijw_{ij}wij(常用高斯核函数 wij=exp⁡(−∥xi−xj∥22σ2)w_{ij} = \exp(-\frac{\|x_i-x_j\|^2}{2\sigma^2})wij=exp(−2σ2∥xi−xj∥2))。
  2. 构建转移矩阵:对权重矩阵进行归一化,得到 P=D−1WP = D^{-1}WP=D−1W,其中 DDD 是度矩阵(对角线上是每行权重之和)。
  3. 迭代传播:传播步骤:F(t+1)=P⋅F(t)F^{(t+1)} = P \cdot F^{(t)}F(t+1)=P⋅F(t)。让每个节点根据邻居的标签来更新自己的标签。
  4. 重置步骤(重点):传播完后,必须把有标注节点的标签强行重置回原始真实标签。收敛:重复步骤3直到标签不再发生显著变化。

【直观理解】 想象你在一个社交网络里(图)。 只有几个人明确标注了自己是"摄影爱好者"(有标数据)。 标签传播的过程就像是:每天你都会受朋友的影响。如果你的朋友里大部分都是摄影爱好者,你也会慢慢变得倾向于这个标签。 重置步骤的意思是:那些"死忠粉"(原始有标点)永远不会被别人洗脑,他们始终坚持自己的标签,并不断向周围输出影响力。

**图拉普拉斯矩阵 **

用于衡量函数在图上的"平滑程度"。(fTLff^T L ffTLf 越小越平滑)。

定义:L=D−WL = D - WL=D−W。

权重矩阵 WWW:wijw_{ij}wij 表示点 iii 和点 jjj 的相似度。如果两个点很像,wijw_{ij}wij 就很大。

度矩阵 DDD:这是一个对角矩阵,对角线上的元素 dii=∑jwijd_{ii} = \sum_{j} w_{ij}dii=∑jwij。它代表了节点 iii 的"总影响力"或"总连接强度"。( 常用高斯核函数 wij=exp⁡(−∥xi−xj∥22σ2)w_{ij} = \exp(-\frac{\|x_i-x_j\|^2}{2\sigma^2})wij=exp(−2σ2∥xi−xj∥2))

拉普拉斯矩阵 LLL:定义为 L=D−WL = D - WL=D−W。

正则项:在优化目标中,我们希望最小化 fTLff^T L ffTLf。这个式子展开后是 12∑wij(fi−fj)2\frac{1}{2} \sum w_{ij} (f_i - f_j)^221∑wij(fi−fj)2。

在优化时,我们经常看到这个项:fTLff^T L ffTLf。把它展开后,你会发现它等于:12∑i,j=1nwij(fi−fj)2\frac{1}{2} \sum_{i,j=1}^{n} w_{ij}(f_i - f_j)^221i,j=1∑nwij(fi−fj)2wijw_{ij}wij:权重(相似度)。(fi−fj)2(f_i - f_j)^2(fi−fj)2:预测标签的差异。

这个公式是一个 "惩罚项"

如果两个点 iii 和 jjj 的相似度 wijw_{ij}wij 很大(比如 0.9),但你给它们的预测标签 fif_ifi 和 fjf_jfj 差得很多(比如一个是 1,一个是 0),那么相乘之后的结果就会很大,导致系统"损失"巨大。

结论: 最小化 fTLff^T L ffTLf 就是在强迫"相似的点必须拥有相似的标签"。

物理意义:如果两个点 iii 和 jjj 之间权重 wijw_{ij}wij 很大(离得近),那么它们的预测值 fif_ifi 和 fjf_jfj 的差值就必须很小,否则损失函数就会爆炸。这完美契合了平滑性假设。

例题

场景:有三个点 x1,x2,x3x_1, x_2, x_3x1,x2,x3。x1x_1x1 是"正类" (标签=1);
x3x_3x3 是无标注点。相似度:w13=0.8w_{13} = 0.8w13=0.8(很近),w23=0.1w_{23} = 0.1w23=0.1(很远)。

我们想预测 x3x_3x3 的标签。

解题步骤:

场景重设:

节点 1:有标注,标签为 111(红色)。

节点 2:有标注,标签为 000(蓝色)。

节点 3:无标注,我们要猜它的颜色。

第一步:看邻居关系

题目给出的的权重(相似度)如下:w13=0.8w_{13} = 0.8w13=0.8 (节点 3 和节点 1 非常像)w23=0.1w_{23} = 0.1w23=0.1 (节点 3 和节点 2 不太像)

但是标签不能直接乘 0.80.80.8,因为权重的总和不一定是 111。我们需要算出节点 3 接收到的"影响力总量"。

计算节点 3 的度 d3d_3d3:d3=w31+w32=0.8+0.1=0.9d_3 = w_{31} + w_{32} = 0.8 + 0.1 = 0.9d3=w31+w32=0.8+0.1=0.9这里的 0.90.90.9 代表了节点 3 与外界的总联系强度。

第二步:计算转移概率矩阵

我们要看节点 3 的标签中,百分之多少来自节点 1,百分之多少来自节点 2:

来自 x1x_1x1 的比例:P31=w31d3=0.80.9≈0.889P_{31} = \frac{w_{31}}{d_3} = \frac{0.8}{0.9} \approx 0.889P31=d3w31=0.90.8≈0.889

来自 x2x_2x2 的比例:P32=w32d3=0.10.9≈0.111P_{32} = \frac{w_{32}}{d_3} = \frac{0.1}{0.9} \approx 0.111P32=d3w32=0.90.1≈0.111

第三步:迭代更新 (Iteration)

在这一轮传播中,节点 3 的标签 f3f_3f3 更新为:f3=P31⋅f1+P32⋅f2f_3 = P_{31} \cdot f_1 + P_{32} \cdot f_2f3=P31⋅f1+P32⋅f2f3=0.889×1+0.111×0=0.889f_3 = 0.889 \times 1 + 0.111 \times 0 = 0.889f3=0.889×1+0.111×0=0.889

第四步:在分类任务中,我们通常会设置一个阈值(通常是 0.50.50.5):因为 f3=0.889>0.5f_3 = 0.889 > 0.5f3=0.889>0.5,所以我们将 x3x_3x3 最终判定为 正类 (Label 1)。

10.8 半监督聚类

传统的聚类是盲目的,无监督的,而半监督聚类引入了监督信息(约束)

两种核心约束

  1. 必连约束 (Must-link):样本 xix_ixi 和 xjx_jxj 必须属于同一个簇。
  2. 勿连约束 (Cannot-link):样本 xix_ixi 和 xjx_jxj 绝对不能属于同一个簇。

典型算法:约束 K-Means (COP-KMeans)

它在普通 K-Means 的基础上增加了一个"合规性检查":

在将样本点分配给最近的中心点时,先检查:

这个分配是否违反了必连约束?(比如 A 和 B 必须在一起,但你把 A 分到了 1 号簇,B 分到了 2 号簇)。

是否违反了勿连约束?

如果违反,则寻找次优的中心点,直到满足所有约束。如果找不到,则报错。

10.9 章末总结

章节 算法类别 核心假设 学习目标 数据效率 典型算法
10.3 包装式 (Wrapper) 置信度/互补性 扩充有标训练集 依赖初始少量标注数据的质量 自我训练 (Self-training)
10.4 多视角 (Multi-view) 视角独立性 & 充分性 多个模型互相教导 高,利用了特征的冗余性 协同训练 (Co-training)
10.5 生成式 (Generative) 数据分布假设 (GMM) 估计分布参数 Θ 取决于模型与真实分布的拟合度 EM 算法迭代更新
10.6 低密度分割 (Cluster) 聚类假设 寻找最大间隔边界 中,利用无标签数据压缩边界 S3VMs / TSVM
10.7 基于图 (Manifold) 流形假设 标签在图上的平稳分布 极高,能发现复杂的几何结构 标签传播 (Label Propagation)
10.8 半监督聚类 (Constraint) 监督约束 满足约束的簇划分 利用先验约束纠正聚类方向 约束 K-Means

如何根据题目选算法?

章节 算法类别 核心想法(最直白版) 什么时候最合适用它 典型算法 容易出问题的地方
10.3 包装式 (Wrapper) 用已有模型给无标签数据"自信打标签",加进来再训 初始标签很少,但你用的模型本身已经挺靠谱了 自我训练 (Self-training) 一开始标签错得多,后续雪球滚歪
10.4 多视角 (Multi-view) 数据有两种独立视角(如文本+图片),互相教对方 数据天然有多个互补的特征视图(网页、图文、音视频等) 协同训练 (Co-training) 特征视图不独立或互补性差,效果反而下降
10.5 生成式 (Generative) 假设数据服从某种分布(如高斯混合),用分布猜标签 数据分布简单、很符合统计模型假设(老派语音/简单图像) EM算法 + GMM 等 现在复杂高维数据,分布假设基本不成立
10.6 低密度分割 相信同类点扎堆,类别间有"空旷"地带,画最大间隔 维度不高、类别边界清晰、传统SVM效果好的场景 S3VM / TSVM 高维、噪声大、类别重叠严重时基本失效
10.7 基于图 (Manifold) 把数据连成图,标签像病毒一样沿着关系传播 数据有明显相似关系/连接(社交网络、图像、推荐系统等) 标签传播 (Label Propagation) 数据点之间没啥相似性,图建得稀碎
10.8 半监督聚类 (Constraint) 普通聚类 + 加人手规则(必须同类/必须不同类) 有领域知识或业务约束,能写出"must-link / cannot-link" 约束 K-Means 没啥可靠的先验约束,相当于普通聚类

一:

半监督学习最常用的三种基本假设是:
平滑假设

含义:特征空间中距离相近的样本(尤其在高密度区域),其输出标签也应该相似或相同。

代表算法:标签传播算法(Label Propagation)

→ 通过构建相似度图,让标签沿着图上的"近邻"平滑传播。
聚类假设

含义:数据在特征空间中自然形成若干簇(高密度区域),同一簇内的样本属于同一类别。

代表算法:低密度分割(Low-Density Separation)方法,例如 TSVM(Transductive Support Vector Machine)

→ 决策边界尽量穿过低密度区域,避免切割高密度簇。
流形假设

含义:高维数据实际分布在一个低维流形结构上,沿着流形测量的距离才能真正反映样本相似性。

代表算法:标签传播算法(Label Propagation)或 Laplacian Eigenmaps + 后续分类

→ 很多图-based方法(如Label Propagation、LGC)都强烈依赖流形假设。

二:

简述直推式和归纳式半监督学习算法的异同,并分别列举出3种代表性算法。

相同点:

两者都利用少量有标签数据 + 大量无标签数据来提升学习性能。

都依赖半监督学习的某些基本假设(如平滑、聚类、流形等)。

目标都是提高模型在测试数据上的泛化能力。

不同点:

方面 直推式(Transductive)半监督学习 归纳式(Inductive)半监督学习
关注对象 只针对当前给定的特定测试集(无标签数据就是测试集) 学习一个通用的映射函数 f: X → Y,可用于任意未来新样本
是否建模泛化 不建模泛化能力,只优化当前训练+测试样本的整体性能 显式追求泛化能力,模型学到规则后可直接用于新数据
计算方式 通常一次性联合优化所有样本(有标签+无标签+测试) 先用有标签+无标签训练出一个模型,再对新样本预测
适用场景 测试集已知且固定(实验室/竞赛场景常见) 真实开放世界、在线预测场景
代表性 更"作弊"但有时效果极强 更实用,部署友好

直推式代表算法(3种):

TSVM(Transductive SVM)

Label Propagation(标签传播)

Label Spreading(标签扩散,带正则化的传播版本)
归纳式代表算法(3种):

Self-Training(自我训练)

Co-Training(协同训练)

Mean Teacher 或 FixMatch(现代一致性正则化方法,深度半监督主流)

第十一章 概率图模型

11.1 概率图模型概论

概率图模型(PGM)的本质是:用图的结构来表达变量之间的"依赖关系",从而简化极其复杂的概率计算。

核心公式复习

在图模型中,我们需要的核心只有两个规则:

积规则(Chain Rule):P(x,y)=P(y∣x)P(x)P(x, y) = P(y|x)P(x)P(x,y)=P(y∣x)P(x)。推广到多个变量,联合概率就是一连串条件概率相乘。

和规则(Sum Rule):P(x)=∑yP(x,y)P(x) = \sum_{y} P(x, y)P(x)=∑yP(x,y)。也就是我们常说的"边际化",想要求某个变量,就对其他不相关的变量求和。

11.2 有向概率图模型

有向图通常用来表示变量之间的因果关系。

联合概率分解【怎么用】:

给定一个有向图,联合概率分布等于每个节点在给定其"父亲节点"条件下的概率乘积。P(x1,...,xn)=∏i=1nP(xi∣parents(xi))P(x_1, ..., x_n) = \prod_{i=1}^n P(x_i | parents(x_i))P(x1,...,xn)=i=1∏nP(xi∣parents(xi))xix_ixi:当前节点。parents(xi)parents(x_i)parents(xi):指向该节点的所有直接父节点。

这就像是"查族谱"。每个人的性格(概率分布)只由他的亲生父母决定,而不需要追溯到曾祖父。这种"局部性"极大地减少了我们需要存储的参数量。

D-分离(条件独立性判断)

这是考试中最容易出题的地方。你需要判断在给定某些已知信息时,两个变量是否独立。

"贝叶斯球"(Bayesian Ball)算法(D-分离)这是判断条件独立性的唯一标准。考试通常给出一个图,问你:"已知 ZZZ 的情况下,XXX 和 YYY 独立吗?"

结构类型 图示简述 独立性 (给定中间节点 Z 时) 状态描述 \贝叶斯球
头到尾 (顺序结构) X → Z → Y X ⊥ Y | Z (独立) 通道被 Z 阻塞(球被 ZZZ 挡住了)
尾到尾 (分叉结构) X ← Z → Y X ⊥ Y | Z (独立) 通道被 Z 阻塞(球被 ZZZ 挡住了)
头到头 (汇合结构) X → Z ← Y 不独立 (若 Z 未知则独立) Z 已知时通道反而开启

考试只用盯着 "头到头"(汇合结构)看,中间节点 ZZZ 被观测到时,本来不相关的 XXX 和 YYY 反而"联系"上了。只要记住:"V型(汇合结构、头到头)已知,路径即通"。

在汇合结构 X→Z←YX \to Z \leftarrow YX→Z←Y 中,如果 ZZZ 是未知的,就像路中间有个坑,贝叶斯球滚到 ZZZ 这里就掉下去了,到不了 YYY。得到结论:路不通 ⇒X\Rightarrow X⇒X 和 YYY 独立。

中间节点 ZZZ 已知(路修好了)逻辑:一旦你观察到了 ZZZ(或者 ZZZ 的任何子节点),就相当于给这个坑填上了土。贝叶斯球现在可以顺畅地从 XXX 滚到 YYY 了。结论:路通了 ⇒X\Rightarrow X⇒X 和 YYY 不独立(相关)

11.3 无向概率图模型 (Markov Random Fields)

无向图表示的是变量之间的关联关系,没有明确的因果之分(如图像中相邻像素的关系)。 核心概念:团(Clique)

团:图中结点的子集,其中任意两个结点之间都有边连接。

最大团:不能再增加任何一个结点使其仍是一个团。
因子分解

无向图不能写成简单的条件概率乘积,它使用势函数 ψC(xC)\psi_C(x_C)ψC(xC) 来表示:P(x)=1Z∏C∈CψC(xC)P(x) = \frac{1}{Z} \prod_{C \in \mathcal{C}} \psi_C(x_C)P(x)=Z1C∈C∏ψC(xC)C\mathcal{C}C:图中所有的最大团集合。
ψC\psi_CψC:势函数(必须非负),通常定义为 e−E(xC)e^{-E(x_C)}e−E(xC)(能量函数)。
ZZZ:配分函数(归一化因子),保证概率和为1。计算 ZZZ 通常非常困难。

11.4 典型的概率图模型:HMM (隐马尔科夫模型)

HMM 的"两个假设"与"三要素"两个假设:

齐次马尔科夫假设 :当前状态只跟前一个状态有关。
观测独立性假设:当前的观测只跟当前的状态有关。

三要素
(π,A,B)(\pi, A, B)(π,A,B):π\piπ:初始状态概率。
AAA:状态转移矩阵(状态 →\to→ 状态)。
BBB:观测概率矩阵(状态 →\to→ 观测,也叫发射概率)。

【矩阵大小】

状态转移矩阵 AAA:描述从一个状态跳到另一个状态的概率。

大小:N×NN \times NN×N(因为是 NNN 个状态到 NNN 个状态的映射)。

观测概率矩阵 BBB(也叫发射矩阵):描述在某个状态下,输出某个观测值的概率。

大小:N×MN \times MN×M(每一行对应一个状态,每一列对应一个可能的观测值)。

【例题】想象你在 20 个城市(状态)之间旅行。
AAA 矩阵:就是一张"城市间航线价格表",20×2020 \times 2020×20 涵盖了所有可能的出发和到达组合。
BBB 矩阵:如果每个城市有 100 种特产(观测),那么 BBB 就是一张"城市-特产对应表",大小就是 20×10020 \times 10020×100。

HMM 的三个基本问题

概率计算(评估):已知模型,求某个观测序列出现的概率。用前向-后向算法。

  1. 计算概率:
    前向算法 (Forward Algorithm)

    目标:求观测序列 OOO 出现的概率 P(O∣λ)P(O|\lambda)P(O∣λ)。核心变量:αt(i)\alpha_t(i)αt(i)(前向概率)。递推公式:αt+1(j)=[∑i=1Nαt(i)aij]bj(ot+1)\alpha_{t+1}(j) = \left[ \sum_{i=1}^N \alpha_t(i) a_{ij} \right] b_j(o_{t+1})αt+1(j)=[i=1∑Nαt(i)aij]bj(ot+1)其中:aija_{ij}aij:状态 iii 转移到 jjj 的概率。bj(ot+1)b_j(o_{t+1})bj(ot+1):状态 jjj 发射出观测 ot+1o_{t+1}ot+1 的概率。

  2. 预测(解码):已知观测序列,求最可能的隐藏状态序列。用 Viterbi 算法(本质是动态规划)。

寻找路径:Viterbi 算法

目标:求最可能的隐藏状态序列 I={i1,i2,...,iT}I = \{i_1, i_2, ..., i_T\}I={i1,i2,...,iT}。核心变量:δt(i)\delta_t(i)δt(i)(路径最大概率)。递推公式:δt(j)=max⁡1≤i≤N[δt−1(i)aij]bj(ot)\delta_t(j) = \max_{1 \le i \le N} [\delta_{t-1}(i) a_{ij}] b_j(o_t)δt(j)=1≤i≤Nmax[δt−1(i)aij]bj(ot)

  1. 学习:已知观测序列,求模型参数。用 Baum-Welch 算法(本质是 EM 算法)
维度 有向图 (Bayesian Net) 无向图 (MRF)
边表示 因果关系 (Causality) 关联/耦合关系 (Correlation)
局部概率 条件概率 P(xᵢ | paᵢ),意义明确 势函数 ψ(x_C),通常无直接物理意义
归一化 自然归一化,不需要算 Z 需要计算复杂的 Z
典型算法 朴素贝叶斯、HMM 玻尔兹曼机、CRF、Ising 模型

例题

假设实验室里有三个盒子(状态 s1,s2,s3s_1, s_2, s_3s1,s2,s3),每个盒子里都装满了红球和白球。游戏规则:你随机选一个盒子拿出一个球,记录颜色,放回去;然后按照一定的概率跳到下一个盒子(可能还是同一个),再拿一个球。

你的任务:已知你拿出来的球序列是 {红,白},请推测你最可能是按照什么顺序在三个盒子间跳跃的。

参数描述:

假设有三个盒子 S={s1,s2,s3}S = \{s_1, s_2, s_3\}S={s1,s2,s3}(隐藏状态),每个盒子里都有红、白两种球 V={红,白}V = \{红, 白\}V={红,白}(观测变量)。实验者按照 HMM 模型随机挑盒子取球,最后给出的观测序列为 O={红,白}O = \{红, 白\}O={红,白}。已知模型参数如下:初始状态概率 π\piπ:π=(0.2,0.4,0.4)T\pi = (0.2, 0.4, 0.4)^Tπ=(0.2,0.4,0.4)T状态转移矩阵 AAA(从行状态跳到列状态):
A=[0.50.20.30.30.50.20.20.30.5]A = \begin{bmatrix} 0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \end{bmatrix}A= 0.50.30.20.20.50.30.30.20.5 观测概率矩阵 BBB(当前盒子摸出颜色的概率):

状态 (盒子) 红球 白球
s1s_1s1 (盒子1) 0.5 0.5
s2s_2s2 (盒子2) 0.4 0.6
s3s_3s3 (盒子3) 0.7 0.3

问题:请使用 Viterbi 算法 找出最可能的隐藏盒子序列。

在 Viterbi 算法中,我们最关心的变量是 δt(i)\delta_t(i)δt(i):

定义:δt(i)\delta_t(i)δt(i) 表示在时间 ttt 时,路径到达状态 iii,且产生的观测序列与实际一致的所有路径中的最大概率。

变量表:ttt:时间步(本题中 t=1t=1t=1 是拿红球,t=2t=2t=2 是拿白球)。
iii:当前的盒子编号。
aija_{ij}aij:从盒子 iii 转移到盒子 jjj 的概率。
bj(ot)b_j(o_t)bj(ot):在盒子 jjj 观察到球颜色 oto_tot 的概率。

还有记得递推公式,这里就是分别计算右边的式子的结果,找出能让右边式子达到最大值的那个。
δt(j)=max⁡1≤i≤N[δt−1(i)aij]bj(ot)\delta_t(j) = \max_{1 \le i \le N} [\delta_{t-1}(i) a_{ij}] b_j(o_t)δt(j)=1≤i≤Nmax[δt−1(i)aij]bj(ot)

计算前需要知道:
δt(i)\delta_t(i)δt(i):在时刻 ttt,观测序列为 o1...oto_1...o_to1...ot,且路径终点在状态 sis_isi 的所有路径中的最大概率。
ψt(i)\psi_t(i)ψt(i):记录产生上述最大概率时,时刻 t−1t-1t−1 的状态索引(用于最后回溯路径)。

步骤 1:初始化(t=1t=1t=1,观测 o1=红o_1 = 红o1=红)

计算第一天在各个盒子的最大概率(初始概率 ×\times× 该盒子出红球的概率):
δ1(1)=π1⋅b1(红)=0.2×0.5=0.10\delta_1(1) = \pi_1 \cdot b_1(红) = 0.2 \times 0.5 = \mathbf{0.10}δ1(1)=π1⋅b1(红)=0.2×0.5=0.10
δ1(2)=π2⋅b2(红)=0.4×0.4=0.16\delta_1(2) = \pi_2 \cdot b_2(红) = 0.4 \times 0.4 = \mathbf{0.16}δ1(2)=π2⋅b2(红)=0.4×0.4=0.16
δ1(3)=π3⋅b3(红)=0.4×0.7=0.28\delta_1(3) = \pi_3 \cdot b_3(红) = 0.4 \times 0.7 = \mathbf{0.28}δ1(3)=π3⋅b3(红)=0.4×0.7=0.28

记录回溯位置:ψ1(1)=0,ψ1(2)=0,ψ1(3)=0\psi_1(1) = 0, \psi_1(2) = 0, \psi_1(3) = 0ψ1(1)=0,ψ1(2)=0,ψ1(3)=0(起点无来源)。

步骤 2:递推计算(t=2t=2t=2,观测 o2=白o_2 = 白o2=白)

我们要算出第二天分别在三个盒子的概率。

每个盒子都要对比三条路:

  1. 计算 δ2(1)\delta_2(1)δ2(1) (第二天在盒子1的概率):

    从 s1s_1s1 来:δ1(1)⋅a11=0.1×0.5=0.05\delta_1(1) \cdot a_{11} = 0.1 \times 0.5 = 0.05δ1(1)⋅a11=0.1×0.5=0.05

    从 s2s_2s2 来:δ1(2)⋅a21=0.16×0.3=0.048\delta_1(2) \cdot a_{21} = 0.16 \times 0.3 = 0.048δ1(2)⋅a21=0.16×0.3=0.048

    从 s3s_3s3 来:δ1(3)⋅a31=0.28×0.2=0.056\delta_1(3) \cdot a_{31} = 0.28 \times 0.2 = \mathbf{0.056}δ1(3)⋅a31=0.28×0.2=0.056 (最大)

    最后乘上发射概率:δ2(1)=0.056×b1(白)=0.056×0.5=0.028\delta_2(1) = 0.056 \times b_1(白) = 0.056 \times 0.5 = \mathbf{0.028}δ2(1)=0.056×b1(白)=0.056×0.5=0.028

    记录来源:ψ2(1)=3\psi_2(1) = 3ψ2(1)=3(说明去盒子1的最优路是从盒子3跳过来的)。

  2. 计算 δ2(2)\delta_2(2)δ2(2) (第二天在盒子2的概率):

    从 s1s_1s1 来:δ1(1)⋅a12=0.1×0.2=0.02\delta_1(1) \cdot a_{12} = 0.1 \times 0.2 = 0.02δ1(1)⋅a12=0.1×0.2=0.02

    从 s2s_2s2 来:δ1(2)⋅a22=0.16×0.5=0.08\delta_1(2) \cdot a_{22} = 0.16 \times 0.5 = 0.08δ1(2)⋅a22=0.16×0.5=0.08

    从 s3s_3s3 来:δ1(3)⋅a32=0.28×0.3=0.084\delta_1(3) \cdot a_{32} = 0.28 \times 0.3 = \mathbf{0.084}δ1(3)⋅a32=0.28×0.3=0.084 (最大)

    最后乘上发射概率:δ2(2)=0.084×b2(白)=0.084×0.6=0.0504\delta_2(2) = 0.084 \times b_2(白) = 0.084 \times 0.6 = \mathbf{0.0504}δ2(2)=0.084×b2(白)=0.084×0.6=0.0504

    记录来源:ψ2(2)=3\psi_2(2) = 3ψ2(2)=3。

  3. 计算 δ2(3)\delta_2(3)δ2(3) (第二天在盒子3的概率):

    从 s1s_1s1 来:0.1×0.3=0.030.1 \times 0.3 = 0.030.1×0.3=0.03

    从 s2s_2s2 来:0.16×0.2=0.0320.16 \times 0.2 = 0.0320.16×0.2=0.032

    从 s3s_3s3 来:0.28×0.5=0.140.28 \times 0.5 = \mathbf{0.14}0.28×0.5=0.14 (最大)

    最后乘上发射概率:δ2(3)=0.14×b3(白)=0.14×0.3=0.042\delta_2(3) = 0.14 \times b_3(白) = 0.14 \times 0.3 = \mathbf{0.042}δ2(3)=0.14×b3(白)=0.14×0.3=0.042

    记录来源:ψ2(3)=3\psi_2(3) = 3ψ2(3)=3。

步骤三:终止与路径回溯(Backtracking)

找终点:

在 t=2t=2t=2 时,比较 δ2(1),δ2(2),δ2(3)\delta_2(1), \delta_2(2), \delta_2(3)δ2(1),δ2(2),δ2(3)。0.028,0.0504,0.0420.028, \mathbf{0.0504}, 0.0420.028,0.0504,0.042。最大值是 0.0504,对应的状态索引 i2∗=2i^*_2 = \mathbf{2}i2∗=2(盒子2)。

找前一步:看 ψ2(2)\psi_2(2)ψ2(2)。ψ2(2)=3\psi_2(2) = 3ψ2(2)=3。所以前一步状态 i1∗=3i^*_1 = \mathbf{3}i1∗=3(盒子3)。

最终结论:观测序列 {红, 白} 最可能的隐藏状态序列是 {s3,s2}\{s_3, s_2\}{s3,s2}。

D-分离与条件独立 例题

考虑以下报警器模型( nodes:AAA 盗窃, BBB 地震, CCC 报警器响, DDD 警察出警):
A→CA \to CA→C (盗窃触发报警)B→CB \to CB→C (地震触发报警)C→DC \to DC→D (报警触发警察出警)

判断:在没有任何信息的情况下,AAA(盗窃)和 BBB(地震)是否独立?

找路径:AAA 和 BBB 之间的唯一路径是 A→C←BA \to C \leftarrow BA→C←B。

看结构:这是一个 汇合 结构,中间节点是 CCC。

判开关:目前 CCC 是未知的。路径是关闭的。

结论:路不通,A⊥BA \perp BA⊥B。独立。

判断:已知警察已经出警(DDD 已知),AAA 和 BBB 是否独立?

找路径:依然是 A→C←BA \to C \leftarrow BA→C←B。

看结构:依然是汇合结构。

判开关:虽然没直接给 CCC,但给了 CCC 的子节点 DDD(警察来了,那肯定是报警器响了)。在 V-structure 中,已知 CCC 或 CCC 的后代,都会开启路径。

结论:路通了,A⊥̸BA \not\perp BA⊥B。不独立。

判断:已知报警器响了(CCC 已知),AAA 和 DDD(出警)是否独立?

找路径:A→C→DA \to C \to DA→C→D。

看结构:这是一个顺序 结构。

判开关:中间节点 CCC 已知。路径关闭。

结论:路不通,A⊥D∣CA \perp D \mid CA⊥D∣C。条件独立。

11.5 推断与学习、条件随机场 (CRF, Conditional Random Fields)

这里只给出这部分的概念

CRF 是在 HMM 基础上为了解决"标注偏置"和"利用全局特征"而产生的模型。

  1. 核心定义模型性质:一种判别式 (Discriminative) 概率图模型。
  2. 建模目标:直接建模条件概率 P(Y∣X)P(Y \mid X)P(Y∣X),而不是联合概率。
  3. 线性链 CRF (Linear-chain CRF):最常用的形式,假设状态序列满足马尔科夫性

核心公式(参数化形式)P(y∣x)=1Z(x)exp⁡(∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i))P(y|x) = \frac{1}{Z(x)} \exp \left( \sum_{i,k} \lambda_k t_k(y_{i-1}, y_i, x, i) + \sum_{i,l} \mu_l s_l(y_i, x, i) \right)P(y∣x)=Z(x)1exp i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i)

tkt_ktk (转移特征):描述标签之间的关联(如:动词后通常不接动词)。
sls_lsl (状态特征):描述观测与标签的关联(如:以"-ing"结尾的词多为动词)。
Z(x)Z(x)Z(x):归一化因子(配分函数),确保所有路径概率和为 1。

对比一下hmm和crf

维度 HMM CRF
模型类型 生成式 判别式
假设 严格的独立性假设(观测独立等) 无严格独立性假设,可利用全局特征
优势 简单、收敛快 准确率高、解决标注偏置问题
基本单元 概率分布 (A, B 矩阵) 特征函数 (权重 λ, μ)

"推断"就是已知模型,求某个变量的概率(边缘分布)或者求最可能的序列。

  1. 精确推断 (Exact Inference)

变量消去法 (Variable Elimination):通过分配律把求和号移进乘积项内,减少重复计算。

信念传播 (BP, Belief Propagation):在树状图上通过节点间互发"消息"来同步全局概率信息。

  1. 近似推断 (Approximate Inference)

采样法 (Sampling):如 MCMC (马尔科夫链蒙特卡罗) 采样。通过随机模拟大量样本来逼近真实分布。

变分推断 (Variational Inference):找一个简单的分布(如高斯分布)去不断"靠近"复杂的真实分布,把推断问题变成优化问题。

学习 (Learning) 简述

"学习"就是已知数据,求模型里的参数(比如那些 λ\lambdaλ 权重是多少)。

  1. HMM 的学习Baum-Welch 算法:属于 EM 算法。用于在不知道隐藏状态的情况下,通过迭代优化的方式估计参数。
  2. CRF 的学习准则:最大似然估计 (Maximum Likelihood Estimation)。方法:梯度上升法。难点:梯度收敛慢。

第十二章 集成学习

集成学习通过组合多个基学习器(Weak learners)来构建一个强学习器(Strong learner),从而提高系统的泛化性能 。

12.1 Bagging 、Bootstrap 采样与"0.632 规则"

Bagging 指的是"自助法"重采样,即有放回地随机抽取样本。

Bootstrap是 Bagging 的数学基础,考试极容易出一个小计算题或者填空题。

核心公式与推导结论:

给定包含 mmm 个样本的数据集 DDD,我们进行 mmm 次有放回采样得到数据集 D′D'D′。

考点: 某个特定样本始终不被抽到的概率是多少?
lim⁡m→∞(1−1m)m=1e≈0.368\lim_{m \to \infty} (1 - \frac{1}{m})^m = \frac{1}{e} \approx 0.368m→∞lim(1−m1)m=e1≈0.368

结论:

约 36.8% 的样本从未出现在训练集中(称为包外样本,Out-of-Bag, OOB)。

约 63.2% 的样本出现在训练集中。

填空:Bootstrap 采样中,训练集大约包含原始数据集中 63.2% 的独特样本。

应用:OOB 样本可以用来做什么? 答案:用来做验证集(Validation),不需要额外的交叉验证(Cross-Validation)。

12.2 AdaBoost

算法流程

AdaBoost 的核心是:让错题变重,让对题变轻,让好老师话语权大。

  1. 假设我们处于第 ttt 轮迭代:

    计算错误率 ϵt\epsilon_tϵt:ϵt=∑i=1mwt,i⋅I(yi≠ht(xi))\epsilon_t = \sum_{i=1}^{m} w_{t,i} \cdot \mathbb{I}(y_i \neq h_t(x_i))ϵt=i=1∑mwt,i⋅I(yi=ht(xi))

    (就是把分错样本的权重加起来)

  2. 计算当前分类器的权重 αt\alpha_tαt(老师的话语权):
    αt=12ln⁡(1−ϵtϵt)\alpha_t = \frac{1}{2} \ln \left( \frac{1 - \epsilon_t}{\epsilon_t} \right)αt=21ln(ϵt1−ϵt)

    直观考点:如果 ϵt=0.5\epsilon_t = 0.5ϵt=0.5(瞎猜),则 αt=0\alpha_t = 0αt=0(没话语权)。

    如果 ϵt<0.5\epsilon_t < 0.5ϵt<0.5(比瞎猜好),αt>0\alpha_t > 0αt>0。

    如果 ϵt>0.5\epsilon_t > 0.5ϵt>0.5(反向预测),αt<0\alpha_t < 0αt<0(反着听你的就是了)。

  3. 更新样本权重 wt+1w_{t+1}wt+1(关键步骤):
    wt+1,i=wt,iZt×{e−αt,如果分对了eαt,如果分错了w_{t+1, i} = \frac{w_{t,i}}{Z_t} \times \begin{cases} e^{-\alpha_t}, & \text{如果分对了} \\ e^{\alpha_t}, & \text{如果分错了} \end{cases}wt+1,i=Ztwt,i×{e−αt,eαt,如果分对了如果分错了

(其中 ZtZ_tZt 是规范化因子,保证新权重之和为1)

例题

题目:有 4 个样本,初始权重均为 0.250.250.25。分类器 h1h_1h1 分错了第 4 个样本,分对了前 3 个。请计算下一轮第 4 个样本的权重。

解题步骤:

  1. 算错误率:只有第4个错了,且权重是0.25。ϵ1=0.25\epsilon_1 = 0.25ϵ1=0.25
  2. 算分类器权重:α1=12ln⁡(1−0.250.25)=12ln⁡(3)≈0.55\alpha_1 = \frac{1}{2} \ln(\frac{1-0.25}{0.25}) = \frac{1}{2} \ln(3) \approx 0.55α1=21ln(0.251−0.25)=21ln(3)≈0.55
  3. 算新权重(未归一化):分对的样本(1,2,3):0.25×e−0.55≈0.25×0.577=0.1440.25 \times e^{-0.55} \approx 0.25 \times 0.577 = 0.1440.25×e−0.55≈0.25×0.577=0.144分错的样本(4):0.25×e0.55≈0.25×1.73=0.4330.25 \times e^{0.55} \approx 0.25 \times 1.73 = 0.4330.25×e0.55≈0.25×1.73=0.433归一化(求 Z1Z_1Z1):Z1=3×0.144+0.433=0.432+0.433=0.865Z_1 = 3 \times 0.144 + 0.433 = 0.432 + 0.433 = 0.865Z1=3×0.144+0.433=0.432+0.433=0.865
  4. 最终第4个样本的权重:
    w2,4=0.4330.865≈0.5w_{2,4} = \frac{0.433}{0.865} \approx 0.5w2,4=0.8650.433≈0.5

验证:分错的样本权重从 0.25 飙升到了 0.5。这就是 AdaBoost 的本质。

对比维度 Bagging (如随机森林) Boosting (如 AdaBoost/GBDT)
样本采样 Bootstrap 有放回采样 这里的权重高,下次重点采(或直接改权重)
训练顺序 并行 (Parallel) - 互不干扰 串行 (Sequential) - 也就是这里的错题留给下一个做
偏差-方差 主要降低 方差 (Variance) 主要降低 偏差 (Bias)
基分类器要求 强一点、复杂一点 (如深层决策树/过拟合模型) 弱一点、简单一点 (如浅层树桩/欠拟合模型)
抗噪能力 强 (因为可以平均掉噪声) 弱 (因为会拼命去拟合噪声/异常点)

Bagging 能提高准确率吗? 能,但主要是通过"稳定"模型(降方差)来提高的,它不能把一个本身就是瞎猜(偏差极大)的模型变好。

Boosting 会过拟合吗? 会,特别是当它试图去拟合异常值(Outliers)的时候。

12.3 集成学习的其他概念

这里只会考概念题目,所以都罗列在一起了。

这一部分讨论的是如何通过不同的组合策略,让基学习器之间产生更好的化学反应。考试的重点在于区分不同融合方式的核心机制。

  1. 随机森林 (Random Forest, RF)随机森林是 Bagging 的加强版,它的核心在于双重随机性:
    样本随机:通过 Bootstrap 采样,每个专家看的数据集不一样。
    特征随机:在决策树分裂时,不再从所有 ddd 个特征中选最优,而是先随机选出 kkk 个特征子集(通常 k=log⁡2dk = \log_2 dk=log2d),再从中选最优。

直观理解:如果说 Bagging 是给专家们发不同的卷子,随机森林就是不仅卷子不同,还把卷子的一部分题给遮住了。这样强制增加了专家之间的多样性,使得集成后的模型极其鲁棒,且能通过 OOB 样本自带验证效果。

  1. Stacking (堆叠法)
    Stacking 是一种分层训练的组合策略。
    第一层(初级学习器):用原始数据训练多个不同的模型(如 SVM、KNN)。
    第二层(次级学习器/元学习器):将第一层模型的预测输出作为特征,训练一个新的模型。

直观理解:第一层是各科老师改卷子出分,第二层是一个校长,他根据这几个老师给出的分(预测值),总结出哪个老师更准,从而给出最终成绩。 注意:为了防止过拟合,第一层输出必须通过交叉验证(Cross-validation)产生。

  1. 混合专家模型 (MoE)
    这是目前大模型(如 GPT-4)的核心技术。
    结构:由多个专家网络(Experts)和一个门控网络(Gating Network)组成。
    机制:条件计算。对于特定的输入,门控网络只"激活"一两个最相关的专家,其余专家保持静默。

直观理解:比起 Stacking 这种所有老师都要批改一遍的累活,MoE 是"专人专项"。你是数学题就发给数学组专家,你是语文题就发给文学专家。这大大节省了计算资源,并实现了模型规模的爆炸式增长而计算成本不增加。

相关推荐
QZ_orz_freedom2 小时前
后端学习笔记-缓存数据
笔记·学习
老蒋每日coding2 小时前
AI Agent 设计模式系列(十六)—— 资源感知优化设计模式
人工智能·设计模式·langchain
老蒋每日coding2 小时前
AI Agent 设计模式系列(十七)—— 推理设计模式
人工智能·设计模式
Samson Bruce2 小时前
【线性代数】
人工智能·线性代数·机器学习
煤炭里de黑猫2 小时前
Python爬虫开发实战指南:从基础到高级工具应用
人工智能·爬虫
数据轨迹0012 小时前
AAAI Mesorch:频域增强+自适应剪枝相结合
经验分享·笔记·facebook·oneapi·twitter
FL16238631292 小时前
matconv编译GPU版本提示 MEX 找不到使用 -l 选项指定的库 ‘gpu‘。
人工智能
EW Frontier2 小时前
【无人机】突破无人机检测瓶颈!基于 EMD/EEMD 与机器学习的射频指纹分解新方案【附MATLAB+python代码】
机器学习·matlab·无人机·无人机检测·无人机识别
dajun1811234562 小时前
加速临床试验与个性化治疗
人工智能