6-4降维(PCA与SVD)数据瘦身
📌 一、 课程导入(5 分钟)
情景模拟:体检报告太详细,医生看花眼了!
假设你去医院体检,机器给你测了 100 个指标(身高、体重、血压、心率、血糖、血脂……)。这 100 个指标就是 100 维特征。
问题来了:
- 计算太慢:模型处理 100 维数据,计算距离要算 100 次减法,电脑卡顿。
- 过拟合风险:很多指标其实是重复的(比如“收缩压”和“舒张压”高度相关),冗余特征会让模型学歪。
- 没法画图:人类只能理解 3 维以内的空间,100 维的数据你看不到全貌。
引出解决方案: 聪明的医生不会看全部 100 项,而是提取几个综合指标,比如 “心血管健康指数”(由血压、血脂合并而来)。这个合并过程就是 降维。
温故知新:
上节课我们学了用 PolynomialFeatures 造特征(特征变多)。降维就是它的“反向操作”——当特征多到跑不动时,我们把它压缩回去。
- 👨🏫 教师活动:展示一张 1000x1000 像素的图片,再展示压缩成 100x100 的缩略图。提问:“缩略图虽然模糊了,但你是不是还能认出它是猫还是狗?”(答案:能,关键信息保留了)。
- 🧑🎓 学生活动:学生观察图片,感受“降维保信息”的直观含义。引出 PCA 就像“给数据拍一张低分辨率的快照”。
用“体检报告”这种信息过载的场景,让学生立刻共情“维度灾难”的痛点。再用“图片压缩”的常识,瞬间建立“降维≠瞎删数据,而是提炼精华”的正确认知。
📖 二、 解决问题过程(一):什么是 PCA 主成分分析(核心概念)
1. 核心思想:找一条“最佳投影线” 想象桌子上撒了一把长条形的豆子(二维数据:X 轴和 Y 轴)。
- 原始坐标:你要用 (x, y) 两个数描述每颗豆子的位置。
- 降维目标:只用一个数(一维)描述每颗豆子。
怎么做?
- ❌ 错误做法:只取 X 坐标,抛弃 Y 坐标(丢掉了豆子在 Y 方向的高低差异)。
- ✅ PCA 做法:画一条穿过豆子群中间、且豆子们在这条线上的投影分散得最开的斜线。
2. 关键术语(不讲数学,只讲意象)
- 主成分(Principal Component):就是那条“最佳投影线”的方向。第一主成分是散得最开的线,第二主成分是与第一条垂直且散得第二开的线。
- 方差(Variance):数据在投影线上的“分散程度”。方差越大,说明这个方向上区分度越高,信息量越大。
3. 降维的威力(三个字:快、省、清)
| 作用 | 解释 |
|---|---|
| 加速计算 | 100 维降到 2 维,计算距离快几十倍 |
| 节省内存 | 数据体积缩小,训练更快 |
| 便于可视化 | 降到 2 维或 3 维,就能画散点图观察数据族群 |
4. PCA 与 SVD 的关系(一句话带过)
“PCA 是降维的方法,而 SVD(奇异值分解) 是计算机在背后计算 PCA 时使用的一种高效的数学工具。你只需要知道:调用 PCA 时,底层其实默认用了 SVD 算法来解方程即可,不用深究公式。”
- 👨🏫 教师活动:
- 在黑板上画一个椭圆形的点云图,用箭头画出长轴(第一主成分)和短轴(第二主成分)。
- 提问:“如果只保留一个数,你会选择把点投影到长轴上还是短轴上?”(答案:长轴,因为豆子在上面分开得更明显)。
- 🧑🎓 学生活动:学生在纸上画一个斜着的椭圆,尝试画出那条“能最大拉开差距”的直线,感受“方差最大”的直觉。
彻底砍掉 PCA 的数学推导(协方差矩阵、特征向量),只保留 “找方差最大的投影方向” 这一个核心意象。对于职高生,知道“为什么做”和“怎么用代码”远比知道“怎么推导”重要。
💻 三、 解决问题过程(二):代码实战——鸢尾花数据 4 维降 2 维可视化
1. 经典案例:鸢尾花(Iris)数据集
- 原始特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度(4 维)。
- 目标:将其降维到 2 维,然后用散点图画出来,看看三种鸢尾花是否还能区分开。
2. 完整代码(三步走)
运行结果解析:
- 输出显示累计保留信息约 95%+(说明 2 个新特征就能代表原来 4 个特征 95% 的信息)。
- 散点图上,三种花各自聚成一团,界限清晰。这说明降维没有破坏分类能力!
3. 自动确定维度(省心小技巧) 如果不想指定具体维度,想让程序自动选择能保留 95% 信息 的维度数:
- 👨🏫 教师活动:
- 带学生逐行运行代码,重点观察
explained_variance_ratio_的输出(比如 [0.92, 0.05, …]),说明第一主成分已经包含了绝大部分信息。 - 修改
n_components=3,让学生观察图形从 2D 变 3D(如果课堂环境支持,用mpl_toolkits.mplot3d展示)。
- 带学生逐行运行代码,重点观察
- 🧑🎓 学生活动:
- 学生自己运行代码,观察三种颜色的点在二维平面上的分布。
- 学生尝试将
n_components改为 1,观察散点图变成一条直线上的点,讨论“1维还能分清三种花吗?”(答案:可能分不清了,说明信息丢太多)。
鸢尾花是机器学习的“Hello World”,用它做 PCA 可视化效果极佳,学生能直观看到“高维抽象”变成“低维具体”的全过程。explained_variance_ratio_ 的输出用百分比说话,比任何理论都更有说服力。
✍️ 四、 解决问题过程(三):课堂动手练习——手写数字压缩
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📉 6.2 降维(Dimensionality Reduction)"]
subgraph C1 ["😫 为什么要降维(痛点)"]
direction TB
A1["特征爆炸(多项式惹的祸)"]
A2["计算慢、占内存"]
A3["无法可视化"]
end
subgraph C2 ["🧠 PCA 核心思想"]
direction TB
B1["找方差最大的投影方向"]
B2["第一主成分 → 最分散"]
B3["第二主成分 → 次分散"]
end
subgraph C3 ["💻 代码实战"]
direction TB
C1_node["PCA(n_components=2)"]
C2_node["fit_transform(X)"]
C3_node["explained_variance_ratio_"]
C4_node["用 2D 散点图看分类"]
end
subgraph C4 ["⚙️ SVD"]
direction TB
D1["PCA 的底层计算器"]
D2["知道即可,不推公式"]
end
root --> C1
root --> C2
root --> C3
root --> C4
style root fill:#4b6cb7,stroke:#253b6e,color:#fff
style C1 fill:#ffebee,stroke:#ef5350
style C2 fill:#e3f2fd,stroke:#2196f3
style C3 fill:#e8f5e9,stroke:#4caf50
style C4 fill:#f3e5f5,stroke:#9c27b0
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 单词 | 发音 | 专业英语解释(中文) |
|---|---|---|
| Dimensionality Reduction | /daɪˌmenʃəˈnæləti rɪˈdʌkʃən/ | 降维。减少数据集特征数量的过程。 |
| PCA (Principal Component Analysis) | /ˈprɪnsəpəl kəmˈpoʊnənt əˈnæləsɪs/ | 主成分分析。一种通过将数据投影到方差最大方向来实现降维的算法。 |
| Variance | /ˈveriəns/ | 方差。衡量数据分散程度的统计量,在 PCA 中代表“信息量”。 |
| SVD (Singular Value Decomposition) | /ˈsɪŋɡjələr ˈvæljuː ˌdiːkəmpəˈzɪʃən/ | 奇异值分解。PCA 底层常用的数值计算工具。 |
| Principal Component | /ˈprɪnsəpəl kəmˈpoʊnənt/ | 主成分。PCA 降维后生成的新的综合特征。 |
| Explained Variance Ratio | /ɪkˈspleɪnd ˈveriəns ˈreɪʃioʊ/ | 解释方差比例。每个主成分所保留的原始数据信息百分比。 |