
一句话介绍: 这套 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 提供两种输入方式。
默认变量名是: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,用于继续做二维/三维可视化和后续机器学习分析。