132 lines
8.9 KiB
Markdown
132 lines
8.9 KiB
Markdown
---
|
||
title: 7 第七章 模型评估及选择
|
||
draft: false
|
||
tags:
|
||
- ESL
|
||
---
|
||
## [逻辑架构图]
|
||
|
||
1. **顶层哲学**:Bias-Variance 分解是总纲,定义了泛化误差的本质。
|
||
|
||
2. **评估路径 A(解析估计)**:通过“裁判标准”对训练误差进行惩罚。
|
||
|
||
- **似然框架**:AIC (预测导向) $\to$ BIC (解释导向) $\to$ MDL (压缩导向)。
|
||
|
||
- **理论上界**:VC 维 (不依赖分布的潜力评估)。
|
||
|
||
3. **评估路径 B(实验模拟)**:通过“重采样”手段实测误差。
|
||
|
||
- **系统校验**:CV (类 RAID 5 的循环校验)。
|
||
|
||
- **分布扰动**:Bootstrap (类混沌工程的随机抽样)。
|
||
|
||
4. **统一视角**:从概率模型(MAP/似然)的角度收敛以上所有概念。
|
||
|
||
|
||
---
|
||
|
||
## [深度整理正文]
|
||
|
||
### 1. 偏差-方差权衡与模型复杂度 (The Leverage of Complexity)
|
||
[[2 第二章 监督学习概要#^1fba7c]]
|
||
|
||
**我原本的内容**:Bias - Variance => Generalization。这四个概念是 ESL 第七章中用于“惩罚”模型复杂度、从训练误差推导泛化误差的核心工具。我们可以把它们看作四套不同的“裁判标准”,用来判断一个模型是否过度拟合。
|
||
|
||
**{深度扩充}**:
|
||
|
||
> {在底层,模型复杂度是调节 Bias 和 Variance 的唯一杠杆。当模型参数 $d$ 增加时,其拟合训练集噪声的能力增强,导致 **Optimism(训练误差的乐观偏见)** 增大。
|
||
>
|
||
> 统计学上的核心痛点在于:我们只能观察到 $\overline{err}$(训练误差),而真正的目标是 $Err_{out}$。这中间的鸿沟就是 **Optimism**。ESL 证明了对于线性模型,$Optimism = \frac{2d}{N}\sigma^2$。这意味着,**如果你不引入“裁判标准”进行惩罚,你的模型就会在追求低 Bias 的路上因为 Variance 爆炸而死在生产环境。**}
|
||
|
||
### 2. 解析式惩罚工具:AIC, BIC 与 MDL
|
||
|
||
**我原本的内容**:AIC 核心逻辑是根据参数数量进行“扣分”。如果你为了提高一点点准确度而增加了很多参数,AIC 就会变大。BIC 比 AIC “下手更狠”,只要样本量 $N > e^2 \approx 7.4$,惩罚就更重。MDL 是从信息论视角看问题,认为学习就是对数据压缩。
|
||
|
||
**{深度扩充}**:
|
||
|
||
> {这三者在似然框架(Likelihood Framework)下是高度统一的。
|
||
>
|
||
> - **AIC (Akaike Information Criterion)**:公式 $AIC = -2 \cdot \log L + 2d$。{它本质上是在估计**预期对数似然**。在底层,它假设模型是“正确”的,通过修正项 $2d$ 来抵消参数对训练数据的过度拟合。}
|
||
>
|
||
> - **BIC (Bayesian Information Criterion)**:公式 $BIC = -2 \cdot \log L + (\log N) \cdot d$。{它的出发点是最大化后验概率 $P(M|Data)$。相比 AIC,BIC 增加了一个 $\log N$ 的权重,这意味着随着数据量 $N$ 的增长,它对“多余参数”的容忍度极低,能够以概率 1 选中那个最简明的真实模型。}
|
||
>
|
||
> - **MDL (Minimum Description Length)**:描述长度 = 描述模型的比特数 + 描述残差的比特数。{这与程序员的思维高度一致:**代码越精简且能解决越多 Bug,质量越高。** 在数学推导上,对参数进行编码所需的比特数恰好对应了 BIC 中的 $\frac{d}{2}\log N$。因此,MDL 实际上从信息论层面为 BIC 提供了硬核支撑。} }
|
||
>
|
||
|
||
### 3. 潜力评估:VC 维 (Vapnik-Chervonenkis Dimension)
|
||
|
||
**我原本的内容**:VC 维更通用,但也更难算。它衡量一个函数族能“打散”多少个点的能力。比如直线能把 3 个点完美分开,VC 维是 3。它不依赖于数据分布,告诉我们模型的“潜力”太强而数据量太少是非常危险的。
|
||
|
||
**{深度扩充}**:
|
||
|
||
> {VC 维是统计学习理论(SLT)的基石。它解决了一个 AIC/BIC 无法回答的问题:如果不假设数据符合某种概率分布(非参数场景),我们如何衡量复杂度?
|
||
>
|
||
> {在底层算法设计中,VC 维定义了函数族的**容量(Capacity)**。公式 $Err_{out} \le Err_{train} + \text{Penalty}(VC, N)$ 给出的是一个“最坏情况”下的安全垫。虽然在神经网络等高维模型中 VC 维难以精确闭式计算,但它指导我们:**模型的自由度(VC 维)必须与观测到的样本量 $N$ 成比例增加**,否则模型就会通过“硬背”数据(Shattering)来降低训练误差,从而丧失泛化能力。} }
|
||
|
||
### 4. 实验模拟:交叉验证 (Cross-Validation)
|
||
|
||
**我原本的内容**:CV 是靠“模拟测试”来“实测”误差。核心是不相信“同一个人”。K-折交叉验证像程序员写 Unit Test,不能只跑一次 main() 成功了就说没 Bug。ESL 提到预处理必须在 CV 循环内部做,否则会“偷看”。
|
||
|
||
**{深度扩充}**:
|
||
|
||
> {我们可以把 CV 理解为一种 **“RAID 5 式的容错校验”**:数据被切分为 $K$ 份,每一份都轮流充当“校验位”。
|
||
>
|
||
> - **K 的选择逻辑**:K 越小(如 2),训练集与原数据集差异大,模型没练好,导致 **Bias 偏高**;K 越大(如 N,即 LOOCV),训练集几乎等同于原集,Bias 低,但因为每次训练的数据高度重合,导致各个模型生成的误差高度相关,**Variance 偏高**。
|
||
>
|
||
> - **“偷看”陷阱的底层解释**:{如果在 CV 外部做特征选择(Feature Selection),你实际上是利用了 $N$ 个样本的全域信息。这相当于在操作系统测试中,你提前根据测试用例修改了内核参数。这种“泄露”会导致 CV 估计的误差远低于实际泛化误差。**在 ESL 的实验中,这种错误会导致本应有 50% 误差的随机预测模型被错误评估为只有 20% 的误差。**} }
|
||
>
|
||
|
||
### 5. 混沌工程:自助法 (Bootstrap)
|
||
|
||
**我原本的内容**:Bootstrap 不再是死板地“分块”,而是通过“有放回随机抽样”模拟无数虚拟数据集。有些样本一次都没被抽到(平均 0.368),称为 OOB 数据。Bootstrap 像在做“混沌工程”,通过随机扰动看模型有多坚固。
|
||
|
||
**{深度扩充}**:
|
||
|
||
> {Bootstrap 是对总体分布的一种**非参数近似**。
|
||
>
|
||
> - **神奇的 0.632**:由于有放回抽样中每一个样本被选中的概率是 $1-(1-1/N)^N \approx 1-1/e \approx 0.632$。
|
||
>
|
||
> - **.632 估计器**:$\text{Err}_{.632} = 0.368 \times \overline{\text{err}} + 0.632 \times \text{Err}^{(1)}$。{这个公式是 ESL 第 7.11 节的精髓。它利用了 $\overline{err}$ 的“极度乐观”和 $OOB$ 误差的“极度保守”(因为只有 63.2% 的独特数据参与训练),通过线性加权来逼近真实的泛化误差。
|
||
>
|
||
>
|
||
> 从系统稳定性角度看,Bootstrap 实际上是在测试模型对数据分布微小抖动的**鲁棒性(Robustness)**。这正是 Bagging(集成学习)能够通过降低方差来显著提升模型表现的原因。} }
|
||
|
||
---
|
||
|
||
## [深度视角:如何以概率模型统一看待?]
|
||
|
||
这是一个非常关键的问题:为什么 AIC、BIC、MDL 甚至 CV 在某些条件下是殊途同归的?
|
||
|
||
1. **目标函数的统一**:
|
||
|
||
所有这些方法本质上都在寻找 **Log-Posterior(对数后验)** 的最大值。
|
||
|
||
$$ \log P(Model | Data) = \log P(Data | Model) + \log P(Model) - \log P(Data) $$
|
||
|
||
- $\log P(Data | Model)$ 就是对数似然(AIC/BIC 的第一项)。
|
||
|
||
- $\log P(Model)$ 就是对复杂度的先验惩罚(AIC/BIC 的第二项)。
|
||
|
||
2. **渐近等价性**:
|
||
|
||
{ESL 证明了在某些特定的线性假设下,**AIC 实际上与 Leave-One-Out 交叉验证(LOOCV)是渐近等价的。** 也就是说,你用公式算出来的惩罚,和你用机器死力跑出来的 $N$ 次实验,在 $N$ 趋于无穷大时,结果是一样的。}
|
||
|
||
3. **信息论的终点**:
|
||
|
||
不论是 MDL 的压缩比,还是 AIC 的 KL 散度估计,它们最终都收敛于一个目标:**找到一个能用最简洁的信息(Minimal Bits)描述最真实世界(Maximum Likelihood)的映射函数。**
|
||
|
||
|
||
---
|
||
|
||
## [边界知识联动]
|
||
|
||
- **虚拟内存与重采样**:在进行大规模 **Bootstrap** 实验时,利用 Linux 内核的 **Copy-on-Write (COW)** 机制可以极大优化内存。因为重采样后的自助集与原数据集有大量重复地址空间, fork() 进程后无需立即复制内存。
|
||
|
||
- **硬件性能与惩罚项**:在嵌入式或边缘计算中,**BIC** 的意义巨大。它强制要求模型极度精简,这直接对应了 CPU 寄存器的占用量和指令集的流水线效率。
|
||
|
||
- **信号处理与过拟合**:Bias-Variance 的平衡在数字信号处理(DSP)中对应于 **通带波动与阻带衰减** 的权衡。过拟合就像是滤波器引入了过多的高频毛刺。
|
||
|
||
- **编译器优化**:CV 中提到的“特征选择泄露”类似于编译器在进行 **Loop Unrolling(循环展开)** 时错误地优化了具有副作用(Side Effects)的变量,导致逻辑正确但在实际运行中出现竞态条件。
|
||
|
||
|