降维算法

9 minAdvanced2026/6/14

PCA、t-SNE、UMAP降维原理、数学推导与应用场景对比。

1. 降维问题概述

降维是将高维数据映射到低维空间,同时尽可能保留原始数据的重要信息。

1.1 降维动机

动机说明
维度灾难高维空间数据稀疏,距离区分度下降
可视化只能理解2D/3D空间
去噪去除冗余和噪声维度
加速计算减少特征数量降低计算开销
缓解过拟合减少模型参数

1.2 降维方法分

方法特点
线性降维PCA全局结构、速度快
非线性降维t-SNE、UMAP局部结构、可视化好
流形学习Isomap、LLE保持流形结构
自编码器AE、VAE深度学习方法

2. PCA主成分分析

2.1 数学推导

目标:找到正交变换 W\mathbf{W},使投影后的方差最大化:

Z=XW\mathbf{Z} = \mathbf{X}\mathbf{W}

第一步:数据中心化

Xcentered=XXˉ\mathbf{X}_{centered} = \mathbf{X} - \bar{\mathbf{X}}

第二步:最大化投影方差

第一个主成分 w1\mathbf{w}_1

maxw1Var(Xw1)=maxw1w1TSw1s.t.w1=1\max_{\mathbf{w}_1} \text{Var}(\mathbf{X}\mathbf{w}_1) = \max_{\mathbf{w}_1} \mathbf{w}_1^T \mathbf{S} \mathbf{w}_1 \quad \text{s.t.} \quad \|\mathbf{w}_1\| = 1

其中 S=1nXTX\mathbf{S} = \frac{1}{n}\mathbf{X}^T\mathbf{X} 为协方差矩阵。

第三步:拉格朗日乘子法

Sw1=λ1w1\mathbf{S}\mathbf{w}_1 = \lambda_1 \mathbf{w}_1

w1\mathbf{w}_1S\mathbf{S}特征向量λ1\lambda_1 是对应特征值。

结论:PCA 的主成分就是协方差矩阵的特征向量,按特征值从大到小排列。

2.2 方差解释比

kk 个主成分的方差解释比:

Ratiok=λkj=1dλj\text{Ratio}_k = \frac{\lambda_k}{\sum_{j=1}^d \lambda_j}

累计方差解释比:

CumRatio(m)=k=1mλkj=1dλj\text{CumRatio}(m) = \frac{\sum_{k=1}^m \lambda_k}{\sum_{j=1}^d \lambda_j}

通常选择 mm 使累计解释比达到 85%95%85\% \sim 95\%

2.3 PCA计算方法

方法复杂度适用场景
特征值分解O(d3)O(d^3)d<nd < n
SVDO(min(n2d,nd2))O(\min(n^2d, nd^2))通用
随机SVDO(ndk)O(nd \cdot k)大规模数据

SVD方法

X=UΣVT\mathbf{X} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T

  • V\mathbf{V} 的列即为主成分方向
  • Σ\boldsymbol{\Sigma} 的对角元素与特征值的关系:λk=σk2/n\lambda_k = \sigma_k^2 / n

2.4 PCA应用

from sklearn.decomposition import PCA

pca = PCA(n_components=0.95)  # 保留95%方差
X_reduced = pca.fit_transform(X)

print(f"原始维度: {X.shape[1]}")
print(f"降维后维度: {X_reduced.shape[1]}")
print(f"方差解释比: {pca.explained_variance_ratio_}")

3. t-SNE

3.1 算法原理

t-SNE(t-Distributed Stochastic Neighbor Embedding)通过保持局部邻域结构实现降维可视化。

高维空间相似度(高斯分布):

pji=exp(xixj2/2σi2)kiexp(xixk2/2σi2)p_{j|i} = \frac{\exp(-\|x_i - x_j\|^2 / 2\sigma_i^2)}{\sum_{k \neq i}\exp(-\|x_i - x_k\|^2 / 2\sigma_i^2)}

对称化

pij=pji+pij2np_{ij} = \frac{p_{j|i} + p_{i|j}}{2n}

低维空间相似度(Student-t分布,自由度1即柯西分布):

qij=(1+yiyj2)1kl(1+ykyl2)1q_{ij} = \frac{(1 + \|y_i - y_j\|^2)^{-1}}{\sum_{k \neq l}(1 + \|y_k - y_l\|^2)^{-1}}

目标:最小化KL散度:

C=KL(PQ)=ijpijlogpijqijC = \text{KL}(P \| Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}}

3.2 为什么用t分布?

  • 高维空间中,高斯分布的短尾导致中等距离的点在低维中被挤压
  • t分布的长尾允许中等距离的点在低维中推得更远
  • 缓解拥挤问题

3.3 困惑度(Perplexity)

Perp(Pi)=2H(Pi)\text{Perp}(P_i) = 2^{H(P_i)}

其中 H(Pi)=jpjilog2pjiH(P_i) = -\sum_j p_{j|i} \log_2 p_{j|i} 为信息熵。

  • 困惑度可理解为”有效近邻数”
  • 典型值:5~50
  • 困惑度越大,关注越全局的结构

3.4 t-SNE注意事项

  • 不可用于特征工程:t-SNE不保持全局距离和簇间关系
  • 不可增量:新数据需要重新运行
  • 随机性:不同运行可能产生不同结果
  • 超参数敏感:困惑度、学习率、迭代次数影响结果
  • 簇大小不可比较:t-SNE会膨胀密集簇、压缩稀疏簇

4. UMAP

4.1 算法原理

UMAP(Uniform Manifold Approximation and Projection)基于拓扑数据分析黎曼几何

步骤1:构建模糊拓扑表示

高维空间中的局部相似度:

pji=exp(d(xi,xj)ρiσi)p_{j|i} = \exp\left(-\frac{d(x_i, x_j) - \rho_i}{\sigma_i}\right)

其中 ρi=minjd(xi,xj)\rho_i = \min_j d(x_i, x_j) 为最近邻距离。

步骤2:对称化

pij=pji+pijpjipijp_{ij} = p_{j|i} + p_{i|j} - p_{j|i} \cdot p_{i|j}

步骤3:优化低维嵌入

最小化交叉熵:

C=(i,j)[pijlogqij(1pij)log(1qij)]C = \sum_{(i,j)} \left[-p_{ij}\log q_{ij} - (1-p_{ij})\log(1-q_{ij})\right]

4.2 UMAP vs t-SNE

维度UMAPt-SNE
速度快10~100倍
可扩展维度可降至>2维主要用于2D/3D
全局结构较好保持较差
增量学习支持(transform)不支持
理论基础拓扑学概率论
簇间距离有意义不可比较
参数n_neighbors, min_distperplexity

4.3 UMAP参数

参数说明典型值
n_neighbors局部vs全局结构平衡5~50
min_dist嵌入点最小距离0.001~0.5
n_components目标维度2~100
metric距离度量euclidean/cosine

5. 降维方法选择指南

场景推荐方法原因
特征工程/去噪PCA线性、可解释、快速
数据可视化t-SNE/UMAP非线性、保持局部结构
大规模数据PCA/UMAP计算效率高
保持全局结构UMAP全局+局部兼顾
在线/增量PCA/UMAP支持增量变换
别特征FAMD/MCA专为混合型设计