楼层: 首页/ 软件技术/ Python 机器学习与深度学习/ 降维:PCA / t-SNE / UMAP
10

降维:PCA / t-SNE / UMAP

Dimensionality Reduction

高维数据看不见摸不着。降维就是"给数据拍扁照"——把 100 维压到 2~3 维,主要信息还在,能画出来。

PCA 主成分分析

论找方差最大的方向

PCA 找一组正交方向,使得数据投影上去方差最大(方差大 = 信息多)。第一个主成分是方差最大方向,第二个和第一个正交、方差次大……数学上就是对协方差矩阵做特征值分解,特征值大的方向就是主成分。累计方差贡献率:取前 k 个主成分保留了多少信息。

from sklearn.datasets import load_iris from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler iris = load_iris() X = iris.data scaler = StandardScaler() X_s = scaler.fit_transform(X) pca = PCA(n_components=2) X_2d = pca.fit_transform(X_s) print("各主成分方差贡献:", pca.explained_variance_ratio_) # [0.7277 0.2303] 两个主成分保留了 95.8% 的信息 print("累计方差:", pca.explained_variance_ratio_.sum()) # 累计方差:0.958

t-SNE:可视化神器

论保留局部相似性

PCA 保全局方差,t-SNE 保局部距离:高维里相似的点在低维里也靠近。画出来的簇特别漂亮,但计算慢、只用于可视化、不要拿它做特征输入下游模型。perplexity(困惑度):考虑多少个近邻,常用 5~50。

from sklearn.manifold import TSNE tsne = TSNE(n_components=2, perplexity=30, random_state=42) X_tsne = tsne.fit_transform(X_s) # 然后 plt.scatter(X_tsne[:,0], X_tsne[:,1], c=y)

PCA 可视化:鸢尾花 4 维压到 2 维

from sklearn.datasets import load_iris import matplotlib.pyplot as plt iris = load_iris() X_s = StandardScaler().fit_transform(iris.data) pca = PCA(n_components=2) X_2d = pca.fit_transform(X_s) plt.figure(figsize=(8,6)) for i, name in enumerate(iris.target_names): plt.scatter(X_2d[iris.target==i, 0], X_2d[iris.target==i, 1], label=name, alpha=0.7) plt.xlabel(f"PC1 ({pca.explained_variance_ratio_[0]:.1%})") plt.ylabel(f"PC2 ({pca.explained_variance_ratio_[1]:.1%})") plt.legend() plt.title("鸢尾花 PCA 降维可视化") plt.show() # 三个类别在 2D 图上分得很开,说明前两个主成分已经抓住了主要差异

t-SNE 参数怎么调

参数说明
perplexity(困惑度)考虑多少个近邻。小数据用 5~10,大数据用 30~50。常用 30。
learning_rate学习率,常用 200。太小会聚成一个球,太大散成星。
n_iter迭代次数,至少 1000。

其他降维

方法说明
LDA有监督降维,找"类别间距离最大、类别内距离最小"的方向。
NMF非负矩阵分解,把矩阵拆成非负基×系数,可解释。
UMAP比 t-SNE 快,能处理更大数据,保留更多全局结构。

本章面试题

面试 · 降维

Q1. PCA 为什么要先标准化?

查看答案

PCA 找方差大的方向,量纲大的特征方差天然大,会被误认为"信息多"。标准化后每特征方差都是 1,公平比较。

Q2. PCA 和 LDA 区别?

查看答案

PCA 无监督,找最大方差方向;LDA 有监督,找最能分开类别的方向。

Q3. t-SNE 能当预处理吗?

查看答案

不建议。t-SNE 是可视化工具,变换不可逆,且每次随机结果不同,不适合作为下游模型输入。