11-2 几何与空间距离(二):线性判别分析 (LDA)——有监督降维
📌 一、 课程导入(5 分钟)
复习回顾:上节课我们学了 KNN,它用“距离”来做分类。第 6 章我们还学了 PCA(主成分分析),它用“方差最大”来做无监督降维。
情景模拟:两个班级的考试成绩
假设你是老师,想用“数学成绩”和“英语成绩”两个指标来区分“学霸班”和“普通班”。
- 你发现两个班的成绩在二维平面上是混在一起的——单看数学或单看英语都分不清。
- 但如果你换一个角度看——比如把两科成绩加权求和(0.7×数学 + 0.3×英语)——两个班突然被分开了!
核心问题:能不能找到一条“最佳投影方向”,让两个班在这条线上分得最开?
这就是 LDA 要解决的问题:利用标签信息,找到一条投影线,让不同类别的数据在这条线上尽可能分开。
- 👨🏫 教师活动:在 PPT 上展示两张图——左图是原始二维散点图(两类数据混在一起),右图是投影到一条直线后的分布(两类被明显分开)。提问:“哪条线是最好的投影方向?”
- 🧑🎓 学生活动:学生观察图片,凭直觉指出“能让两类分开的那条线”,老师顺势引出 LDA 的目标。
用“班级考试成绩”和“最佳投影方向”的场景,将 LDA 的抽象概念转化为可视化直觉。通过对比 PCA 和 LDA 的不同目标,建立“有监督 vs 无监督”的清晰认知。
📖 二、 解决问题过程(一):LDA 的核心思想
1. LDA 的核心目标(一句话)
找一条投影线,让数据投影上去后,不同类别的点尽量分开,同类别的点尽量集中。
2. 两个关键指标
| 指标 | 含义 | 目标 |
|---|---|---|
| 类间距离 (Between-class) | 不同类别的中心点之间的距离 | 越大越好(两类分得开) |
| 类内距离 (Within-class) | 同一类别内部点之间的分散程度 | 越小越好(同类聚得紧) |
3. 生活类比:班级排座位
老师想让两个班级的学生在操场上排队,要求:
- 类间大:两个班的队伍离得越远越好(方便区分)。
- 类内小:每个班的队伍站得越整齐越好(班级内部紧凑)。
LDA 就是在找最优的排队方向。
4. LDA vs PCA(本课灵魂对比)
| 对比维度 | PCA(主成分分析) | LDA(线性判别分析) |
|---|---|---|
| 是否使用标签 | ❌ 无监督(不看标签) | ✅ 有监督(利用标签) |
| 优化目标 | 方差最大(保留信息最多) | 类间大 + 类内小(分类最好) |
| 降维结果 | 找数据分散的方向 | 找分类效果最好的方向 |
| 适用场景 | 数据压缩、可视化、去噪 | 分类前的降维、特征提取 |
5. 核心结论(学生必记)
同样的数据,PCA 和 LDA 找到的投影方向完全不同。
- PCA 找方差最大的方向(不管类别)。
- LDA 找分类最好的方向(利用类别标签)。
LDA 比 PCA “聪明”的地方在于:它知道哪些点属于同一类,所以能更有针对性地降维。
- 👨🏫 教师活动:
- 在黑板上画出两类数据(圆圈和三角),分别画出 PCA 的投影方向(方差最大)和 LDA 的投影方向(分类最好),让学生直观对比。
- 指着 LDA 的方向问:“如果我们要降维到 1 维,用 PCA 还是 LDA 能更好地保留分类信息?”(答案:LDA)。
- 🧑🎓 学生活动:
- 学生在笔记本上抄写 LDA vs PCA 对比表格。
- 讨论:“如果你在做分类任务,降维时应该优先考虑 PCA 还是 LDA?”(答案:LDA,因为它利用了标签信息)。
通过“班级排座位”和“PCA vs LDA 对比”两个维度,将 LDA 的抽象优化目标转化为直观的生活经验,并建立与已学知识的紧密连接。
💻 三、 解决问题过程(二):代码实战——LDA 降维与分类
1. LDA 的两大用途
| 用途 | 说明 | 代码 |
|---|---|---|
| 降维 | 将高维数据投影到低维空间(有监督) | LDA(n_components=2) |
| 分类 | 直接用 LDA 作为分类器(假设数据服从正态分布) | LDA() 直接 .fit() |
2. 用途一:LDA 降维 + 可视化(对比 PCA)
用鸢尾花数据,分别用 PCA 和 LDA 降到 2 维,对比降维后两类是否更好区分。
观察结论:
- PCA 降维后,三类数据在二维平面上仍然混在一起(尤其是绿色和蓝色)。
- LDA 降维后,三类数据在二维平面上被明显分开,边界清晰。
原因:PCA 只看方差大小,不管类别;LDA 知道哪些点属于同一类,降维时专门找能把类分开的方向。
3. 用途二:LDA 直接做分类
LDA 本身也是一个分类器(与逻辑回归类似,但假设数据服从正态分布)。
结论:在鸢尾花数据集上,LDA 分类效果通常不输逻辑回归,且代码更简洁。
- 👨🏫 教师活动:
- 运行 PCA vs LDA 对比代码,让学生观察两张散点图——LDA 的图明显“分得更开”。
- 强调
lda.fit_transform(X, y)必须传入y(标签),这是 LDA 与 PCA 代码上的唯一区别,但也是本质区别。
- 🧑🎓 学生活动:
- 观察两张散点图,指出 LDA 降维后绿色和蓝色是否更容易区分。
- 修改
n_components=1(降到 1 维),用直方图展示两类在一条线上的分布,感受“类间大、类内小”。
通过 PCA vs LDA 的同图对比,用最直观的方式呈现“有监督降维”的优势。让学生亲眼看到:同样的数据,用不同的方法,结果天差地别。
✍️ 四、 解决问题过程(三):课堂练习——手写数字的 LDA 降维
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📊 LDA(线性判别分析)"]
subgraph C1 ["💡 核心思想"]
direction TB
A1["有监督降维"]
A2["类间距离大 + 类内距离小"]
A3["找最佳投影方向"]
end
subgraph C2 ["🔁 vs PCA"]
direction TB
B1["PCA:无监督,方差最大"]
B2["LDA:有监督,分类最好"]
end
subgraph C3 ["💻 代码"]
direction TB
C1_node["from sklearn.discriminant_analysis import LinearDiscriminantAnalysis"]
C2_node["lda.fit_transform(X, y) ← 需要传标签!"]
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:#fff3e0,stroke:#ff9800
style C3 fill:#e8f5e9,stroke:#4caf50
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 单词 | 发音 | 专业英语解释(中文) |
|---|---|---|
| LDA (Linear Discriminant Analysis) | /ˌlaɪniər dɪˈskrɪmɪnənt əˈnæləsɪs/ | 线性判别分析。一种有监督的降维方法,目标是最大化类间距离、最小化类内距离。 |
| Between-class Variance | /bɪˈtwiːn klæs ˈveriəns/ | 类间方差。不同类别中心点之间的分散程度,LDA 希望它越大越好。 |
| Within-class Variance | /wɪˈðɪn klæs ˈveriəns/ | 类内方差。同一类别内部点的分散程度,LDA 希望它越小越好。 |
| Projection | /prəˈdʒekʃən/ | 投影。将高维数据映射到低维空间的过程。 |
| Discriminant | /dɪˈskrɪmɪnənt/ | 判别式。用于区分不同类别的函数或方向。 |