day21python打卡
知识点回顾:
- LDA线性判别
- PCA主成分分析
- t-sne降维
还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说
作业:
自由作业:探索下什么时候用到降维?降维的主要应用?或者让ai给你出题,群里的同学互相学习下。可以考虑对比下在某些特定数据集上t-sne的可视化和pca可视化的区别。
降维通常在以下场景中使用:
- 高维数据处理:当数据特征数量过多(如基因数据、图像像素、文本词向量)时,降维可减少计算复杂度,缓解“维度灾难”。
- 可视化需求:将高维数据降至2D/3D以便直观展示,如探索数据分布或聚类结构。
- 去噪与特征提取:去除冗余或噪声特征,保留主要信息,例如PCA通过保留高方差成分实现去噪。
- 模型效率提升:减少特征数量可加速模型训练,降低过拟合风险(尤其在样本量较少时)。
- 数据压缩:节省存储空间,简化数据传输。
降维的主要应用
- 数据可视化:如用t-SNE或PCA将MNIST手写数字降至2D,观察类别分离。
- 图像处理:人脸识别中,PCA(特征脸方法)提取主要特征,减少计算量。
- 自然语言处理:词嵌入降维可视化(如Word2Vec + t-SNE展示语义聚类)。
- 生物信息学:基因表达数据分析,识别关键生物标记。
- 推荐系统:矩阵分解(如SVD)降低用户-物品交互矩阵的维度,提取潜在因子。
- 信号处理:去除冗余信号成分,如EEG数据中的噪声过滤。
PCA vs. t-SNE 可视化对比(以MNIST为例)
特性 | PCA | t-SNE |
---|---|---|
方法类型 | 线性降维 | 非线性降维 |
目标 | 保留全局方差,最大化数据分布 | 保留局部结构,优化邻近点相似度 |
计算速度 | 快(适合大数据) | 慢(适合小数据,复杂度O(N²)) |
参数敏感性 | 无参数(仅需指定主成分数) | 需调参(困惑度、学习率等) |
结果稳定性 | 确定性强,结果唯一 | 随机初始化导致结果可能变化 |
可视化效果 | 全局结构清晰,但类别可能重叠 | 局部聚类明显,类别分离更清晰 |
示例结果:
- PCA:MNIST前两个主成分可能显示数字按书写方向(如笔画复杂度)分布,但不同数字区域重叠较多。
- t-SNE:MNIST可视化后,不同数字形成独立簇,聚类边界更明确,但全局结构(如数字间的相对位置)可能不保留。
实战建议
-
选择场景:
- 优先用PCA进行快速初步降维、去噪或特征压缩。
- 用t-SNE或UMAP探索复杂数据聚类、流形结构(如单细胞RNA测序数据)。
-
参数调整:
- PCA:选择累计方差贡献率(如95%)决定成分数。
- t-SNE:调整困惑度(通常5-50)、学习率(避免过大)和迭代次数。
-
代码示例(Python):
from sklearn.manifold import TSNE from sklearn.decomposition import PCA import matplotlib.pyplot as plt from sklearn.datasets import load_digitsdigits = load_digits() X, y = digits.data, digits.target# PCA可视化 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) plt.scatter(X_pca[:,0], X_pca[:,1], c=y, cmap='tab10') plt.title('PCA Visualization of MNIST') plt.show()# t-SNE可视化 tsne = TSNE(n_components=2, random_state=42) X_tsne = tsne.fit_transform(X) plt.scatter(X_tsne[:,0], X_tsne[:,1], c=y, cmap='tab10') plt.title('t-SNE Visualization of MNIST') plt.show()
总结
降维是处理高维数据的核心工具,选择合适方法需权衡数据特性(线性/非线性)、任务目标(可视化/去噪/提速)和计算资源。PCA与t-SNE的对比体现了线性与非线性方法在保留数据结构上的本质差异。
浙大疏锦行