📉 降维与度量
降维:用更少维度保留最重要信息,解决维度灾难、提升效率、去冗余
度量学习:学习一个“智能距离”,使相似样本更近、不相似样本更远,提升 KNN、聚类、检索性能
✅ 一、为什么需要降维?
- 维度灾难:维度越高,数据越稀疏,距离失效
- 计算效率:特征少 → 训练快、内存省
- 可视化:降到 2D/3D 可画图
- 去噪 / 去冗余:去除无关或重复特征
- 避免过拟合
🧩 二、降维方法分类
| 类型 | 核心思想 | 代表算法 | 是否保留原始特征含义 |
|---|---|---|---|
| 特征选择 | 从原特征中“挑选”子集 | 方差选择、卡方检验、L1正则 | ✅ 保留 |
| 特征提取 | 将原特征“映射”到新空间 | PCA、LDA、t-SNE | ❌ 不保留(新组合) |
🌟 三、PCA(主成分分析)
✅ 核心思想
- 找到数据方差最大的方向(主成分)
- 投影到这些方向,保留最多信息
- 新特征是原特征的线性组合
🧮 数学原理
设数据矩阵 $\mathbf{X} \in \mathbb{R}^{n \times d}$,已中心化(均值为0)
计算协方差矩阵:
对 $\mathbf{C}$ 做特征值分解:
- $\mathbf{V}$:特征向量矩阵(每一列是一个主成分方向)
- $\mathbf{\Lambda}$:特征值对角矩阵(特征值大小 = 该方向方差大小)
- 选择前 $k$ 个最大特征值对应的特征向量,组成投影矩阵 $\mathbf{W} \in \mathbb{R}^{d \times k}$
降维后数据:
✅ 优点
- 无监督,只依赖数据本身
- 计算高效,理论成熟
- 保留最大方差 → 适合后续建模
❌ 缺点
- 线性方法 → 无法处理非线性结构
- 新特征无明确物理意义
- 对异常值敏感(因基于方差)
🌳 四、LDA(线性判别分析,有监督降维)
✅ 核心思想
- 找到一个投影方向,使得:
- 同类样本投影后尽可能近(类内方差小)
- 不同类样本投影后尽可能远(类间方差大)
→ 最大化“类间散度 / 类内散度”
🧮 公式
定义:
- $\mathbf{S}_W$:类内散度矩阵
- $\mathbf{S}_B$:类间散度矩阵
目标:最大化
解为广义特征值问题:
取前 $k$ 个最大特征值对应的特征向量作为投影方向
📌 最多降到 $C-1$ 维($C$ = 类别数)
✅ 优点
- 有监督 → 保留判别信息
- 适合分类前的降维
❌ 缺点
- 假设各类服从高斯分布,协方差相等
- 类别数少时降维能力有限
🌀 五、t-SNE(非线性可视化神器)
✅ 核心思想
- 在高维空间中,用概率表示样本间的相似性(高斯分布)
- 在低维空间中,用t分布表示相似性(重尾,避免拥挤)
- 通过优化 KL 散度,让两个空间的概率分布尽可能接近
📌 目标:保留局部结构,适合可视化
🧮 公式(简化)
高维相似度:
低维相似度:
最小化 KL 散度:
✅ 优点
- 保留局部结构 → 可视化效果极佳
- 能发现非线性流形结构
❌ 缺点
- 计算慢,不适合大数据
- 不能用于训练集外样本(无显式映射函数)
- 超参数敏感(困惑度 perplexity)
- 不保留全局结构 → 不适合后续建模
📌 t-SNE 是可视化工具,不是预处理工具
📊 六、如何选择降维方法?
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 通用降维、保留方差 | PCA | 无监督、高效、稳定 |
| 分类前降维、保留判别信息 | LDA | 有监督、最多降到 C-1 维 |
| 数据可视化 | t-SNE | 保留局部结构,图像美观 |
| 非线性流形结构 | UMAP / Isomap | 比 t-SNE 快,保留更多全局结构 |
| 特征太多,想选重要特征 | L1正则 / 树模型特征重要性 | 保留原始特征含义 |
📌 PCA 是默认首选,t-SNE 用于画图,LDA 用于有监督场景
🎯 七、度量学习(Metric Learning)
度量学习 = “教模型如何计算距离”,使相似样本距离小,不相似样本距离大
🧩 八、核心思想
学习一个距离函数(或等价地,一个变换矩阵):
- $\mathbf{M}$:半正定矩阵(保证距离非负)
→ 学习 $\mathbf{M}$,使得距离满足任务需求
🌟 九、LMNN(Large Margin Nearest Neighbors)
✅ 核心思想
- 对每个样本,确保它的“同类邻居”比“异类样本”至少近一个间隔(margin)
- 目标函数 = 保持同类近 + 推开异类
🧮 优化目标
- $\eta_i$:样本 $i$ 的目标同类邻居
- $[\cdot]_+$:hinge loss,只惩罚违反 margin 的情况
🌳 十、NCA(Neighborhood Components Analysis)
✅ 核心思想
- 最大化“随机邻居分类器”的留一法准确率
用概率形式定义“邻居”:
目标:最大化同类邻居的概率和
✅ 优点
- 可微,可用梯度下降优化
- 适合与深度学习结合
🛠️ 十一、伪代码(通用度量学习框架)
输入:训练集 {(x1,y1), ..., (xn,yn)}, 初始距离矩阵 M
repeat:
for 每个样本 xi:
# 找到同类邻居和异类样本
similar = { xj | yj == yi, j ≠ i }
dissimilar = { xl | yl ≠ yi }
# 计算损失(如 hinge loss)
loss = 0
for xj in similar:
for xl in dissimilar:
d_ij = distance_M(xi, xj)
d_il = distance_M(xi, xl)
loss += max(0, 1 + d_ij - d_il) # LMNN 风格
# 梯度下降更新 M
grad = compute_gradient(loss, M)
M = M - η * grad
until 收敛
📌 十二、应用场景
- 人脸识别:同一人不同照片距离小,不同人距离大
- 商品推荐:相似商品距离小
- 医学图像检索:相似病灶图像距离小
- 提升 KNN / 聚类性能
⚠️ 十三、关键注意事项
- 降维不是越多越好 → 用累计方差贡献率(如 PCA 选 95%)或交叉验证选维度
- t-SNE 不能用于 train-test 分割 → 每次运行结果不同,且无映射函数
- 度量学习需要标签 → 是有监督方法
- 深度度量学习:用神经网络学习嵌入空间(如 Siamese Network、Triplet Loss)
- 降维后特征尺度可能变化 → 后续模型可能需要重新标准化
✅ 十四、一句话总结
降维 = “压缩精华,去其糟粕”;度量学习 = “重新定义亲疏远近” —— 两者都是让数据更适合机器学习模型的“预处理艺术”!
🧠 核化线性降维与流形学习
核化线性降维 = 用核技巧在高维空间做线性降维 → 等价于原始空间的非线性降维
流形学习 = 假设数据分布在一个低维弯曲曲面上,目标是“展开”这个曲面,恢复内在结构
🧩 一、核化线性降维(Kernelized Linear Dimensionality Reduction)
🎯 核心思想:用“核技巧”把数据映射到高维空间,在高维空间中做线性降维 → 等价于在原始空间中做非线性降维
✅ 1. 为什么需要“核化”?
PCA 是线性方法 → 只能发现“直线/平面”方向的主成分
现实数据常分布在弯曲的流形上(如瑞士卷、螺旋线)→ 线性方法会“压扁”结构
📌 解决思路:
- 把数据 $\mathbf{x}$ 用非线性函数 $\phi(\cdot)$ 映射到高维空间:$\phi(\mathbf{x})$
- 在高维空间中做 PCA → 即 KPCA(核主成分分析)
⚠️ 问题:$\phi(\mathbf{x})$ 维度可能极高 → 计算爆炸!
✅ 核技巧(Kernel Trick):只需计算内积:
→ 用核函数(如 RBF、多项式)代替!
✅ 2. 核PCA(Kernel PCA)原理
🔄 算法步骤:
- 选择核函数 $K(\mathbf{x}_i, \mathbf{x}_j)$(如 RBF 核)
- 计算核矩阵 $\mathbf{K} \in \mathbb{R}^{n \times n}$,其中 $K_{ij} = K(\mathbf{x}_i, \mathbf{x}_j)$
对 $\mathbf{K}$ 做中心化:
($\mathbf{1}_n$ 是 $n \times n$ 的全 $1/n$ 矩阵)
对 $\mathbf{K}_{\text{centered}}$ 做特征值分解:
取前 $k$ 个最大特征值对应的特征向量,作为降维后坐标:
📌 注意:KPCA 无显式投影矩阵,新样本降维需特殊处理(如 Nyström 近似)
✅ 3. 常用核函数
| 核函数 | 公式 | 适用场景 | ||
|---|---|---|---|---|
| 线性核 | K(\\mathbf{x}_i, \\mathbf{x}_j) = \\mathbf{x}_i^T \\mathbf{x}_j | 等价于原始 PCA | ||
| 多项式核 | K(\\mathbf{x}_i, \\mathbf{x}_j) = (\\gamma \\mathbf{x}_i^T \\mathbf{x}_j + r)^d | 多项式非线性结构 | ||
| RBF / 高斯核 | **K(\\mathbf{x}_i, \\mathbf{x}_j) = \\exp(-\\gamma \\ | \\mathbf{x}_i - \\mathbf{x}_j\\ | ^2)** | 最常用,适合复杂非线性 |
✅ 4. 优缺点
✅ 优点
- 可处理非线性结构
- 理论优美,是 PCA 的自然扩展
- 保留核方法的灵活性
❌ 缺点
- 计算复杂度 $O(n^2)$ 或 $O(n^3)$ → 不适合大数据
- 无显式映射 → 新样本降维困难
- 核函数和参数(如 $\gamma$)需调优
📌 适合中小数据集的非线性降维
🌀 二、流形学习(Manifold Learning)
🎯 核心思想:假设高维数据实际分布在一个低维“弯曲曲面”(流形)上,目标是发现并展开这个曲面,恢复其内在低维结构。
✅ 1. 什么是“流形”?
📌 通俗理解:弯曲的低维曲面嵌入在高维空间中
🌰 例子:
- 瑞士卷(Swiss Roll):2D 流形嵌入在 3D 空间
- 人脸图像:所有“人脸”构成一个低维流形(光照、角度、表情变化)
📌 目标:把这个“卷起来的纸”展开 → 恢复原始低维结构
✅ 2. 与 PCA / KPCA 的区别
| 方法 | 假设 | 是否线性 | 是否保留全局结构 | 是否保留局部结构 |
|---|---|---|---|---|
| PCA | 数据在超平面上 | ✅ | ✅ | ⚠️ |
| KPCA | 数据在高维超平面 | ✅(高维) | ⚠️ | ⚠️ |
| 流形学习 | 数据在弯曲流形上 | ❌ | ❌(多数) | ✅(核心目标) |
📌 流形学习 = 专注于“局部几何结构”的非线性降维
✅ 3. 代表算法
(1)Isomap(等距映射)
✅ 核心思想:
- 用“测地距离(Geodesic Distance)”代替欧氏距离
- 测地距离 = 流形上的最短路径
- 用 MDS 降维,保持测地距离
🔄 步骤:
- 构建近邻图(k近邻或 ε 邻域)
- 计算所有点对之间的最短路径距离
用经典 MDS 降维:
✅ 优点:
- 保留全局几何结构(如果流形无孔洞)
❌ 缺点:
- 对噪声和密度变化敏感
- 计算最短路径慢($O(n^3)$)
- 流形有“孔”时失效
(2)LLE(局部线性嵌入)
✅ 核心思想:
- 每个样本可以用其邻居的线性组合重构
- 在低维空间中,保持相同的重构权重
🔄 步骤:
- 对每个样本 $\mathbf{x}_i$,找 k 个最近邻
计算重构权重 $w_{ij}$:
在低维空间中,找 $\mathbf{z}_i$:
✅ 优点:
- 保留局部线性关系
- 对密度变化鲁棒
❌ 缺点:
- 不保留全局结构
- 对参数 k 敏感
- 可能出现“镜像翻转”
(3)拉普拉斯特征映射(Laplacian Eigenmaps)
✅ 核心思想:
- 构建近邻图,定义相似度权重
- 在低维空间中,让相似样本尽量靠近
🔄 目标函数:
- $\mathbf{W}$:相似度矩阵(如高斯核)
- $\mathbf{L} = \mathbf{D} - \mathbf{W}$:拉普拉斯矩阵
→ 解为 $\mathbf{L}$ 的最小特征值对应的特征向量
✅ 优点:
- 图论基础,理论优美
- 保留局部相似性
❌ 缺点:
- 不保留全局结构
- 对参数敏感
🆚 4. 流形学习 vs t-SNE
| 特性 | 流形学习(Isomap/LLE) | t-SNE |
|---|---|---|
| 是否保留局部结构 | ✅ | ✅✅(更强) |
| 是否保留全局结构 | ⚠️(Isomap 可,LLE 否) | ❌ |
| 计算复杂度 | 高($O(n^2)$~$O(n^3)$) | 高($O(n^2)$) |
| 新样本处理 | 困难(无显式映射) | 不能(每次结果不同) |
| 可视化效果 | 一般 | ✅✅✅(极佳) |
| 超参数敏感 | 是 | 是(困惑度) |
📌 t-SNE 是流形学习的“可视化特化版”,牺牲全局结构换取局部结构极致保留
📌 5. 如何选择?
| 场景 | 推荐方法 |
|---|---|
| 理论研究、保留全局结构 | Isomap |
| 局部线性关系强 | LLE |
| 图结构/相似度明确 | 拉普拉斯特征映射 |
| 数据可视化 | t-SNE / UMAP |
| 非线性降维 + 新样本支持 | KPCA / UMAP |
| 大数据 | UMAP(比 t-SNE 快) |
🌟 UMAP(Uniform Manifold Approximation and Projection) 是近年来最流行的流形学习方法,比 t-SNE 更快、保留更多全局结构、支持新样本映射 —— 强烈推荐!
✅ 6. 一句话总结
核化线性降维 = “把数据升维后做线性降维” → 用核函数偷懒
流形学习 = “把卷起来的纸展开” → 专注于局部几何结构的非线性降维