首页/文章/ 详情

2-36高维数据怎样“摊平”到二维? 对比 8 种降维方法

35分钟前浏览0
一句话介绍: 这套 MATLAB GUI 把 MDS、PCA、ISOMAP、LLE、Hessian LLE、Laplacian Eigenmap、Diffusion Map 和 LTSA 8 种降维方法集成到同一个程序中,可以直接生成 Swiss Roll 等非线性流形,也可以载入自己的数据,然后把高维样本映射到 1D、2D 或 3D 低维空间进行比较。

先看它解决什么问题

很多高维数据表面上有很多变量,但真正决定样本变化的自由度可能很少。

一个最经典的例子就是 Swiss Roll:

它在三维空间里卷成一张“瑞士卷”,看起来需要 x、y、z 三个坐标描述;但从几何本质上看,它其实只是一张被卷起来的二维面。

这套程序要解决的就是:

能不能只根据样本之间的几何关系,把弯曲、卷曲或高维的数据重新展开到更低维空间,同时尽可能保留原来的内在结构?

整个程序流程非常清楚:

生成 / 载入高维样本 → 建立距离或局部邻域 → 选择降维算法 → 求低维坐标 → 输出低维嵌入

这就是典型的:Manifold Learning,流形学习。

1. 这个工程真正是什么?

它是一个 MATLAB GUI,核心功能不是训练分类器,而是:

生成测试流形;载入用户数据;设置目标维数;

设置近邻参数;单独运行某种降维方法;

一次运行全部 8 种方法;

把低维结果写回 MATLAB 工作区。

核心算法文件包括 Isomap.m、lle.m、HLLE.m、LTSA.m、leigs.m、diffusionKernel.m、mdsFast.m 和 pca.m。

因此这份工程更准确的名称应该是:多算法流形学习与降维对比工具。

2. 程序一共集成了哪 8 种算法?


方法

当前程序主要保留的信息

MDS

样本之间的全局距离

PCA

全局线性主方向

ISOMAP

KNN 图上的测地距离

LLE

局部线性重构关系

Hessian LLE

局部切空间中的二阶几何

Laplacian Eigenmap

邻接图局部连接关系

Diffusion Map

核函数定义的扩散关系

LTSA

局部切空间及其全局对齐

它们不是简单换一个名字做同一件事。

区别的核心在于:

每种算法认为“什么结构最值得在降维后保留下来”。

3. 为什么程序还给每个样本保存一个颜色值?

Swiss Roll 生成时,程序同时保存:ColorVector = t

这个颜色值不是降维算法的输入特征。

它只是跟着每个样本一起保存,使同一个点在高维空间和低维空间中仍能保持相同标记。

这样可以直观判断:

原来沿流形连续变化的点,降维以后是否仍保持连续顺序。

用户载入自己的数据时,也可以从 MATLAB 工作区读取一个自定义 colorVector。

4. 程序自带哪些测试流形?

除了默认 Swiss Roll,GUI 还内置:

Swiss Hole、Corner Planes、Punctured Sphere、Twin Peaks、3D Clusters、Toroidal Helix、Gaussian、Occluded Disks、Sigma

共 10 类示例。

其中大部分是 3D 几何流形。

Occluded Disks 比较特别:

程序生成的是:20 × 20 = 400 维图像向量

每个样本代表不同遮挡位置下的一幅小图。

所以这套工具不只是演示:3D → 2D

也能展示真正的:高维图像数据 → 低维坐标

5. 所有非线性方法为什么都离不开“邻居”?

界面默认设置:K = 8

意思是对很多流形算法来说,每个样本主要观察自己附近的 8 个样本。

基础欧氏距离为:Dᵢⱼ = ||xᵢ - xⱼ||₂

在弯曲流形上,两点的直线距离不一定能反映它们沿流形表面的真实远近。

因此 ISOMAP、LLE、Laplacian、HLLE 和 LTSA 等方法都会先从:谁和谁是局部邻居?这个问题出发。

这也是流形学习区别于单纯线性投影的核心思想之一。

6. PCA:找全局最主要的线性方向

PCA 假设数据主要分布在一个低维线性子空间附近。

当前 pca.m 直接对:X Xᵀ

求最大的 d 个特征向量:X Xᵀu = λu

然后把这些特征向量作为低维表示。

因此当前源码中的 PCA 是一个非常精简的谱分解实现。它最适合:

数据本身近似位于一个平面或线性子空间中的情况。

如果数据像 Swiss Roll 一样被强烈卷曲,单个全局线性平面通常无法把它真正“展开”。

7. MDS:让低维距离尽量接近原始距离

MDS 先计算所有样本之间的欧氏距离矩阵。

程序希望低维点 yᵢ 之间的距离:d̂ᵢⱼ = ||yᵢ - yⱼ||₂

尽可能接近原始距离:dᵢⱼ可以把它理解为尽量减小:

Stress ≈ Σᵢⱼ(dᵢⱼ - d̂ᵢⱼ)²

当前 mdsFast.m 使用随机小坐标初始化,进行:30 次迭代

学习率为:0.05

逐步移动低维点的位置。所以 MDS 主要关注的是:

全局成对距离能否在低维空间中被重新表达。

8. ISOMAP:不看穿过卷曲面的直线,而看沿流形走多远

ISOMAP 是这套程序里最典型的非线性流形方法之一。

它先建立 KNN 邻接图。

只有局部近邻之间保留原始距离,非邻居之间先设成很大的距离。

随后计算图上的最短路径:

d_G(i,j) = shortest path between i and j

这个最短路径距离被当作流形上的近似测地距离。

程序再对测地距离矩阵执行经典 MDS。

因此核心流程是:

欧氏距离 → KNN 图 → 最短路径测地距离 → MDS → 低维坐标

对于 Swiss Roll,两个点虽然在三维空间中可能隔着不同卷层靠得很近,但 ISOMAP 不会直接“穿墙”,而是尽量沿着样本流形的邻接路径计算距离。

9. LLE:保留“我是怎样由邻居组成的”

LLE 不重点保存绝对距离。

它先假设每个点都可以由附近 K 个邻居线性重构:xᵢ ≈ Σⱼ wᵢⱼxⱼ

并要求:Σⱼ wᵢⱼ = 1

程序先求使局部重构误差最小的一组权值:

E = Σᵢ ||xᵢ - Σⱼwᵢⱼxⱼ||²

然后在低维空间中继续使用同一套权值:yᵢ ≈ Σⱼwᵢⱼyⱼ

最终通过:M = (I-W)ᵀ(I-W)

的最小特征向量得到低维坐标。

所以 LLE 真正想保留的是:

一个点与自己局部邻居之间的线性组合关系。

10. Hessian LLE 与 LTSA 为什么更强调“局部切空间”?

如果一个流形在非常小的区域内观察,通常可以近似成一个平面。

这个局部平面就是:切空间Hessian LLE

HLLE.m 先对每个点的邻域做 SVD,估计局部 d 维坐标,再构造二次项,形成 Hessian 估计矩阵。

最终通过:G = WᵀW的小特征向量恢复全局低维坐标。

它不仅利用局部一阶结构,还进一步考虑局部二阶几何变化。LTSA

LTSA 同样先对每个邻域求局部低维切空间。

随后构造局部投影矩阵,再把所有局部坐标系统:

对齐到一个统一的全局低维坐标系。

因此两者都属于:先理解局部几何,再恢复整体流形这一类方法。

11. Laplacian Eigenmap:把相邻样本在低维空间中继续放近

当前 leigs.m 先为每个样本寻找 K 个最近邻。

相邻样本之间建立:Wᵢⱼ = 1非邻居为 0。

再计算度矩阵:Dᵢᵢ = ΣⱼWᵢⱼ

图拉普拉斯矩阵:L = D - W

最后求 L 的最小特征向量作为嵌入坐标。

它的核心思想可以概括成:

原空间中互为邻居的样本,在低维空间中也不要被拉得太远。

所以它更关注局部邻接拓扑,而不是完整的全局距离。

12. Diffusion Map:用“扩散过程”定义样本之间的关系

Diffusion Map 先根据距离构造高斯型核:

Kᵢⱼ = exp[-(Dᵢⱼ/σ)²]

当前 GUI 默认:σ = 10

然后计算每个点的核密度 p,并使用参数 α 做密度归一化:

K¹ᵢⱼ = Kᵢⱼ / (pᵢpⱼ)^α

当前默认:α = 1

随后再做对称归一化和奇异值分解,舍去第一个平凡分量,取后面的 d 个分量作为低维坐标。

所以 Diffusion Map 不是只看一个最近邻,而是通过核函数描述:

样本之间经过局部多步扩散以后有多容易互相到达。

13. 为什么要把 8 种算法放在同一个 GUI 里?

因为不存在一个方法对所有流形都最好。

例如:

PCA 擅长线性结构;

MDS 强调全局距离;

ISOMAP 适合测地距离能够被邻域图稳定恢复的流形;

LLE 强调局部线性重构;

Laplacian 更关注邻接关系;

HLLE / LTSA 更依赖局部切空间;

Diffusion Map 通过核与扩散过程描述几何结构。

当前 GUI 提供一个:Run All 8按钮。

它会依次运行全部 8 种算法,并记录每种算法的运行时间。

所以这份工程最有价值的地方并不是证明“某一种算法最好”,而是:

让同一份数据在完全相同的目标维数下接受不同降维思想处理,再比较它们保留结构的方式。

14. 程序能处理自己的数据吗?

除了内置示例,GUI 提供两种输入方式。

从 MATLAB 工作区载入

默认变量名是:myMatrix

程序直接从 base workspace 读取矩阵。

从文本文件载入

默认文件名:myfile.txt

使用空格分隔的数值矩阵读取。

数据排列方式为:每一行 = 一个样本、每一列 = 一个原始特征维度

15. 程序最终输出什么?

例如默认 Swiss Roll:

maniX ≈ 800 × 3

单独点击某个降维算法后,结果会写到:maniY

默认目标维数 d=2,因此:maniY ≈ 800 × 2

这意味着后续不一定只能在 GUI 中观察结果。

还可以直接在 MATLAB 工作区继续对 maniY 做:

聚类;分类;可视化;异常检测;后续机器学习分析。

16. 这套程序最适合用在哪里?

流形学习入门

可以直观看懂为什么“高维”不一定意味着数据真正具有很多自由度。

非线性降维算法对比

同一份 Swiss Roll 可以分别交给 PCA、ISOMAP、LLE、Diffusion Map 等方法,理解它们保留结构的区别。

高维数据可视化

如果自己的数据有几十维、几百维,可以先映射到 2D 或 3D,再观察样本的聚集和连续结构。

算法教学与实验

源码直接包含经典算法实现,邻域、距离矩阵、权重矩阵、图拉普拉斯和特征分解等过程都可以继续修改。

17. 怎么运行?

主入口是:mani.m运行后会打开 GUI。

默认最简单的实验是:Swiss Roll → 800 点 → d=2 → K=8

点击 Load Example 生成样本,然后可以单独选择某个算法,也可以直接点击:

Run All 8

统一比较全部方法。

Diffusion Map 还使用界面中的:σ=10、α=1

如果导入自己的数据,只要保证:行是样本、列是特征

18. 一句话看懂这个项目

这是一个流形学习 GUI 工具:默认生成 800 个三维 Swiss Roll 样本,并把目标维数设为 2、近邻数设为 K=8;程序同时集成 MDS、PCA、ISOMAP、LLE、Hessian LLE、Laplacian Eigenmap、Diffusion Map 和 LTSA 8 种降维方法,其中 ISOMAP 保留 KNN 图测地距离,LLE 保留局部重构权值,Laplacian 保留邻接图结构,Diffusion Map 使用 Kᵢⱼ=exp[-(Dᵢⱼ/σ)²] 描述扩散关系。除了 10 类内置流形,它还能载入用户矩阵或文本数据,并把原始数据写入 maniX、单算法降维结果写入 maniY,用于继续做二维/三维可视化和后续机器学习分析。


来源:MATLAB学习与应用
非线性二次开发MATLAB曲面FAST
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-09-25
最近编辑:35分钟前
explicit-z
硕士 工种号:MATLAB学习与应用
获赞 212粉丝 79文章 323课程 5
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈