机器学习理论(5)


📉 降维与度量

降维:用更少维度保留最重要信息,解决维度灾难、提升效率、去冗余
度量学习:学习一个“智能距离”,使相似样本更近、不相似样本更远,提升 KNN、聚类、检索性能


✅ 一、为什么需要降维?

  • 维度灾难:维度越高,数据越稀疏,距离失效
  • 计算效率:特征少 → 训练快、内存省
  • 可视化:降到 2D/3D 可画图
  • 去噪 / 去冗余:去除无关或重复特征
  • 避免过拟合

🧩 二、降维方法分类

类型 核心思想 代表算法 是否保留原始特征含义
特征选择 从原特征中“挑选”子集 方差选择、卡方检验、L1正则 ✅ 保留
特征提取 将原特征“映射”到新空间 PCA、LDA、t-SNE ❌ 不保留(新组合)

🌟 三、PCA(主成分分析)

✅ 核心思想

  • 找到数据方差最大的方向(主成分)
  • 投影到这些方向,保留最多信息
  • 新特征是原特征的线性组合

🧮 数学原理

设数据矩阵 $\mathbf{X} \in \mathbb{R}^{n \times d}$,已中心化(均值为0)

  1. 计算协方差矩阵:

  2. 对 $\mathbf{C}$ 做特征值分解:

    • $\mathbf{V}$:特征向量矩阵(每一列是一个主成分方向)
    • $\mathbf{\Lambda}$:特征值对角矩阵(特征值大小 = 该方向方差大小)
  3. 选择前 $k$ 个最大特征值对应的特征向量,组成投影矩阵 $\mathbf{W} \in \mathbb{R}^{d \times k}$
  4. 降维后数据:

✅ 优点

  • 无监督,只依赖数据本身
  • 计算高效,理论成熟
  • 保留最大方差 → 适合后续建模

❌ 缺点

  • 线性方法 → 无法处理非线性结构
  • 新特征无明确物理意义
  • 对异常值敏感(因基于方差)

🌳 四、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 / 聚类性能

⚠️ 十三、关键注意事项

  1. 降维不是越多越好 → 用累计方差贡献率(如 PCA 选 95%)或交叉验证选维度
  2. t-SNE 不能用于 train-test 分割 → 每次运行结果不同,且无映射函数
  3. 度量学习需要标签 → 是有监督方法
  4. 深度度量学习:用神经网络学习嵌入空间(如 Siamese Network、Triplet Loss)
  5. 降维后特征尺度可能变化 → 后续模型可能需要重新标准化

✅ 十四、一句话总结

降维 = “压缩精华,去其糟粕”;度量学习 = “重新定义亲疏远近” —— 两者都是让数据更适合机器学习模型的“预处理艺术”!

🧠 核化线性降维与流形学习

核化线性降维 = 用核技巧在高维空间做线性降维 → 等价于原始空间的非线性降维
流形学习 = 假设数据分布在一个低维弯曲曲面上,目标是“展开”这个曲面,恢复内在结构


🧩 一、核化线性降维(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)原理

🔄 算法步骤:

  1. 选择核函数 $K(\mathbf{x}_i, \mathbf{x}_j)$(如 RBF 核)
  2. 计算核矩阵 $\mathbf{K} \in \mathbb{R}^{n \times n}$,其中 $K_{ij} = K(\mathbf{x}_i, \mathbf{x}_j)$
  3. 对 $\mathbf{K}$ 做中心化:

    ($\mathbf{1}_n$ 是 $n \times n$ 的全 $1/n$ 矩阵)

  4. 对 $\mathbf{K}_{\text{centered}}$ 做特征值分解:

  5. 取前 $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 降维,保持测地距离

🔄 步骤:

  1. 构建近邻图(k近邻或 ε 邻域)
  2. 计算所有点对之间的最短路径距离
  3. 用经典 MDS 降维:

✅ 优点:

  • 保留全局几何结构(如果流形无孔洞)

❌ 缺点:

  • 对噪声和密度变化敏感
  • 计算最短路径慢($O(n^3)$)
  • 流形有“孔”时失效

(2)LLE(局部线性嵌入)

✅ 核心思想:

  • 每个样本可以用其邻居的线性组合重构
  • 在低维空间中,保持相同的重构权重

🔄 步骤:

  1. 对每个样本 $\mathbf{x}_i$,找 k 个最近邻
  2. 计算重构权重 $w_{ij}$:

  3. 在低维空间中,找 $\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. 一句话总结

核化线性降维 = “把数据升维后做线性降维” → 用核函数偷懒
流形学习 = “把卷起来的纸展开” → 专注于局部几何结构的非线性降维


文章作者: zyuan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zyuan !
评论
  目录