Appearance
第3章 线性模型
🎯 学习目标
- 理解线性回归的数学原理和最小二乘法
- 掌握梯度下降算法的工作机制和参数调优
- 理解逻辑回归和 Sigmoid 函数在分类问题中的应用
- 掌握线性判别分析(LDA)的降维与分类思想
- 了解多分类学习的拆分策略(OvO/OvR/ECOC)
- 认识类别不平衡问题及其应对策略
- 认识正则化(L1/L2)对模型复杂度的控制作用
- 掌握损失函数的概念及其在模型训练中的核心地位
3.1 线性回归 (Linear Regression)
📊 什么是线性回归?
线性回归试图学习一个线性函数来拟合数据,是最简单但也最常用的回归模型。给定数据集 D,线性回归试图学到一个函数来映射输入和输出的关系:
其中 w 是权重(斜率),b 是偏置(截距)。我们的目标是找到最优的 w 和 b,使得预测值
📐 均方误差损失 (MSE Loss)
我们使用均方误差(Mean Squared Error)来衡量模型的好坏:
为什么用平方?
- 确保误差总是正数
- 惩罚大的误差更严重
- 数学性质良好,易于求导
最小二乘法: 通过令损失函数的导数为 0,可以直接求出解析解(闭式解)。
交互式演示
手动调整参数观察拟合效果,或点击"梯度下降训练"观看算法自动寻找最优解。红色线段表示预测误差(残差),损失函数就是所有残差平方的平均值。
模型参数
当前模型: y = 2.00x + 1.00
损失函数 (MSE)
当前损失:0.00
● 训练数据点
━ 当前拟合线
| 预测误差(残差)
💡 手动调整斜率和截距,观察损失函数的变化。点击"梯度下降训练"观看算法自动寻找最优解的过程。
3.2 梯度下降 (Gradient Descent)
🎯 优化的艺术
梯度下降是机器学习中最重要的优化算法。它的核心思想非常直观:沿着函数下降最快的方向(负梯度方向)移动,逐步逼近最优解。
更新规则
| 符号 | 含义 |
|---|---|
| 待优化的参数 | |
| 学习率(步长) | |
| 损失函数的梯度 |
✓ 梯度下降的优势
- 适用于高维问题
- 不需要矩阵求逆
- 可处理大规模数据
- 容易并行化
⚠️ 学习率的选择
- 太小:收敛缓慢
- 太大:可能震荡或发散
- 建议:从小开始逐步调整
梯度下降可视化(2D)
调整学习率和初始位置,观察优化过程。红色虚线表示当前的梯度方向(损失函数的切线),紫色路径显示参数的更新轨迹。
当前状态
迭代次数:0
参数 x:8.000
损失 L(x):37.000
梯度 ∂L/∂x:12.000
更新规则: x ← x - α·∂L/∂x
━
蓝色曲线
损失函数 L(x) = (x-2)² + 1
●
橙色圆点
当前参数位置
━ ━
红色虚线
当前梯度方向(切线)
· · ·
紫色路径
优化轨迹
3D 损失曲面可视化
探索不同损失函数的三维形状,观察梯度下降在 3D 空间中的优化轨迹。拖拽旋转视角,体验从简单凸优化到复杂地形的挑战。
损失函数类型
学习率: 0.10
二次函数 (Quadratic)
最简单的凸优化问题,全局最优解在原点
公式: L(w₁, w₂) = w₁² + w₂²
梯度: ∇L = [2w₁, 2w₂]
图例
起始点
优化路径
终止点
拖拽旋转 · 滚轮缩放 · 右键平移
代码实践:实现梯度下降
python
def gradient_descent(learning_rate, num_iterations):
"""
使用梯度下降优化 f(x) = x^2
参数:
learning_rate: 学习率
num_iterations: 迭代次数
返回:
x: 最终的 x 值
history: 优化过程中的 x 值列表
"""
x = 10.0 # 初始值
history = [x]
for i in range(num_iterations):
# 计算梯度 df/dx = 2x
gradient = 2 * x
# 更新 x 值
x = x - learning_rate * gradient
history.append(x)
return x, history
# 测试代码
final_x, path = gradient_descent(learning_rate=0.1, num_iterations=20)
print(f"最终 x 值: {final_x:.6f}")
print(f"最终 f(x) 值: {final_x**2:.6f}")
print(f"优化路径长度: {len(path)}")3.3 逻辑回归 (Logistic Regression)
🔄 从回归到分类
尽管名字里有"回归",但逻辑回归实际上是一个分类算法。它通过 Sigmoid 函数将线性模型的输出映射到 (0, 1) 区间,表示样本属于正类的概率。
Sigmoid 函数
其中
| 条件 | 结果 |
|---|---|
✂️ 决策边界
当
交互式演示
调整权重和偏置参数,观察决策边界如何移动。背景颜色表示分类概率:蓝色表示倾向于正类,红色表示倾向于负类。虚线是 P=0.5 的决策边界。
模型参数
决策边界方程:
1.00·x₁ + 1.00·x₂ + 0.00 = 0
分类性能
0.0%
准确率
Sigmoid 函数
σ(z) = 1 / (1 + e⁻ᶻ)
其中 z = w₁·x₁ + w₂·x₂ + b
输出范围: (0, 1)决策阈值: 0.5
绿色圆点正类样本 (label = 1)
红色圆点负类样本 (label = 0)
虚线决策边界 (P = 0.5)
🎨 背景颜色表示分类概率:红色区域倾向于类别 0,蓝色区域倾向于类别 1。调整参数观察决策边界如何移动。
3.4 线性判别分析 (Linear Discriminant Analysis)
📐 Fisher 判别的思想
线性判别分析(LDA)的核心思想是:将样本投影到一条直线上,使得同类样本的投影尽可能近(类内散度小),异类样本的投影尽可能远(类间散度大)。
散度矩阵
给定数据集
- 第
类的均值向量: - 类内散度矩阵:
- 类间散度矩阵:
最优投影方向
LDA 的目标是最大化广义瑞利商:
即最大化类间散度与类内散度的比值。通过拉格朗日乘子法,最优解为:
🔍 LDA vs PCA
| 比较维度 | LDA | PCA |
|---|---|---|
| 类型 | 监督降维 | 无监督降维 |
| 目标 | 最大化类别可分性 | 最大化数据方差 |
| 利用标签 | ✅ 是 | ❌ 否 |
| 最大维度 | 类别数 - 1 | 不受限 |
| 适用场景 | 分类预处理 | 通用降维 |
3.5 多分类学习
🎯 从二分类到多分类
现实中很多问题涉及多个类别(如手写数字识别有 0-9 共 10 类)。基本思路是将多分类任务拆解为若干个二分类任务来求解。
拆分策略
| 策略 | 全称 | 训练分类器数 | 思想 |
|---|---|---|---|
| OvO | One-vs-One | 每两个类别训练一个分类器,投票决定 | |
| OvR | One-vs-Rest | 每个类别 vs 其余所有类别 | |
| MvM | Many-vs-Many | 由编码矩阵决定 | 多个类别分为两组,多次划分 |
OvO(一对一)
- 训练
个分类器 - 每个分类器只用两个类别的数据
- 预测时投票:票数最多的类别胜出
- ✅ 训练速度快(每个分类器数据量小)
- ⚠️ 分类器数量多
OvR(一对其余)
- 训练
个分类器 - 每个分类器用一个类别 vs 其余全部
- 预测时选置信度最高的分类器
- ✅ 分类器数量少
- ⚠️ 训练数据不平衡
📦 纠错输出码 (ECOC)
ECOC 是 MvM 的一种实现。对
ECOC 具有一定的纠错能力:即使某个分类器出错,仍可能通过编码冗余得到正确的分类结果。
3.6 类别不平衡问题
⚖️ 当数据不平衡时
在很多实际场景中,不同类别的样本数量差距悬殊(如欺诈检测中,正常交易远多于欺诈交易)。此时分类器倾向于将所有样本预测为多数类,导致少数类的识别能力很差。
应对策略
| 策略 | 方法 | 说明 |
|---|---|---|
| 欠采样 | 减少多数类样本 | 随机丢弃多数类样本,使两类数量接近。缺点:可能丢失重要信息。代表方法:EasyEnsemble |
| 过采样 | 增加少数类样本 | 复制或合成少数类样本。代表方法:SMOTE(在少数类样本之间插值生成新样本) |
| 阈值移动 | 调整决策阈值 | 不改变数据,将决策阈值从 0.5 调整为 |
💡 代价敏感学习
另一种思路是为不同类型的错误赋予不同的代价(misclassification cost)。例如,在医疗诊断中,漏诊的代价远高于误诊。通过代价矩阵,让模型在训练时考虑错误的不对称性:
其中
3.7 正则化 (Regularization)
🛡️ 防止过拟合的利器
正则化通过在损失函数中添加惩罚项来限制模型复杂度,防止过拟合。两种最常用的正则化方法是 L1 和 L2 正则化。
L2 正则化(Ridge)
- 惩罚权重的平方和
- 倾向于产生小但非零的权重
- 适合特征之间相关性高的情况
- 解析解存在(可直接求解)
L1 正则化(Lasso)
- 惩罚权重的绝对值和
- 倾向于产生稀疏解(很多权重为 0)
- 可用于特征选择
- 更具解释性
⚖️ 正则化系数 λ (lambda)
λ 控制正则化的强度:
- λ = 0:无正则化,可能过拟合
- λ 太大:欠拟合,模型过于简单
- λ 适中:在偏差和方差之间取得平衡
📐 L1 vs L2:几何直观
L2: 圆形约束 — 在参数空间中,L2 正则化的约束区域是一个圆(或高维的球)。损失函数等高线与圆的切点通常不在坐标轴上,所以权重不会变成 0。
L1: 菱形约束 — L1 正则化的约束区域是菱形(或高维的超菱形)。等高线更容易在菱形的顶点(坐标轴)处相交,导致某些权重精确为 0。
📝 本章小结
总结
- ✅ 线性回归通过最小化均方误差学习线性函数,可用解析解或梯度下降求解
- ✅ 梯度下降是核心的优化算法,沿负梯度方向迭代更新参数
- ✅ 学习率是关键超参数,需要仔细调整以平衡收敛速度和稳定性
- ✅ 逻辑回归使用 Sigmoid 函数将线性输出映射为概率,用于二分类问题
- ✅ LDA 通过最大化类间散度与类内散度之比寻找最优投影方向
- ✅ 多分类学习可通过 OvO、OvR、ECOC 等拆分策略实现
- ✅ 类别不平衡可通过欠采样、过采样(SMOTE)、阈值移动或代价敏感学习应对
- ✅ 正则化(L1/L2)通过惩罚项控制模型复杂度,防止过拟合
- ✅ L1 倾向于稀疏解(特征选择),L2 倾向于权重衰减