10-2 线性模型的扩展(二):岭回归与 Lasso——正则化防过拟合
📌 一、 课程导入(5 分钟)
复习上节课的“惨状”:
上节课我们用 degree=15 的多项式回归,得到了一条疯狂扭曲的曲线——训练集误差几乎为 0,但测试集误差巨大。
追问:那条扭曲的曲线为什么那么扭曲?
答案:因为模型的系数(权重)变得极大。比如 \( y = 100x^{15} - 50x^{14} + 30x^{13} - \dots \),这些巨大的系数让曲线剧烈震荡。
核心洞察:
过拟合的“元凶”之一是系数过大。如果我们能“惩罚”过大的系数,让它们不要那么大,曲线就不会那么扭曲了。
引出方案:在损失函数里加一笔“罚款”——系数越大,罚款越多。模型为了减少总损失,就不得不把系数变小。这就是 正则化(Regularization)。
- 👨🏫 教师活动:展示上节课 degree=15 的扭曲曲线图,指着那些剧烈的波动问:“你们觉得什么导致了这种剧烈波动?”引导学生想到“系数太大”。
- 🧑🎓 学生活动:学生回忆上节课的内容,观察曲线,思考“为什么曲线会这么扭曲”。
用上节课的“惨状”作为引子,让学生带着“怎么解决”的疑问进入本节课,形成强烈的问题驱动。
📖 二、 解决问题过程(一):正则化——给模型“上枷锁”
1. 什么是正则化(Regularization)?
正则化就是在原来的损失函数(比如 MSE)后面加上一个惩罚项,用来约束模型参数的大小。
公式对比:
| 方法 | 损失函数 | 惩罚项 |
|---|---|---|
| 普通线性回归 | \( MSE = \frac{1}{m}\sum(y - \hat{y})^2 \) | 无 |
| 岭回归 (Ridge) | \( MSE + \alpha \sum w_j^2 \) | 系数的平方和(L2) |
| Lasso | ( MSE + \alpha \sum | w_j |
2. 生活类比(罚款制度)
- 没有正则化:模型可以随意把系数调得很大——就像开车没有限速,随便飙。
- 岭回归(L2):每超速 1 公里/小时罚 1 块钱——系数越大罚得越多,但不会把系数直接降到 0。
- Lasso(L1):超速直接吊销驾照——某些系数会被直接“砍”成 0。
3. 岭回归 vs Lasso 的核心区别
| 对比维度 | 岭回归 (Ridge / L2) | Lasso (L1) |
|---|---|---|
| 惩罚项 | 系数的平方和 \( \sum w_j^2 \) | 系数的绝对值之和 ( \sum |
| 对系数的影响 | 所有系数都缩小,但不会变成 0 | 部分系数直接变成 0 |
| 特征选择 | ❌ 不能自动筛选特征 | ✅ 能自动筛选特征(系数为 0 的特征被丢弃) |
| 适用场景 | 所有特征都有用,都想保留 | 特征很多,怀疑只有少数是重要的 |
| 处理共线性 | ✅ 效果很好 | ⚠️ 效果一般 |
4. 参数 α(alpha)的作用
alpha 控制惩罚的强度:
- alpha = 0:等于普通线性回归(无惩罚)。
- alpha 很小:惩罚很轻,模型接近普通线性回归。
- alpha 很大:惩罚很重,系数被大幅压缩,模型变得很简单。
口诀:alpha 越大,模型越“乖”(简单),越不容易过拟合。
- 👨🏫 教师活动:
- 在黑板上写出两个公式的对比,圈出 L2(平方)和 L1(绝对值)的区别。
- 用“罚款”的比喻解释为什么 Lasso 能让系数变 0——绝对值惩罚在小数上更“狠”。
- 🧑🎓 学生活动:
- 学生在笔记本上画出对比表格。
- 讨论:“如果我有 100 个特征,但觉得只有 5 个真正有用,应该用 Ridge 还是 Lasso?”(答案:Lasso)。
用“罚款”类比让抽象的正则化变得直观。重点强调 Lasso 的“特征选择”功能,这是实际工作中非常实用的技能。
💻 三、 解决问题过程(二):代码实战——用 Ridge 和 Lasso 驯服过拟合
1. 核心实验:用上节课的“问题数据”对比三种方法
我们用上节课 degree=15 的过拟合数据,分别用:
- 普通线性回归(无正则化)
- 岭回归(Ridge)
- Lasso
观察三种方法的效果差异。
2. 运行结果解读(课堂重点)
| 模型 | 训练集 MSE | 测试集 MSE | 曲线形态 |
|---|---|---|---|
| 线性回归(无正则化) | 极小(≈0) | 极大 | 疯狂扭曲的蛇形线 |
| 岭回归 (Ridge) | 较小 | 明显降低 | 平滑了很多,不再剧烈震荡 |
| Lasso | 较小 | 明显降低 | 平滑,且部分特征系数变为 0 |
3. 调节 alpha 观察变化
观察结论:
- alpha 太小(如 0.001):惩罚太轻,曲线依然扭曲,过拟合没解决。
- alpha 适中(如 0.1 ~ 1):曲线平滑,测试集误差最低。
- alpha 太大(如 10):惩罚太重,曲线几乎变成直线,欠拟合了。
- 👨🏫 教师活动:
- 运行对比代码,让三张图并排显示,指着中间的 Ridge 图说:“看,加了惩罚之后,那条疯狂的蛇形线变乖了!”
- 演示调节 alpha 从 0.001 到 10 的过程,让学生观察曲线从“扭曲”到“平滑”再到“直线”的变化。
- 🧑🎓 学生活动:
- 观察三张图的 MSE 数值,验证“加了正则化后测试集误差下降了”。
- 自己动手修改 alpha 值,观察曲线变化,感受“调参”的感觉。
这是本节课的高潮实验。通过三图对比,让学生亲眼看到正则化如何“驯服”过拟合。通过调节 alpha,让学生直观理解“惩罚强度”对模型复杂度的影响。
✍️ 四、 解决问题过程(三):Lasso 的特征选择能力
1. 核心亮点:Lasso 能自动“淘汰”不重要的特征
在实际工作中,我们经常遇到特征很多但不知道哪些重要的情况。Lasso 可以帮我们自动筛选——它会把不重要的特征的系数直接变成 0。
2. 演示实验:用 Lasso 从 15 个特征中选出重要的
在 degree=15 的多项式回归中,我们有 15 个特征(\( x, x^2, x^3, \dots, x^{15} \))。但真实数据是由二次函数生成的,所以真正重要的只有 \( x \) 和 \( x^2 \)。
看看 Lasso 能不能“发现”这个事实:
运行结果示例:
结论:Lasso 成功识别出只有 \( x \) 和 \( x^2 \) 是重要的,其他 13 个特征的系数全部变为 0!
3. 什么时候用 Ridge,什么时候用 Lasso?(职高必记)
| 场景 | 推荐 | 原因 |
|---|---|---|
| 特征不多(<20),且都有业务意义 | Ridge | 保留所有特征,只是缩小系数 |
| 特征很多(>50),怀疑只有少数重要 | Lasso | 自动筛选重要特征,简化模型 |
| 需要向老板解释“哪些特征最重要” | Lasso | 系数为 0 的特征可以直接说“这个不重要” |
| 特征之间有强相关性(共线性) | Ridge | Lasso 在共线性下表现不稳定 |
- 👨🏫 教师活动:
- 运行 Lasso 系数打印代码,让学生看到大量系数变成 0 的“壮观”场面。
- 提问:“如果老板问你‘这 15 个特征里哪些对房价影响最大’,你怎么回答?”(答案:用 Lasso,系数不为 0 的就是重要的)。
- 🧑🎓 学生活动:
- 观察 Lasso 的系数输出,数一数有多少个变成了 0。
- 讨论:如果特征是“年龄、收入、学历、城市、职业…”等 50 个,用 Ridge 还是 Lasso?
Lasso 的“特征选择”能力是它在工业界备受青睐的原因。通过这个实验,让学生看到 Lasso 不仅能防过拟合,还能帮我们“读懂”数据——哪些特征真正重要。
📝 五、 课堂小结(5 分钟)
flowchart TB
root["🛡️ 正则化:给模型『上枷锁』"]
root --> C1["📐 岭回归 (Ridge / L2)"]
root --> C2["📏 Lasso (L1)"]
C1 --> C1a["惩罚项: 系数平方和"]
C1 --> C1b["效果: 所有系数都缩小"]
C1 --> C1c["特点: 不删除任何特征"]
C1 --> C1d["适用: 所有特征都有用"]
C2 --> C2a["惩罚项: 系数绝对值之和"]
C2 --> C2b["效果: 部分系数变为 0"]
C2 --> C2c["特点: 自动特征选择"]
C2 --> C2d["适用: 特征很多,只少数重要"]
root --> C3["⚙️ alpha 参数"]
C3 --> C3a["alpha 越大 → 惩罚越重 → 模型越简单"]
C3 --> C3b["alpha 太小 → 过拟合"]
C3 --> C3c["alpha 太大 → 欠拟合"]
style root fill:#4b6cb7,stroke:#253b6e,color:#fff
style C1 fill:#e3f2fd,stroke:#2196f3
style C2 fill:#fff3e0,stroke:#ff9800
style C3 fill:#e8f5e9,stroke:#4caf50
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 单词 | 发音 | 专业英语解释(中文) |
|---|---|---|
| Regularization | /ˌreɡjələrəˈzeɪʃən/ | 正则化。在损失函数中添加惩罚项以防止过拟合的技术。 |
| Ridge Regression | /rɪdʒ rɪˈɡreʃən/ | 岭回归。使用 L2 正则化(系数平方和)的线性回归方法。 |
| Lasso | /ˈlæsoʊ/ | 套索回归。使用 L1 正则化(系数绝对值之和)的线性回归方法,可自动进行特征选择。 |
| L1 Regularization | /el wʌn ˌreɡjələrəˈzeɪʃən/ | L1 正则化。惩罚项为系数绝对值之和,能使部分系数变为 0。 |
| L2 Regularization | /el tuː ˌreɡjələrəˈzeɪʃən/ | L2 正则化。惩罚项为系数平方和,能使所有系数缩小但不为 0。 |
| Alpha | /ˈælfə/ | 正则化强度参数。控制惩罚项在损失函数中的权重,越大模型越简单。 |
| Feature Selection | /ˈfiːtʃər sɪˈlekʃən/ | 特征选择。从众多特征中筛选出重要特征的过程,Lasso 可自动完成。 |