1603SVD与降维方法全景

🎯 教学目标与重难点…

【三维目标】

  • 📚 知识目标
    1. 理解SVD(奇异值分解)在降维中的定位——PCA背后的“数学计算引擎”。
    2. 了解t-SNE的基本思想——一种专注于可视化的降维方法。
    3. 掌握PCA、SVD、t-SNE三种方法的对比与适用场景。
    4. 理解“降维方法选型”的决策逻辑——根据数据特点和分析目标选择合适的方法。
  • ⚙️ 能力目标
    1. 能够使用 sklearn.decomposition.TruncatedSVD 进行降维。
    2. 能够使用 sklearn.manifold.TSNE 进行可视化降维。
    3. 能够在同一数据集上对比PCA和t-SNE的降维效果。
    4. 能够根据业务需求(速度优先、精度优先、可视化优先)选择合适的降维方法。
  • 💡 素养目标
    1. 建立“工欲善其事,必先利其器”的工程思维——每种工具都有其适用场景。
    2. 理解“没有万能算法”的核心理念,培养根据数据特点选择算法的能力。

【重点与难点】

  • 🟢 教学重点
    1. SVD与PCA的关系——SVD是计算工具,PCA是降维方法。
    2. t-SNE的核心思想——保持样本之间的“相似性”关系,擅长可视化。
    3. 三种降维方法的全景对比与选型决策。
  • 🟡 教学难点
    1. 理解SVD与PCA的“计算-方法”关系(不推公式,只讲定位)。
    2. 理解t-SNE的“保持相似性”与PCA的“保持方差”之间的本质区别。
    3. 理解不同降维方法的选型决策逻辑。

📌 一、 课程导入(5分钟)

回顾前两节课(1601、1602)

  • 1601:我们学会了PCA的核心思想——找方差最大的投影方向,用散点图探索数据结构。
  • 1602:我们学会了PCA的数学直觉——投影、碎石图、累计方差曲线。

核心疑问

  1. 我们一直在用 sklearn.decomposition.PCA,但它在计算机内部到底是怎么算的
  2. PCA是不是降维的唯一工具?还有没有其他降维方法?
  3. 面对不同类型的数据和分析目标,我们该怎么选择降维方法?

本节课定位

本节课是“降维方法论”的收官之课。我们将回答三个问题: ① PCA的幕后英雄是谁?(SVD) ② 除了PCA还有什么?(t-SNE) ③ 什么时候用什么方法?(选型决策)

引出SVD——“幕后英雄”的比喻

  • 你去餐厅点了一道“红烧鱼”(PCA)。
  • 鱼是厨师用“灶台和锅”(SVD)做出来的。
  • 你作为食客,只需要知道“这道菜很好吃”(PCA降维效果好),不需要知道灶台的具体构造。
  • 但如果你想成为一名厨师(进阶学习),了解一下灶台的工作原理会很有帮助。

本节课的教学原则

SVD不提数学公式,只讲“它是做什么的”和“它和PCA什么关系”。t-SNE重点讲“它和PCA有什么不同”。

  • 👨‍🏫 教师活动
    1. 在黑板上画一个简单的类比图:原始数据 → SVD(计算引擎)→ 主成分(PCA输出)
    2. 提问:“我们一直在用PCA,但你知道计算机内部是怎么算出主成分的吗?”
    3. 引导学生思考:“就像你用手机拍照,但不需要知道手机内部芯片怎么处理图像一样。”
  • 🧑‍🎓 学生活动
    1. 思考:“如果不需要知道SVD的公式,那我们需要知道什么?”
    2. 讨论:“除了PCA,你还听说过其他降维方法吗?”

通过“厨师与灶台”的类比,明确SVD的定位——它是PCA底层的计算工具,知道它叫什么、干什么用即可,不需要掌握公式。同时通过“除了PCA还有什么”的提问,为引入t-SNE做铺垫。


📖 二、 解决问题过程(一):SVD——PCA的幕后英雄(15分钟)

1. SVD的全称与定位

项目 内容
全称 Singular Value Decomposition(奇异值分解)
定位 PCA的底层数学计算引擎
类比 PCA是一道菜,SVD是灶台
关系 调用PCA时,sklearn在后台默认使用了SVD算法

2. PCA与SVD的关系(一句话说清)

PCA是降维的方法,SVD是计算PCA的数学工具。

详细解释

  • 当你调用 PCA(n_components=2).fit(X) 时:
    1. sklearn先在后台调用SVD算法,对数据矩阵进行分解。
    2. SVD计算出主成分的方向和每个主成分的方差比例。
    3. 返回给你PC1、PC2和 explained_variance_ratio_

3. SVD的“存在感”在哪里?

在sklearn中,有一个专门的类叫 TruncatedSVD,它可以直接使用SVD进行降维:

1from sklearn.decomposition import TruncatedSVD
2
3# 直接使用SVD降维(等同于PCA,但不包含中心化步骤)
4svd = TruncatedSVD(n_components=2)
5X_svd = svd.fit_transform(X)

但注意:在实际使用中,PCA 类是更常用、更完整的封装(它包含了数据中心化等预处理步骤)。TruncatedSVD 通常用于稀疏矩阵(如文本数据的词频矩阵)的降维。

4. 职高学生需要记住的三件事

序号 需要记住的 不需要深究的
SVD是PCA的底层计算工具 SVD的数学公式
调用PCA时,背后在用SVD 奇异值是什么
知道 TruncatedSVD 的名字和用途 SVD的推导过程

⚠️ 记住:你不需要知道灶台怎么造,只需要知道菜是谁做的。

  • 👨‍🏫 教师活动
    1. 在黑板上画出“调用链”:你的代码 → PCA → SVD(幕后计算)→ 返回主成分
    2. 用“点菜”的比喻反复强调:“你点的是PCA,做菜的是SVD。”
    3. 提问:“如果我问你SVD的公式,你会不会?”(答案:不会,但我知道它和PCA的关系!)
  • 🧑‍🎓 学生活动
    1. 用自己的话复述:“SVD是______,PCA是______。”
    2. 讨论:“学习SVD的公式对职高学生来说有必要吗?为什么?”

彻底将SVD定位于“工具的工具”——不展开任何数学公式,只用“灶台做菜”的类比建立清晰的关系认知。明确告诉学生“需要记住什么”和“不需要深究什么”,降低学习焦虑。


📖 三、 解决问题过程(二):t-SNE——可视化专家(20分钟)

1. 为什么还需要t-SNE?——PCA的局限性

PCA的优点 PCA的局限
计算快速 只能发现线性结构(直线方向上的分散)
可解释性强 对于非线性数据(如环形、螺旋),PCA表现不佳
适合建模前预处理 在复杂高维数据上,2D散点图可能看不出清晰结构

2. t-SNE的核心思想——“保持邻居关系”

  • PCA的思路:找方差最大的方向(全局视角)。
  • t-SNE的思路:保持样本之间的“相似性”关系——相似的样本在降维后依然靠近,不相似的样本在降维后依然远离(局部视角)。

生活类比 ——“朋友圈布局”

想象你要把班级里30个同学的关系画在一张纸上(降维到2维):

  • PCA的做法:把所有同学按“身高”和“体重”两个方向拉开。如果两个人的身高体重都差不多,在图上就靠近。
  • t-SNE的做法:先问每个同学“你和谁是好朋友?”(相似性),然后把这些“好朋友关系”尽量保持到2D图上。如果A和B是好友,在图上就尽量靠近;A和C不是好友,在图上就尽量远离。

t-SNE特别擅长揭示数据中的“局部聚类结构”

3. PCA vs t-SNE —— 核心区别

维度 PCA t-SNE
核心理念 保留全局方差(数据分散程度) 保留局部相似性(邻居关系)
擅长发现 数据的主骨架(变化最大的方向) 数据的聚类结构(哪些点是一伙的)
计算速度 快速(几秒内完成) 慢(大数据集可能需要几分钟到几小时)
是否可解释 ✅ 主成分可解释为综合指标 ❌ 降维后的坐标没有业务含义
适用场景 建模前预处理、数据压缩 探索性可视化、聚类辅助分析
随机性 确定性的(相同数据→相同结果) 随机性的(每次运行可能结果略有不同)

4. t-SNE的使用警告

⚠️ t-SNE只用于可视化,不用于建模前预处理!

  • t-SNE降维后的坐标没有物理意义,不能送入模型训练。
  • t-SNE的结果具有随机性,每次运行可能略有不同。
  • t-SNE计算非常慢,不适合大数据集(建议样本数<5000)。
  • 👨‍🏫 教师活动
    1. 展示两张并排的降维对比图——同一份手写数字数据,左边用PCA降到2维,右边用t-SNE降到2维。t-SNE图上不同数字的簇明显更清晰、分离更彻底。
    2. 指着右边t-SNE图提问:“这两个图上都是0-9的数字,哪个图更容易分辨不同的数字?”
    3. 引导学生回答:“t-SNE!因为每个数字都聚得更紧,不同数字之间的距离更大。”
  • 🧑‍🎓 学生活动
    1. 观察两张对比图,说出自己的观察:“PCA图上,有些数字混在一起;t-SNE图上,每个数字都是一小团。”
    2. 讨论:“既然t-SNE效果这么好,为什么不直接用t-SNE代替PCA?”

通过PCA vs t-SNE的对比图,让学生直观感受两种方法的差异。用“身高体重 vs 朋友圈关系”的类比,帮助学生理解“全局方差”与“局部相似性”的本质区别。同时明确强调t-SNE的使用边界——只能看图,不能送进模型。


💻 四、 解决问题过程(三):代码实战——PCA vs t-SNE 对比(25分钟)

1. 实验目标

在手写数字数据集上,分别用PCA和t-SNE将64维降到2维,对比两种方法的:

  • 聚类效果(不同数字是否分得更开)
  • 运行时间

2. 完整代码

 1import numpy as np
 2import matplotlib.pyplot as plt
 3import time
 4from sklearn.datasets import load_digits
 5from sklearn.decomposition import PCA
 6from sklearn.manifold import TSNE
 7from sklearn.preprocessing import StandardScaler
 8
 9# 加载数据
10digits = load_digits()
11X, y = digits.data, digits.target
12print(f"数据形状: {X.shape}")  # (1797, 64)
13
14# 标准化(PCA需要,t-SNE也建议)
15scaler = StandardScaler()
16X_scaled = scaler.fit_transform(X)
17
18# ============================================
19# PCA降维
20# ============================================
21print("\n=== PCA 降维 ===")
22start = time.time()
23pca = PCA(n_components=2)
24X_pca = pca.fit_transform(X_scaled)
25pca_time = time.time() - start
26print(f"耗时: {pca_time:.4f}秒")
27print(f"保留信息: {sum(pca.explained_variance_ratio_):.4f}")
28
29# ============================================
30# t-SNE降维
31# ============================================
32print("\n=== t-SNE 降维 ===")
33# t-SNE建议设置random_state保证可复现
34start = time.time()
35tsne = TSNE(n_components=2, random_state=42, perplexity=30)
36X_tsne = tsne.fit_transform(X_scaled)
37tsne_time = time.time() - start
38print(f"耗时: {tsne_time:.4f}秒")
39
40# ============================================
41# 可视化对比(并排展示)
42# ============================================
43fig, axes = plt.subplots(1, 2, figsize=(14, 6))
44
45# 左图:PCA
46axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', s=20, alpha=0.7)
47axes[0].set_title(f'PCA降维\n耗时: {pca_time:.2f}秒', fontsize=12)
48axes[0].set_xlabel('第一主成分')
49axes[0].set_ylabel('第二主成分')
50axes[0].grid(True, alpha=0.3)
51
52# 右图:t-SNE
53axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', s=20, alpha=0.7)
54axes[1].set_title(f't-SNE降维\n耗时: {tsne_time:.2f}秒', fontsize=12)
55axes[1].set_xlabel('t-SNE 维度1')
56axes[1].set_ylabel('t-SNE 维度2')
57axes[1].grid(True, alpha=0.3)
58
59plt.suptitle('PCA vs t-SNE: 手写数字(64维→2维)降维对比', fontsize=14)
60plt.tight_layout()
61plt.show()
62
63# ============================================
64# 速度对比结果
65# ============================================
66print("\n=== 速度对比 ===")
67print(f"PCA 耗时:   {pca_time:.4f}秒")
68print(f"t-SNE 耗时: {tsne_time:.4f}秒")
69print(f"t-SNE 是 PCA 的 {tsne_time/pca_time:.1f} 倍")

3. 运行结果解读(典型输出)

指标 PCA t-SNE
耗时 约0.05秒 约5-10秒
速度比 基准 约100-200倍慢
聚类效果 数字分散,边界模糊 数字各自聚成清晰的簇
用途定位 快速预处理 精细可视化

4. 核心结论

PCA:速度快,适合建模前预处理,但聚类效果一般。 t-SNE:可视化效果好,但速度极慢,只用于探索性分析。

  • 👨‍🏫 教师活动
    1. 运行对比代码,让学生同时看到运行时间和两张散点图。
    2. 指着两张图提问:“如果只能选一张图给老板看,选哪个?”
    3. 引导学生回答:“选t-SNE,因为看起来更清晰。”
    4. 追问:“如果老板说‘明天再给我20000个样本’,你还会用t-SNE吗?”
  • 🧑‍🎓 学生活动
    1. 在本地运行代码,观察两张图的差异和耗时对比。
    2. 记录自己电脑上的运行时间。
    3. 讨论:“在什么场景下,我们愿意接受t-SNE的慢速度?”

通过“并排对比”的设计,让学生在同一时间看到PCA和t-SNE在视觉效果和运行速度上的巨大差异。用“给老板看什么图”和“数据量大怎么办”两个问题,引导学生思考“选型决策”的实际逻辑。


📝 五、 解决问题过程(四):三种降维方法的全景对比与选型(15分钟)

1. 完整对比表格

维度 PCA SVD t-SNE
定位 降维方法 数学计算工具 降维方法
核心思想 找方差最大的方向 矩阵分解 保持局部相似性
与PCA关系 是PCA的计算引擎 独立方法,可与PCA互补
适用场景 建模前预处理、数据压缩 稀疏矩阵降维 探索性可视化
计算速度 ⚡ 最快 ⚡ 快 🐢 很慢
可解释性 ✅ 主成分可解读 ⚠️ 视应用场景 ❌ 无业务含义
是否随机 确定性的 确定性的 随机性的
能否用于建模 ✅ 可以 ✅ 可以 只能看图!

2. 选型决策流程图

flowchart TD
    A["📊 拿到高维数据"] --> B{"你的目标是什么?"}
B --&gt;|&#34;建模前预处理&lt;br&gt;(压缩特征加速训练)&#34;| C[&#34;✅ 选择 PCA&#34;]
C --&gt; C1[&#34;速度快、可解释、可送模型&#34;]

B --&gt;|&#34;探索性可视化&lt;br&gt;(想看清数据分组结构)&#34;| D{&#34;数据量多大?&#34;}
D --&gt;|&#34;≤ 5000 样本&#34;| E[&#34;✅ 选择 t-SNE&#34;]
E --&gt; E1[&#34;可视化效果好、聚类清晰&#34;]
D --&gt;|&#34;&gt; 5000 样本&#34;| F[&#34;⚠️ t-SNE太慢 → 先用PCA降维到50维&lt;br&gt;再用t-SNE降到2维(两步降维)&#34;]

B --&gt;|&#34;处理稀疏矩阵&lt;br&gt;(文本词频数据)&#34;| G[&#34;✅ 选择 TruncatedSVD&#34;]
G --&gt; G1[&#34;专门针对稀疏矩阵优化&#34;]</pre>

3. 职高学生需要记住的核心结论

场景 推荐方法 一句话理由
要训练模型,特征太多跑不动 PCA 快,可解释,可送进模型
要画图给老板看数据分组 t-SNE(样本<5000时) 视觉效果最好,簇清晰
数据量超大(数万样本) PCA + t-SNE 两步降维 先PCA降维降速,再t-SNE画图
处理文本词频矩阵 TruncatedSVD 专门处理稀疏矩阵

4. 本系列三节课知识全景回顾

课次 核心主题 关键收获
1601 PCA思想与几何直觉 降维是“探路者”——先降维看结构,再选方法深入分析
1602 PCA数学直觉与信息保留 投影、碎石图、累计曲线——科学选择降维维度
1603 SVD与降维方法全景 SVD是幕后英雄,t-SNE是可视化专家,三种方法各有所长
  • 👨‍🏫 教师活动
    1. 展示三种方法的对比表格,逐行讲解。
    2. 运行“选型决策流程图”,和学生一起走一遍决策路径。
    3. 提问:“如果你的老板给你10万条数据,让你画个图看看数据结构,你会怎么做?”
  • 🧑‍🎓 学生活动
    1. 跟随决策流程图,回答每个分支问题。
    2. 讨论:“为什么t-SNE不能送进模型?PCA可以?”(答案:t-SNE的坐标没有业务含义且具有随机性)

通过“全景对比”和“选型决策流程”,帮助学生建立完整的降维方法论体系。明确告诉学生“在什么场景用什么方法”,将知识点转化为可操作的决策能力。


📝 六、 课堂小结(5分钟)

flowchart LR
    root["📊 无监督学习(八):降维方法全景"]

    subgraph C1["⚡ SVD(幕后英雄)"]
        direction TB
        A1["PCA的底层计算引擎"]
        A2["知道名字和用途即可"]
        A3["不推公式"]
    end

    subgraph C2["🎨 t-SNE(可视化专家)"]
        direction TB
        B1["保持局部相似性"]
        B2["聚类效果最好"]
        B3["计算极慢,只看图不建模"]
    end

    subgraph C3["📌 选型决策"]
        direction TB
        C1_node["建模预处理 → PCA"]
        C2_node["画图探索 → t-SNE"]
        C3_node["稀疏矩阵 → TruncatedSVD"]
    end

    subgraph C4["🎯 全景总结"]
        direction TB
        D1["PCA = 速度之王(建模预处理首选)"]
        D2["SVD = 幕后英雄(PCA的计算器)"]
        D3["t-SNE = 可视化专家(只看图不建模)"]
    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:#fff3e0,stroke:#ff9800
    style C4 fill:#e8f5e9,stroke:#4caf50

✏️ 随堂检测与互动练习

点击展开:随堂测试题(带解析)

一、 单选题

  1. SVD在PCA中扮演的角色是什么?
  • A. PCA的可视化工具
  • B. PCA的底层数学计算引擎
  • C. 替代PCA的另一种降维方法
  • D. 专门处理文本数据的方法
【答案】

【解析】B。SVD是PCA底层的计算工具。当你调用PCA时,sklearn在后台使用了SVD算法。

  1. 以下关于t-SNE的说法,正确的是?
  • A. t-SNE计算速度非常快,适合大数据集
  • B. t-SNE降维后的坐标可以送入模型训练
  • C. t-SNE的核心思想是保持样本之间的局部相似性
  • D. t-SNE与PCA的核心思想完全相同
【答案】

【解析】C。t-SNE保持局部相似性(邻居关系),A错误(t-SNE很慢),B错误(t-SNE只用于可视化),D错误(PCA是保持方差,t-SNE是保持相似性)。

  1. 如果你的目标是“压缩特征以加速模型训练”,以下哪种方法最合适?
  • A. t-SNE
  • B. PCA
  • C. 直接删除一半特征
  • D. 随机选择特征
【答案】

【解析】B。PCA速度快、可解释、降维后的特征可以送入模型。t-SNE不能用于建模前预处理。

二、 匹配题

题目:将下列应用场景与最合适的降维方法匹配。

场景 方法
① 10000条文本数据,需要压缩特征后训练分类器 A. t-SNE
② 2000条客户数据,老板想看看客户自然分成几类 B. PCA
③ 稀疏矩阵(词频数据),需要降维 C. TruncatedSVD
【答案】

① → B(PCA,建模前预处理) ② → A(t-SNE,可视化探索,样本<5000) ③ → C(TruncatedSVD,专门处理稀疏矩阵)

三、 简答题

题目:你的老板给你10万条用户数据,100个特征。老板说:“我想看看用户大概分几类,你画张图给我,越快越好。”你会怎么做?(写出步骤和选择的方法)

【答案】

步骤

  1. 先用PCA将100维降到50维(快速压缩,保留主要信息)。
  2. 再用t-SNE将50维降到2维(精细可视化,揭示聚类结构)。

原因:t-SNE直接处理100维数据会非常慢(10万样本可能需要几小时),但先通过PCA降维到50维,t-SNE速度会大幅提升,同时保留t-SNE优秀的可视化效果。这种方法叫**“两步降维法”**,是处理大规模数据可视化的工程实践。

📮 七、 课后作业与拓展

📮 课后作业…
  1. 基础代码题:在 load_digits 上分别使用PCA、TruncatedSVD、t-SNE三种方法降到2维,记录各自耗时,并用散点图展示结果(三张图并排)。
  2. 对比分析作业:在 load_wine 数据集上,用PCA和t-SNE分别降到2维并可视化,记录两者运行时间,观察并写出两种方法在视觉上的差异。
  3. 思考题:如果样本量从1797增加到50000,你还能直接用t-SNE吗?如果不能用,你会怎么做?
  4. 综合题:某电商有5000个商品,每个商品有50个数值特征(价格、销量、评分等)。老板想看看商品大概分几类,以便制定不同的运营策略。请给出你的完整方案(步骤+方法选择+理由)。
  5. 知识总结作业:用思维导图(手绘或软件)整理本系列三节课的知识点(1601-1603),形成“降维方法论”知识树。

📋 八、 板书设计

🛠️ 板书设计…
 1无监督学习(八):SVD与降维方法全景
 2
 3一、 SVD——幕后英雄
 4   - 全称:Singular Value Decomposition(奇异值分解)
 5   - 定位:PCA的底层数学计算引擎
 6   - 关系:PCA是菜,SVD是灶台
 7   - 记住:不推公式,知道名字和用途即可!
 8
 9二、 t-SNE——可视化专家
10   - 核心思想:保持局部相似性(朋友关系)
11   - 优点:聚类效果最好,簇清晰
12   - 缺点:计算极慢,坐标无业务含义
13   - ⚠️ 只用于可视化,不用于建模!
14
15三、 三种方法全景对比
16   ┌─────────────┬──────────────┬─────────────┐
17   │    PCA      │    SVD       │   t-SNE     │
18   ├─────────────┼──────────────┼─────────────┤
19   │ 降维方法    │ 计算工具      │ 降维方法     │
20   │ 速度快      │ 支持稀疏矩阵  │ 效果最好     │
21   │ 可送模型    │ 是PCA的计算器│ 只看图不建模 │
22   └─────────────┴──────────────┴─────────────┘
23
24四、 选型决策(记忆口诀)
25   - 建模预处理 → PCA(快)
26   - 画图探索 → t-SNE(美,但要耐心等)
27   - 稀疏矩阵 → TruncatedSVD(专用)
28
29五、 本系列三课全景
30   1601 → 降维是什么(探路者)
31   1602 → PCA怎么算(投影+碎石图)
32   1603 → 还有谁+怎么选(SVD+t-SNE+选型)

本课用到的单词

单词 发音 专业英语解释(中文)
Singular Value Decomposition (SVD) /ˈsɪŋɡjələr ˈvæljuː ˌdiːkəmpəˈzɪʃən/ 奇异值分解。PCA背后的核心数学计算工具,用于矩阵分解和降维。
t-SNE /tiː sniː/ t分布随机邻域嵌入。一种专注于可视化的降维方法,保持局部相似性。
Manifold /ˈmænɪfoʊld/ 流形。t-SNE所属的“流形学习”方法家族,用于发现数据中的非线性结构。
Perplexity /pərˈpleksəti/ 困惑度。t-SNE中的重要参数,控制每个点考虑的邻居数量。
Sparse Matrix /spɑːrs ˈmeɪtrɪks/ 稀疏矩阵。大部分元素为0的矩阵,常见于文本词频数据,TruncatedSVD专门处理此类数据。
Truncated SVD /ˈtrʌŋkeɪtɪd ˌes viː ˈdiː/ 截断奇异值分解。SVD的变体,专门用于稀疏矩阵的降维。
Dimensionality Reduction /daɪˌmenʃəˈnæləti rɪˈdʌkʃən/ 降维。本系列三节课的核心主题。