1601 降维与PCA
📌 一、 课程导入(8分钟)
🔄 回顾无监督学习的两大阵营
在之前的课程中,我们学习了聚类(Clustering)——在没有标签的情况下,让计算机自动发现数据中的“群体”。比如K-Means把客户分成不同的群体。
今天我们要学习的,是无监督学习的另一个重要工具——降维(Dimensionality Reduction)。
类比:聚类和降维就像两个“盲人摸象”的工具:
- 聚类 → 把相似的事物归拢到一起(分组)
- 降维 → 把复杂的事物简化展示(透视)
🌊 情景模拟:瑞士卷的启示
展示一张“瑞士卷”3D数据图(即Swiss Roll数据集):
- 从3D视角看:数据像一卷蛋糕,卷曲缠绕,肉眼很难看清它的内部结构。
- 但如果我们将它“展开”成2D平面,就会发现:数据其实是沿着一条长带分布的,颜色从一端渐变到另一端。
核心提问:
- 3D版本的数据,你很难看出“数据是怎么分布的”。
- 2D展开版本,你一眼就能看出“数据是沿着一条渐变路径延伸的”。
降维的核心价值就在这里:
降维不是为了“丢掉信息”,而是为了“找到合适的视角”,让你看清楚数据的骨架。
📌 本节课定位
在无监督学习章节中,降维与聚类并列为两大探索工具:
- 聚类:从样本角度找“群体”(哪些样本聚在一起)
- 降维:从特征角度找“骨架”(数据在哪个方向上变化最大)
两者可以单独使用,也可以组合使用——先降维可视化观察数据结构,再选择合适的方法做深入分析。
💡 和特征处理章节的“降维”有什么区别?
| 维度 | 特征处理中的降维(A1/A2) | 无监督学习中的降维(B1/B2/B3) |
|---|---|---|
| 核心目标 | 压缩数据,加速后续建模 | 探索数据,发现内在结构 |
| 使用时机 | 建模之前的预处理环节 | 拿到数据后的探索性分析环节 |
| 价值取向 | “瘦身” —— 让模型跑得更快 | “探路” —— 让我看懂数据长什么样 |
| 后续动作 | 压缩后的数据送进分类/回归模型 | 可视化结果指导聚类方法选择 |
- 👨🏫 教师活动:
- 在大屏幕上展示瑞士卷数据的3D图和2D展开图(使用
make_swiss_roll+matplotlib生成)。 - 提问:“3D图里,你能看出数据的渐变规律吗?2D图呢?”
- 引导学生回答:“2D图能,因为展开后结构更清楚了。”
- 在黑板上画出“聚类 vs 降维”的对比示意图,标注本节课在无监督学习中的位置。
- 在大屏幕上展示瑞士卷数据的3D图和2D展开图(使用
- 🧑🎓 学生活动:
- 观察3D图和2D图的对比,感受“降维揭示结构”的直观含义。
- 讨论:“如果给你一份100维的数据,你第一步会做什么?”(期望回答:先降维看看!)
通过瑞士卷数据的3D→2D展开对比,让学生直观感受降维的“探路”价值——不是丢掉信息,而是找到一个更好的视角来观察数据。同时,通过与聚类的对比,明确降维在无监督学习中的独特定位:降维看“结构”,聚类看“群体”。
📖 二、 解决问题过程(一):什么是PCA(核心概念,20分钟)
1. 核心思想:找一条“最佳投影线”
想象桌子上撒了一把长条形的豆子(二维数据:X轴和Y轴)。
- 原始坐标:你要用(x, y)两个数描述每颗豆子的位置。
- 降维目标:只用一个数(一维)描述每颗豆子。
怎么做?
- ❌ 错误做法:只取X坐标,抛弃Y坐标(丢掉了豆子在Y方向的高低差异)。
- ✅ PCA做法:画一条穿过豆子群中间、且豆子们在这条线上的投影分散得最开的斜线。
2. 关键术语(只讲意象,不讲公式)
| 术语 | 含义 | 生活类比 |
|---|---|---|
| 主成分(Principal Component) | 数据“散得最开”的方向 | 豆子群的长轴方向 |
| 第一主成分(PC1) | 最分散的方向(最重要的新特征) | 长轴 |
| 第二主成分(PC2) | 与PC1垂直、次分散的方向 | 短轴 |
| 方差(Variance) | 数据在某个方向上的“分散程度” | 豆子沿某个方向拉开多远 |
3. 为什么“方差越大=信息越多”?(核心难点,重点展开)
想象你在拍摄一张集体照,有5个人站在一条直线上:
- 情况A(方差小) :5个人都挤在画面正中央的一小块区域。你很难分清谁是谁,因为你无法从“位置”这个维度区分他们——区分度低,信息量少。
- 情况B(方差大) :5个人均匀分布,一个人站在最左边,一个在最右边,其余均匀分布。你可以很清楚地通过“位置”来分辨每一个人——区分度高,信息量丰富。
PCA找的正是那个“最能拉开人与人距离”的方向——也就是方差最大的方向。
4. 降维作为“探索工具”的三大用途
| 用途 | 解释 | 示例 |
|---|---|---|
| ① 发现自然分组 | 降维后画散点图,看数据是否自然聚成几团 | 鸢尾花降到2维后,3种花各自聚成一团 |
| ② 识别离群点 | 远离主体的点一目了然 | 数据中的异常值会在图中“孤零零”出现 |
| ③ 判断冗余度 | 如果降到2维只保留了30%信息,说明数据复杂;如果保留了95%,说明数据高度冗余 | 鸢尾花95% vs 手写数字30% |
5. ⚠️ 降维的代价
降维后,新生成的“主成分”失去了原始特征的具体名字(比如“花瓣长度”变成了PC1),变成了一个“综合指标”。
在探索性分析中,这不一定是坏事——因为我们的目的不是“解释每个主成分叫什么”,而是“观察数据的整体结构”。
但在需要向业务方汇报时,记得给主成分起“综合指数”这样的名字,方便对方理解。
- 👨🏫 教师活动:
- 在黑板上画一个椭圆形的点云图,用箭头画出长轴(第一主成分)和短轴(第二主成分)。
- 提问:“如果只保留一个数,你会选择把点投影到长轴上还是短轴上?”
- 引导学生回答:“长轴!因为豆子在长轴上分散得更开,区分度更高。”
- 在黑板另一侧画出“方差小”和“方差大”的对比示意图(同样是5个点,一组挤在一起,一组散得很开),让学生直观感受“分散→区分度高→信息量大”。
- 🧑🎓 学生活动:
- 在纸上画一个斜着的椭圆,尝试画出那条“能最大拉开差距”的直线。
- 讨论:“如果降维后的主成分没有名字,在探索性分析中,这会影响我们的判断吗?”(答案:不会,因为我们只是想看结构,不是想命名)
彻底砍掉PCA的数学推导(协方差矩阵、特征向量),只保留“找方差最大的投影方向”这一个核心意象。通过“集体照”的生活化类比,将“方差=信息量”这一反直觉的概念转化为可感知的经验。通过“三大用途”的表格,让学生明确PCA在探索性分析中的具体价值。
💻 三、 解决问题过程(二):代码实战——鸢尾花PCA可视化(20分钟)
1. 经典案例:鸢尾花(Iris)数据集
- 原始特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度(4维)。
- 目标:将其降维到2维,用散点图展示三种鸢尾花的分布。
- 核心问题:我们提前知道鸢尾花有3种。但如果不知道呢?仅凭PCA降维后的散点图,我们能推断出“数据大概分成3类”吗?
这就是降维作为“探索工具”的价值——在没有任何标签的情况下,先降维画图,看看数据是否存在自然分组,再决定后续使用什么聚类方法(K-Means? 层次聚类? DBSCAN?)。
2. 完整代码
3. 运行结果解读——从“探索”角度看问题
假设输出为:
解读(站在“探索性分析”的视角) :
| 发现 | 含义 |
|---|---|
| PC1占了92%的信息 | 数据在某个方向上变化最为剧烈——这是数据的“主骨架” |
| 前两维保留97%信息 | 4维数据可以用2维替代,几乎不丢信息 |
| 散点图上3种花各自聚成一团 | 数据存在明显的3个自然分组,即使不知道标签,肉眼也能看出3个群体 |
| 红色(山鸢尾)与其他两种分离较远 | 山鸢尾与其他两种差异较大,而变色鸢尾和维吉尼亚鸢尾有部分重叠 |
核心结论:
仅仅通过PCA降维可视化,即使没有任何标签,我们也能推断出:这组数据大概可以分成3类,且其中一类与其他两类差异较大。 这就是降维作为“探路者”的价值——它告诉我们应该往哪个方向继续探索(比如:尝试K-Means,K=3)。
4. 课堂互动提问
- 如果我们在做完PCA后,看到散点图上3个簇非常清晰,下一步应该做什么?
- 答案:可以尝试用K-Means(K=3)进行聚类,然后用聚类结果与真实标签对比,验证降维后的可视化是否“可信”。
- 👨🏫 教师活动:
- 带学生逐行运行代码,在散点图生成后,指着图提问:“把坐标轴上的数字遮住,单看三种颜色的分布——即使你不知道这是三种花,你会认为数据分几类?”
- 引导学生从图上“读”出结论:“红色聚在左边,绿色和蓝色在右边,虽然绿色和蓝色有重叠,但整体上可以看到3个群体。”
- 🧑🎓 学生活动:
- 在本地运行代码,观察三种颜色在二维平面上的分布。
- 讨论:“如果我们不知道鸢尾花有3种,仅凭这张图,我们会推断出K=3还是K=2?为什么?”
鸢尾花数据集是经典的“降维展示案例”,因为它的4个特征高度冗余,降到2维后几乎不丢信息。关键区别在于分析视角:在系列A(特征处理)中,强调的是“降维后数据还能送进模型”;在本节课(无监督学习)中,强调的是“从散点图中我们能读出什么关于数据结构的线索”。
✍️ 四、 解决问题过程(三):课堂探索——用PCA寻找数据分组(20分钟)
📝 五、 课堂小结(5分钟)
flowchart LR
root["📊 无监督学习(六):降维与PCA"]
subgraph C1["🔍 降维 vs 聚类"]
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_"]
end
subgraph C4["🎯 降维作为'探路者'"]
direction TB
D1["先降维可视化 → 观察分组结构"]
D2["再选择聚类方法 → 深入分析"]
end
root --> C1
root --> C2
root --> C3
root --> C4
style root fill:#6a1b9a,stroke:#4a148c,color:#fff
style C1 fill:#f3e5f5,stroke:#9c27b0
style C2 fill:#e3f2fd,stroke:#2196f3
style C3 fill:#e8f5e9,stroke:#4caf50
style C4 fill:#fff8e1,stroke:#ffb300
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 单词 | 发音 | 专业英语解释(中文) |
|---|---|---|
| Dimensionality Reduction | /daɪˌmenʃəˈnæləti rɪˈdʌkʃən/ | 降维。减少数据集特征数量的过程,在无监督学习中主要用于探索性数据分析。 |
| Principal Component Analysis (PCA) | /ˈprɪnsəpəl kəmˈpoʊnənt əˈnæləsɪs/ | 主成分分析。一种无监督降维方法,通过找方差最大方向实现数据投影。 |
| Exploratory Data Analysis (EDA) | /ɪkˈsplɔːrətɔːri ˈdeɪtə əˈnæləsɪs/ | 探索性数据分析。在建模之前对数据进行可视化探索的流程。 |
| Variance | /ˈveriəns/ | 方差。衡量数据分散程度的统计量,在PCA中代表“信息量”。 |
| Principal Component | /ˈprɪnsəpəl kəmˈpoʊnənt/ | 主成分。PCA降维后生成的新的综合特征,是原始特征的线性组合。 |
| Explained Variance Ratio | /ɪkˈspleɪnd ˈveriəns ˈreɪʃioʊ/ | 解释方差比例。每个主成分所保留的原始数据信息百分比。 |
| Curse of Dimensionality | /kɜːrs əv daɪˌmenʃəˈnæləti/ | 维度灾难。高维数据带来的计算、存储和可视化困难。 |