第3讲:统计学习的基本框架与模型评估
导入:统计学习在数据科学中的位置
在上一讲中,我们已经介绍过数据科学的主要方法。从整体上看,数据科学的方法体系主要建立在统计学方法和机器学习方法两大基础之上。监督学习、无监督学习、半监督学习和强化学习共同构成了现代数据科学建模与分析的基本框架。
其中,统计学习方法是连接传统统计学与现代机器学习的重要桥梁。它关注的核心问题是:如何从有限样本中学习数据规律,并用所学规律对未知样本进行预测、分类或解释。
从这个意义上说,统计学习并不只是若干模型和算法的简单罗列,而是一套围绕“模型建立—效果评价—最优化求解”展开的系统方法。因此,本讲的重点就是理解统计学习的基本框架,以及它在数据科学中的作用。
统计学习的基本框架
统计学习研究的核心任务,是在给定训练数据的基础上,从某一类假设空间中学习一个最优模型,使其既能够较好地拟合已有样本,又能够在未知样本上保持良好的预测能力。
从方法论上看,统计学习可以概括为三要素:
Method = Model + Policy + Algorithm
也就是说,一个完整的统计学习方法,至少要回答三个问题:
- 用什么形式描述输入与输出之间的关系;
- 用什么标准衡量模型的好坏;
- 用什么方法求得最优模型。
统计学习三要素
模型(Model)
模型是输入变量 $X$ 与输出变量 $Y$ 之间关系的形式化表达。根据建模方式不同,模型可以表示为决策函数,也可以表示为条件概率分布。
决策函数的集合: \(F = \{f \mid Y = f(X)\}\)
参数化的决策函数空间: \(F = \{f \mid Y = f_{\theta}(X), \theta \in \mathbb{R}^n\}\)
条件概率分布集合: \(F = \{P \mid P(Y|X)\}\)
参数化的条件概率模型空间: \(F = \{P \mid P_{\theta}(Y|X), \theta \in \mathbb{R}^n\}\)
从教学角度理解,模型就是“候选答案的集合”。统计学习的目的,并不是直接从所有可能的关系中寻找答案,而是在预先设定好的假设空间中选择一个最优模型。
统计学习三要素
策略(Policy)
策略讨论的是:如何衡量一个模型好不好。
要回答这个问题,就需要引入损失函数与风险函数。
损失函数(loss function)
损失函数衡量的是模型在单个样本上的预测误差,也就是“一次预测的好坏”。
0-1损失函数: \(L(Y,f(X)) = \left\{ \begin{aligned} 1, & \quad Y \neq f(X) \\ 0, & \quad Y = f(X) \end{aligned} \right.\)
平方损失函数: \(L(Y,f(X)) = (Y - f(X))^2\)
绝对损失函数: \(L(Y,f(X)) = |Y - f(X)|\)
对数损失函数(logarithmic loss function): \(L(Y,P(Y|X)) = -\log P(Y|X)\)
不同任务通常对应不同损失函数。比如分类问题常用 0-1 损失或对数损失,回归问题常用平方损失或绝对损失。
统计学习三要素
风险函数(Risk Function)
损失函数描述单次预测误差,而风险函数描述的是平均意义下模型预测的好坏。
期望风险(expected risk)
若已知样本的真实联合分布 $P(X,Y)$,则模型 $f$ 的期望风险为:
\[R_{exp}(f) = E_P[L(Y,f(X))] = \int_{X \times Y} L(y,f(x))P(x,y)\,dx\,dy\]期望风险是理想意义下最希望最小化的目标,但在实际中,真实分布 $P(X,Y)$ 通常未知。我们真正已知的只有训练样本:
\[T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\]因此,实际建模中通常采用经验风险来近似期望风险。
经验风险(empirical risk)
\[R_{emp}(f) = \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i))\]经验风险也称经验损失,它反映的是模型在训练集上的平均误差。
统计学习三要素
经验风险最小化与结构风险最小化
经验风险最小化(ERM)
最直接的学习策略,就是在假设空间 $\mathscr{F}$ 中选择一个经验风险最小的模型:
\[\min_{f \in \mathscr{F}} \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i))\]经验风险最小化的思想很自然,即让模型尽量拟合训练数据。但当样本量较小、模型复杂度较高时,这种做法往往会导致过拟合(over-fitting)。
结构风险最小化(SRM)
为防止过拟合,需要在经验风险基础上加入正则化项,也就是模型复杂度惩罚项:
\[\min_{f \in \mathscr{F}} \left\{\frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i)) + \lambda J(f)\right\}\]其中:
- $\lambda$ 是正则化参数;
- $J(f)$ 是模型复杂度或罚项。
结构风险最小化的思想是:不仅要让模型拟合训练数据,还要控制模型复杂度,使模型在未知数据上也能保持较好的表现。
统计学习三要素
算法(Algorithm)
在给定模型与策略之后,最后的问题就是:如何求解最优模型。
求最优模型本质上就是求解如下最优化问题:
\[\underset{f \in \mathscr{F}}{min} \left\{\frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i)) + \lambda J(f)\right\}\]算法就是对这一求解过程的准确而完整的描述。它是一系列清晰的、有限的、可执行的指令,用来实现模型参数的求解。
一般来说:
- 如果最优化问题有显式解析解,算法相对简单;
- 但大多数情况下解析解并不存在,需要依赖数值优化方法。
一个算法的优劣,通常可以从以下两个方面衡量:
- 时间复杂度
- 空间复杂度
因此,统计学习不仅是数学建模问题,也同时是计算问题。
模型评估与模型选择
为什么要做模型评估
在统计学习中,模型训练完成后,并不意味着任务结束。更重要的是判断这个模型在新数据上的表现如何。一个模型如果在训练数据上表现很好,但在未知数据上效果很差,就说明它缺乏良好的泛化能力。
因此,模型评估与模型选择的目的主要包括:
- 衡量模型的预测效果;
- 比较不同模型的优劣;
- 识别过拟合和欠拟合;
- 选择具有较强泛化能力的模型。
训练误差与测试误差
训练误差
训练误差是模型在训练数据集上的平均损失:
\[R_{emp}(\hat{f})=\frac{1}{N}\sum_{i=1}^N L(y_i,\hat{f}(x_i))\]测试误差
测试误差是模型在测试数据集上的平均损失:
\[r_{test}=\frac{1}{M}\sum_{i=1}^M L(y_i,\hat{f}(x_i))\]当损失函数为 0-1 损失时,测试误差可写为:
\[e_{test}=\frac{1}{M}\sum_{i=1}^M I(y_i\neq \hat{f}(x_i))\]相应的测试准确率为:
\[r_{test}=\frac{1}{M}\sum_{i=1}^M I(y_i=\hat{f}(x_i))\]在实际中,真正重要的不是训练误差,而是测试误差。因为测试误差更能反映模型对未知样本的预测能力。
过拟合与模型训练
假定给定训练数据集:
\[T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\]考虑多项式回归模型:
\[f_M(x,w) = w_0 + w_1x + w_2x^2 + \cdots + w_Mx^M = \sum_{j=0}^M w_jx^j\]平方损失函数下的经验风险可表示为:
\[L(w) = \frac{1}{2}\sum_{i=1}^N (f_M(x_i,w) - y_i)^2\]即:
\[L(w) = \frac{1}{2}\sum_{i=1}^N \left(\sum_{j=0}^M w_jx_i^j - y_i\right)^2\]当模型阶数 $M$ 较小时,模型可能过于简单,表现为欠拟合;当模型阶数 $M$ 过大时,模型可能过于复杂,表现为过拟合。因此,模型选择的关键,不是让模型越复杂越好,而是在复杂度与泛化能力之间找到平衡。
模型评估与模型选择
{ width=”70%” }
模型评估与模型选择
{ width=”70%” }
正则化与交叉验证
正则化
正则化的一般形式为:
\[\underset{f \in \mathscr{F}}{min} \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i)) + \lambda J(f)\]正则化的本质,是通过对模型复杂度进行惩罚来抑制过拟合,从而提高模型的泛化能力。
在回归问题中,常见的正则化方法包括:
1. 岭回归(Ridge Regression)
\[\underset{f \in \mathscr{F}}{min} \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i)) + \frac{\lambda}{2} ||w||^2\]2. Lasso回归(Lasso Regression)
\[\underset{f \in \mathscr{F}}{min} \frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i)) + \frac{\lambda}{2} ||w||_1\]其中,岭回归通过 $L_2$ 范数惩罚缩小参数,Lasso 则通过 $L_1$ 范数惩罚实现参数收缩甚至变量选择。
交叉验证
在模型评估过程中,通常需要把数据划分为三个部分:
- 训练集(training set):相当于教材,用于训练模型;
- 验证集(validation set):相当于练习册,用于模型选择和参数调优;
- 测试集(test set):相当于期末考试,用于最终评估学习方法。
常见的交叉验证方法包括:
- 简单交叉验证
- $S$ 折交叉验证
- 留一交叉验证
交叉验证的核心思想是通过重复划分样本,提高模型评估的稳定性,减少偶然性。
泛化能力(Generalization Ability)
什么是泛化能力
泛化能力是指模型对未知样本的预测能力。统计学习追求的,并不是单纯降低训练误差,而是构建具有较好泛化能力的模型。
泛化误差
泛化误差定义为模型在总体分布上的平均损失:
\[R_{exp}(\hat{f}) = E_P[L(Y,\hat{f}(X))] = \int_{X \times Y} L(y,\hat{f}(x))P(x,y)\,dx\,dy\]它是评价学习方法优劣的根本标准,但由于总体分布未知,因此通常只能通过经验风险和理论上界进行间接分析。
泛化误差上界
设经验风险最小化得到的函数为:
\[f_N = arg\underset{f \in \mathscr{F}}{min}\ \hat{R}(f)\]其泛化能力可表示为:
\[R(f_N) = E[L(Y,f_N(X))]\]对于二分类问题,当假设空间是有限个函数的集合时,对任意函数 $f$,至少以概率 $1-\delta$,以下不等式成立:
\[R(f) \leq \hat{R}(f) + \varepsilon(d,N,\delta)\]其中:
\[\varepsilon(d,N,\delta) = \sqrt{\frac{1}{2N}\left(\log d + \log\frac{1}{\delta}\right)}\]这一结果说明:
- 样本容量越大,泛化误差上界越小;
- 假设空间越复杂,泛化误差上界越大;
- 经验风险小并不必然意味着泛化误差也小。
生成模型
什么是生成模型
监督学习的目标是学习一个模型,这个模型既可以表示为决策函数:
\[Y = f(X)\]也可以表示为条件概率分布:
\[P(Y|X)\]| 如果由联合分布 $P(X,Y)$ 出发,再推导条件分布 $P(Y | X)$,那么这种方法称为生成方法(Generative Approach),对应的模型称为生成模型(Generative Model)。 |
根据贝叶斯公式:
\[P(Y|X) = \frac{P(X,Y)}{P(X)}\]典型的生成模型包括:
- 朴素贝叶斯法
- 隐马尔可夫模型
生成模型更关注“数据是如何生成的”。
判别模型
什么是判别模型
| 与生成模型不同,判别方法(Discriminative Approach)是直接由数据学习决策函数 $f(X)$ 或条件概率分布 $P(Y | X)$ 作为预测模型。 |
或
\[P(Y|X)\]典型的判别模型包括:
- K近邻法
- 感知机
- 决策树
- Logistic 回归
- 最大熵模型
- 支持向量机
- 提升方法
- 条件随机场
判别模型更关注预测边界本身和预测准确率。
生成模型与判别模型
各自优缺点
生成方法的特点
- 可以还原联合概率分布 $P(X,Y)$;
- 在样本容量增加时,往往较快收敛到真实模型;
- 当存在隐变量时,仍然可以使用。
判别方法的特点
直接学习 $Y=f(X)$ 或 $P(Y X)$,预测目标明确; - 往往具有更高的分类准确率;
- 可以更灵活地定义和使用特征,从而简化学习过程。
从直观上看:
- 生成模型更关注“数据从哪里来”;
- 判别模型更关注“类别怎么分更准”。
统计学习与机器学习的关系
统计学习与机器学习在很多场景中高度重叠。二者都以数据为研究对象,都希望通过模型从数据中提取规律,并对未知数据进行预测或解释。很多机器学习方法本质上都具有统计学基础。
但二者也有差异:
- 统计学习更强调形式化建模、理论推导和可解释性;
- 机器学习更强调预测性能、算法实现和复杂场景适应性。
因此,可以说统计学习是机器学习的重要理论基础,也是数据科学方法体系中的核心组成部分。
需要安装软件
软件环境
要使用这一模板,需要安装以下软件:
- Texlive(为了能编译出 beamer)
- R
- Rstudio(为了使用 Rmarkdown)
此外,在 R 中还需要安装以下包:
- knitr(为了编译 Rmarkdown)
- rticles(支持中文)
- tinytex(轻量级的 LaTeX)
R语言
为什么学习 R
R 语言是一种面向统计分析和数据可视化的开源编程语言,在统计建模、数据处理和科研绘图方面具有明显优势。它特别适合用于:
- 数据清洗与整理
- 描述统计与推断统计
- 回归分析与分类建模
- 可视化展示
- 动态报告生成
因此,R 是把统计学习理论落实到实际操作中的重要工具。
Python语言
为什么学习 Python
Python 是一种通用型高级编程语言,在数据分析、机器学习、深度学习和工程实现中应用极其广泛。与 R 相比,Python 更强调通用性与工程性,特别适合:
- 数据预处理
- 机器学习建模
- 深度学习实现
- 自动化开发
- Web 与接口整合
总体来看:
- R 更偏统计分析与科研表达
- Python 更偏工程实现与智能应用
