10-1 线性模型的扩展(一):多项式回归与过拟合
📌 一、 课程导入(5 分钟)
复习回顾:上一章我们学了线性回归,它用一条直线 \( y = wx + b \) 来拟合数据。
情景模拟:直线不够用怎么办?
假设我们要预测房价与房屋面积的关系。真实情况往往是:面积很小的时候价格低,面积适中的时候价格涨得最快,面积特别大的时候价格增速又放缓了——这是一个弯弯曲曲的曲线,不是一条直线。
问题:线性回归只会画直线,强行画一条直线去拟合曲线,结果就是欠拟合——训练集和测试集的误差都很大,模型太“笨”了。
思考:我们能不能让线性回归“学会”画曲线?
引出方案:可以!把 \( x^2 \)、\( x^3 \) 当作新的特征加进去,线性回归就能拟合曲线了。这就是 多项式回归。
- 👨🏫 教师活动:在 PPT 上展示一张散点图(呈现明显的曲线趋势),再画一条直线穿过它,问学生:“这条直线拟合得好不好?”(学生答:不好)。
- 🧑🎓 学生活动:学生观察图形,直观感受“直线拟合曲线”的别扭感,产生“有没有办法让线变弯”的好奇。
用“直线 vs 曲线”的直观对比,让学生立刻理解线性回归的局限性。再抛出“把 x² 当新特征”的思路,为多项式回归做铺垫。
📖 二、 解决问题过程(一):多项式回归——让直线“学会拐弯”
1. 核心思想(一句话)
把“非线性”变成“线性”——把 \( x^2, x^3, \dots \) 当作新的特征,再用线性回归去拟合。
2. 公式对比
| 模型 | 公式 | 本质 |
|---|---|---|
| 线性回归 | \( y = w_0 + w_1 x \) | 一条直线 |
| 二次多项式回归 | \( y = w_0 + w_1 x + w_2 x^2 \) | 一条抛物线 |
| 三次多项式回归 | \( y = w_0 + w_1 x + w_2 x^2 + w_3 x^3 \) | 更复杂的曲线 |
关键理解:从模型的角度看,它根本不关心 \( x^2 \) 是“平方”出来的——它只知道现在有 3 个特征:\( x \)、\( x^2 \)、\( x^3 \)。它仍然在用线性回归的公式 \( y = w_0 + w_1 \cdot \text{特征1} + w_2 \cdot \text{特征2} + \dots \) 去算。这就是 “非线性问题线性化” 的精髓。
3. 代码实现(PolynomialFeatures)
- 👨🏫 教师活动:
- 在黑板写下:
[x]→PolynomialFeatures(degree=2)→[x, x²],强调“多了个新特征”。 - 运行代码,展示拟合曲线如何“变弯”。
- 在黑板写下:
- 🧑🎓 学生活动:
- 观察
X_poly.shape,看看原来 1 列变成了几列。 - 修改
degree=3,观察曲线变得更复杂。
- 观察
用最简代码展示多项式回归的核心——特征升维。让学生看到“特征变多了,直线就变弯了”的直观效果。
💻 三、 解决问题过程(二):过拟合——当模型“太聪明”反而坏事
1. 情景模拟:学霸的“背答案”困境
有个学生把题库里所有题的答案都背下来了——训练集考试 100 分。但高考出了新题(测试集),一道都不会——测试集 0 分。
这就是 过拟合:模型在训练集上表现完美,但在未见过的数据上表现极差。
2. 多项式回归中的过拟合(核心实验)
我们用同样的数据,分别用 degree=1(直线)、degree=4(适度)、degree=15(过高)来拟合,观察发生了什么。
3. 三个 degree 的结果解读(课堂重点)
| degree | 训练集误差 | 测试集误差 | 现象 |
|---|---|---|---|
| 1(直线) | 大 | 大 | 欠拟合——太简单,两边都学不好 |
| 4(适中) | 小 | 小 | 刚好——抓住了真实规律 |
| 15(过高) | 几乎为 0 | 巨大 | 过拟合——曲线疯狂扭曲,记住了每一个训练点的噪声 |
4. 核心结论(学生必记)
模型不是越复杂越好。太简单的模型学不到规律(欠拟合),太复杂的模型记住了噪声(过拟合)。我们的目标是找到 “刚刚好” 的复杂度。
- 👨🏫 教师活动:
- 运行三段代码,让学生观察三张图的变化——从一条直直的线,到平滑曲线,到最后疯狂扭曲的“蛇形线”。
- 指着 degree=15 的图问:“这条扭曲的线,你们觉得它能预测新数据吗?”(学生:不能)。
- 🧑🎓 学生活动:
- 观察三个子图的 MSE 数值变化,记录“训练集误差越来越小,测试集误差先降后升”的规律。
- 讨论:“degree=15 的模型在训练集上几乎零误差,这算‘好模型’吗?”(答案:不算,因为它没有学到真正的规律)。
这是整节课的核心实验。通过三张图的对比,让学生亲眼看到“过拟合”长什么样——那条疯狂扭曲的曲线会深深印在他们脑子里,为下一节课的“正则化”打下强烈的问题意识。
✍️ 四、 解决问题过程(三):课堂练习——自己动手“造”过拟合
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📈 多项式回归与过拟合"]
subgraph C1 ["📐 多项式回归"]
direction TB
A1["把 x², x³ 当作新特征"]
A2["代码: PolynomialFeatures"]
A3["让线性模型拟合曲线"]
end
subgraph C2 ["⚠️ 过拟合"]
direction TB
B1["训练集完美 ✅"]
B2["测试集崩盘 ❌"]
B3["模型记住了噪声"]
end
subgraph C3 ["🎯 核心结论"]
direction TB
C1_node["degree 太低 → 欠拟合"]
C2_node["degree 太高 → 过拟合"]
C3_node["需要找到『刚刚好』"]
end
root --> C1
root --> C2
root --> C3
style root fill:#4b6cb7,stroke:#253b6e,color:#fff
style C1 fill:#e3f2fd,stroke:#2196f3
style C2 fill:#ffebee,stroke:#ef5350
style C3 fill:#e8f5e9,stroke:#4caf50
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 单词 | 发音 | 专业英语解释(中文) |
|---|---|---|
| Polynomial Regression | /ˌpɑːliˈnoʊmiəl rɪˈɡreʃən/ | 多项式回归。通过增加特征的高次项来拟合非线性关系的回归方法。 |
| Overfitting | /ˌoʊvərˈfɪtɪŋ/ | 过拟合。模型在训练集上表现极好,但在新数据上表现很差的现象。 |
| Underfitting | /ˌʌndərˈfɪtɪŋ/ | 欠拟合。模型过于简单,无法捕捉数据中的规律。 |
| Degree | /dɪˈɡriː/ | 阶数。多项式回归中最高次项的次数。 |
| Generalization | /ˌdʒenərəlaɪˈzeɪʃən/ | 泛化。模型在新数据上的表现能力。 |
| Noise | /nɔɪz/ | 噪声。数据中的随机波动或误差。 |