1604综合练习
Part A:给定数据/代码的精讲精练(共 5 题)
练习 1:“PCA 投影手算 —— 一维数据理解方差最大化”
🎯 目标:通过一维数据的手算,理解 PCA 中“方差最大化”的直观含义。 📂 数据:一维数据集 {1, 2, 4, 5, 8, 9, 10},共 7 个点(分布在一条直线上)。
【详细操作步骤(Step-by-Step)】 :
第 1 步:理解“投影”在一维情况下的含义
在一维数据中,数据已经在一个方向上了。如果我们想“降维”——降到 0 维(即用一个常数代表所有数据),相当于找一个点,让所有数据点“投影”到这个点上。
问题:选哪个点作为“投影点”,能让投影后的数据“方差最大”?
💡 思考:如果一个点能把数据“拉开”,就能保留更多信息。但如果所有数据都投到同一个点上,方差为 0,信息全部丢失。
第 2 步:计算原始数据的均值和方差
- 均值 μ = (1 + 2 + 4 + 5 + 8 + 9 + 10) / 7 = ____ / 7 = ____
- 方差 σ² = [(1-μ)² + (2-μ)² + … + (10-μ)²] / 7 = ____
方差 = ____(保留两位小数)
第 3 步:尝试选择一个“投影点”
假设我们想把所有数据“投影”到常数 c = 5 上(即用一个常数 5 代表所有数据)。
投影后的“方差” = [(1-5)² + (2-5)² + (4-5)² + (5-5)² + (8-5)² + (9-5)² + (10-5)²] / 7
= [____ + ____ + ____ + ____ + ____ + ____ + ____] / 7 = ____ / 7 = ____
第 4 步:尝试另一个“投影点” c = 10
投影后的“方差” = [(1-10)² + (2-10)² + (4-10)² + (5-10)² + (8-10)² + (9-10)² + (10-10)²] / 7
= ____ / 7 = ____
第 5 步:回答问题
- 当 c = 5 时,投影后方差为 ____;当 c = 10 时,投影后方差为 ____。哪个点“保留的信息更多”?
- 当 c 取什么值时,投影后的方差最大?(提示:c 越接近数据的均值,投影后方差越大还是越小?)
- 核心结论:PCA 选择的主成分方向,能让数据投影后的方差____(最大/最小)。在一维数据中,最优的“投影点”就是数据的____(均值/中位数/众数)。
第 6 步:延伸思考
- 二维数据中,PCA 找的“最佳投影线”需要穿过数据的____(中心/边缘),这样才能让投影后的方差最大。
- 这个中心点就是所有数据点的____(均值/中位数)。
练习 2:“二维投影手算 —— 找到方差最大的方向”
🎯 目标:通过二维数据的手算,理解 PCA 是如何选择“最佳投影方向”的。 📂 数据:三个二维点 A(0,0), B(2,2), C(4,4)。它们完美分布在一条直线上(y=x)。
【详细操作步骤(Step-by-Step)】 :
第 1 步:观察数据的分布
将 A、B、C 三个点画在坐标纸上。它们完美共线,在 y=x 这条直线上。
问题:如果只能保留 1 个维度(降到 1 维),应该保留哪个方向的信息?
直觉答案:应该保留 y=x 方向,因为数据在这个方向上变化最大(从 0 到 4),而在垂直方向(y=-x)上完全没有变化。
第 2 步:计算数据的中心(均值)
- 均值 μ = ((0+2+4)/3, (0+2+4)/3) = (____, ____)
第 3 步:计算不同投影方向的方差
方向 1:沿 x 轴投影(即只取 x 坐标,放弃 y 坐标)
投影后的值:A_x=0, B_x=2, C_x=4
- 均值 = 2
- 方差 = [(0-2)² + (2-2)² + (4-2)²] / 3 = (4 + 0 + 4) / 3 = ____
方向 2:沿 y=x 方向投影(数据本身的方向)
在 y=x 方向上的投影值 = (x + y) / √2(归一化后的坐标)
- A: (0+0)/√2 = 0
- B: (2+2)/√2 = 4/√2 = 2√2 ≈ 2.83
- C: (4+4)/√2 = 8/√2 = 4√2 ≈ 5.66
投影后均值 = (0 + 2.83 + 5.66) / 3 ≈ 2.83 方差 ≈ [(0-2.83)² + (2.83-2.83)² + (5.66-2.83)²] / 3 = ____
第 4 步:填写对比表格
| 投影方向 | 投影后方差值 | 信息保留程度 |
|---|---|---|
| x 轴方向 | ____ | 一般 |
| y=x 方向(数据方向) | ____ | 最大! |
第 5 步:回答问题
- 哪个方向投影后方差更大?____ 这说明什么?
- 在这个数据中,第一主成分的方向是____,第二主成分的方向是____。
- 如果数据是完美圆形的(所有方向方差相等),PCA 还“有意义”吗?为什么?
第 6 步:用 sklearn 验证
观察输出:第一主成分方向是 [0.707, 0.707],这正是 y=x 方向的单位向量!第二主成分的方差比例为 0,说明垂直方向没有信息。
练习 3:“碎石图与累计曲线 —— 数据告诉你该降几维”
🎯 目标:通过模拟数据,掌握碎石图和累计方差曲线的绘制与解读。 📂 数据:使用
make_classification生成一个包含 10 个特征、有一定冗余的数据集。
【详细操作步骤(Step-by-Step)】 :
第 1 步:生成模拟数据
第 2 步:训练 PCA 并提取方差比例
第 3 步:绘制碎石图(柱状图)
第 4 步:分析图形,填写下表
| 主成分序号 | 方差比例 | 累计方差比例 |
|---|---|---|
| PC1 | ____ | ____ |
| PC2 | ____ | ____ |
| PC3 | ____ | ____ |
| PC4 | ____ | ____ |
| PC5 | ____ | ____ |
| PC6 | ____ | ____ |
| PC7 | ____ | ____ |
| PC8 | ____ | ____ |
| PC9 | ____ | ____ |
| PC10 | ____ | ____ |
第 5 步:回答问题
- 碎石图中,从第几个主成分开始“柱子高度”明显变小?(即拐点出现在哪里?)
- 如果目标是“保留 95% 的信息”,根据累计曲线,需要保留____个主成分。
- 如果目标是“保留 90% 的信息”,需要保留____个主成分。
- 实际数据中,只有 4 个特征是有信息的。你从碎石图中能推断出这个结论吗?提示:观察前 4 个主成分的方差比例之和,是否占主导?
第 6 步:核心结论
- 通过碎石图,我们可以直观地看到每个主成分的“个体贡献”。
- 通过累计曲线,我们可以科学地决定“降几维”。
- 在这个模拟数据中,由于只有 4 个信息特征,前 4 个主成分的累计方差比例通常能达到 90% 以上,说明碎石图能反映数据的真实结构。
练习 4:【独立实战】“PCA vs t-SNE —— 谁是更好的可视化工具?”
🎯 目标:在手写数字数据集上,独立对比 PCA 和 t-SNE 的可视化效果与运行时间。 📂 数据集:
sklearn.datasets.load_digits(1797 个样本,64 维)
任务要求:
-
加载数据:使用
load_digits,提取特征X和标签y(标签用于给散点图着色)。 -
标准化:使用
StandardScaler对X进行标准化。 -
PCA 降维:
- 使用 PCA 将数据降到 2 维。
- 记录运行时间。
- 用散点图展示结果(不同颜色表示不同数字)。
- 打印累计方差比例(判断 2 维保留了多信息)。
-
t-SNE 降维:
- 使用 TSNE 将数据降到 2 维(设置
random_state=42,perplexity=30)。 - 记录运行时间。
- 用散点图展示结果。
- 使用 TSNE 将数据降到 2 维(设置
-
并排对比:
- 将两张散点图并排显示。
- 在每张图上标注运行时间。
-
填写对比表格:
| 方法 | 运行时间(秒) | 聚类效果(好/中/差) | 是否能送进模型 |
|---|---|---|---|
| PCA | ____ | ____ | ____ |
| t-SNE | ____ | ____ | ____ |
- 结论(50 字以内):
- 哪个方法可视化效果更好?
- 哪个方法运行更快?
- 如果你要“探索数据分组”给老板看,选哪个?如果要“压缩特征后训练模型”,选哪个?
练习 5:【独立实战】“降维方法选型 —— 场景匹配题”
🎯 目标:通过多个业务场景,培养降维方法的选型决策能力。
任务要求:阅读以下 6 个业务场景,为每个场景选择最合适的降维方法(从 PCA、t-SNE、TruncatedSVD 中选择),并在括号中写明理由(一句话即可)。
场景 1:某电商公司有 10 万条用户数据,100 个特征。数据科学家需要压缩特征后训练一个分类模型(预测用户是否会购买)。
- 选择:______
- 理由:______
场景 2:某生物实验室有 2000 个基因样本,每个样本有 20000 个基因表达值。研究员想看看样本是否自然分成几个群体(比如不同亚型),需要画一张 2D 散点图。
- 选择:______
- 理由:______
场景 3:某新闻网站有 50 万篇新闻文章,需要将文章转化为特征向量(TF-IDF 矩阵)进行聚类。矩阵高度稀疏(大部分元素为 0),需要降维后再聚类。
- 选择:______
- 理由:______
场景 4:某银行有 5000 个客户,每个客户有 50 个特征。风控部门要先用聚类方法识别“高风险客户群体”,但不确定数据中是否有自然分组。数据分析师决定先降维画图看一下。
- 选择:______
- 理由:______
场景 5:某公司内部有 200 万条日志数据,每条数据有 20 个特征。由于数据量极大,任何慢速算法都无法接受。目标是压缩特征以便后续异常检测。
- 选择:______
- 理由:______
场景 6:某科研团队有 3000 个单细胞 RNA-seq 数据样本,每个样本有 20000 个基因特征。他们想用可视化探索细胞类型的分群情况(样本<5000,但特征数极高)。
- 选择:______
- 理由:______
参考答案:
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 1 | PCA | 速度快,可送模型,建模前预处理标准做法 |
| 2 | t-SNE | 样本<5000,探索性可视化,聚类效果最好 |
| 3 | TruncatedSVD | 专门处理稀疏矩阵(TF-IDF/词频数据) |
| 4 | t-SNE | 先看图再聚类,样本量适中(5000<5000) |
| 5 | PCA | 数据量极大,速度优先,压缩后送模型 |
| 6 | t-SNE | 样本<5000,特征数极高,经典的单细胞可视化方案 |
Part B:不给定数据集的开放设计挑战(共 2 题)
练习 6:【造数据挑战】“高维数据的 PCA 探路 —— 找到隐藏的 3 个群体”
背景:你是某互联网公司的数据分析师,拿到了一份 20 维特征的用户行为数据,没有任何标签。老板想知道“用户自然分成几类”,以便制定不同的产品策略。
任务要求:
-
自行构造数据:
- 使用
make_blobs或make_classification生成 1000 个样本、20 个特征的数据。 - 真实群体数量设置为 3 个(但你拿到数据时,假装不知道这个数字)。
- 添加适量噪声,让聚类不是 100% 完美(模拟真实数据)。
- 使用
-
数据标准化:
- 对 20 个特征进行标准化(StandardScaler),为 PCA 做准备。
-
PCA 探索性分析:
- 将数据降到 2 维,绘制散点图(先用一种颜色,观察整体分布)。
- 从散点图中,你能看到几个“自然群体”?
-
碎石图与累计曲线:
- 绘制碎石图(全部 20 个主成分的方差比例柱状图)。
- 绘制累计方差曲线。
- 判断:如果要“保留 95% 的信息”,需要保留多少个主成分?
-
与真实标签验证:
- 现在,用你生成数据时保存的真实标签(
y_true)给散点图着色。 - 对比:你从“无色散点图”中推断出的群体数量,与真实标签是否一致?
- 现在,用你生成数据时保存的真实标签(
-
撰写“探索简报”(100 字以内):
- 你通过 PCA 看到了几个群体?
- 下一步你会建议团队做什么?(提示:聚类分析、深入挖掘群体特征等)
练习 7:【综合设计挑战】“甲方需求 —— 大规模电商用户画像可视化系统”
背景:某电商平台有 50000 个活跃用户,每个用户有 200 个行为特征(浏览、点击、加购、购买、评价等)。平台希望构建一个“用户画像可视化系统”,能够将 200 维的用户数据映射到 2D 平面,让业务人员直观地看到“用户分群”情况。
【甲方需求书】
| 项目 | 内容 |
|---|---|
| 数据情况 | 50000 个用户,200 个特征(数值型,量纲差异大,存在大量稀疏特征)。 |
| 核心需求 | ① 将 200 维数据映射到 2D 平面,画一张散点图;② 每 2 天刷新一次数据;③ 业务人员需要看到“哪些用户聚在一起”;④ 不需要精确的解释性(不需要知道每个轴叫什么)。 |
| 硬性约束 | ① 数据处理时间 < 1 小时(普通服务器);② 散点图上的点必须清晰可辨。 |
| 交付物 | ① 2D 散点图(带颜色分群);② 降维方法的选择理由说明书;③ 参数配置表。 |
任务要求:
-
自行生成模拟数据:
- 使用
make_classification+make_blobs混合生成 50000 个样本、200 个特征的数据。 - 模拟 5-8 个“真实用户群体”(用
y表示,但分析时假设未知)。
- 使用
-
问题分析:
- 直接使用 t-SNE 会遇到什么问题?(提示:运行时间)
- 直接使用 PCA 会失去什么?(提示:局部聚类结构可能被掩盖)
-
方案设计(两步降维法):
- 步骤 1:先用 PCA 将 200 维降到 50 维(快速压缩,保留主要信息)。
- 步骤 2:再用 t-SNE 将 50 维降到 2 维(精细可视化,揭示聚类结构)。
- 执行两步降维,记录每步的运行时间。
-
参数调优:
- 在 t-SNE 步骤中,尝试
perplexity = 5, 10, 20, 30, 50, 100,观察哪个参数让散点图的聚类效果最好。 - 记录你最终选择的 perplexity 值和理由。
- 在 t-SNE 步骤中,尝试
-
效果评估:
- 用真实标签给最终散点图着色,评估聚类效果。
- 如果看不到清晰的簇,尝试调整 PCA 保留的维度数(如 30、50、80、100),观察对 t-SNE 效果的影响。
-
交付物:
- 最终的 2D 散点图(带颜色分群)。
- 方法选型说明书(200 字以内):
- 为什么选择“两步降维法”(PCA + t-SNE)?
- 放弃了哪些方法?为什么放弃?
- 参数配置表:
| 步骤 | 方法 | 参数 | 运行时间 |
|---|---|---|---|
| 1 | PCA | n_components=____ | ____ 秒 |
| 2 | t-SNE | perplexity=____, random_state=42 | ____ 秒 |
- 扩展挑战(加分项) :
- 如果甲方要求“每次刷新必须在 10 分钟内完成”,你会怎么调整方案?请简要说明你的优化思路。
📌 使用指南
| 练习题 | 难度 | 建议课时 | 对应教案 | 带步骤 |
|---|---|---|---|---|
| 练习 1 | ★☆☆ | 0.5 课时 | 1602(方差最大化直觉) | ✅ 是 |
| 练习 2 | ★★☆ | 0.5 课时 | 1601(投影几何直觉) | ✅ 是 |
| 练习 3 | ★★☆ | 0.5 课时 | 1602(碎石图与累计曲线) | ✅ 是 |
| 练习 4 | ★★★ | 1 课时 | 1603(PCA vs t-SNE) | ❌ 否 |
| 练习 5 | ★★☆ | 0.5 课时 | 1603(方法选型) | ❌ 否 |
| 练习 6 | ★★★ | 1.5 课时 | 1601 + 1602(综合) | ❌ 否 |
| 练习 7 | ★★★★ | 2 课时 | 1601 + 1602 + 1603(全系列) | ❌ 否 |
建议:
- 练习 1-2 作为 课堂随堂练习(第一次课后布置),巩固投影和方差最大化的直觉。
- 练习 3 作为 课后作业(第二次课后布置),巩固碎石图和累计曲线。
- 练习 4-5 作为 实训课任务(第三次课的前半段),综合对比三种方法。
- 练习 6 作为 小组项目(2 人一组),培养探索性数据分析能力。
- 练习 7 作为 期末大作业/机考题目,综合考察全系列知识 + 工程化能力。
参考答案要点:
| 练习 | 关键答案 |
|---|---|
| 练习 1 | c = 均值 ≈ 5.57 时方差最大;一维数据中“最佳投影点”就是均值;二维数据中“最佳投影线”穿过均值点 |
| 练习 2 | y=x 方向方差最大;第一主成分方向 = [0.707, 0.707];垂直方向方差为 0 |
| 练习 3 | 碎石图柱子在 PC5 左右开始“变矮”;95% 信息通常需要 5-6 个主成分(取决于数据生成参数) |
| 练习 4 | t-SNE 可视化效果更好,但速度慢 10-50 倍;PCA 可送模型,t-SNE 不能 |
| 练习 5 | 见场景匹配表 |
| 练习 6 | 两步降维法,先 PCA 压缩到 50 维,再 t-SNE 降 2 维;perplexity 通常 20-50 效果较好 |
| 练习 7 | 两步降维法是最佳方案;单用 t-SNE 会因 50000 样本而极其缓慢;单用 PCA 无法揭示局部聚类结构 |