流形学习:高维数据中的低维结构探索
1. 流形学习概述
流形学习旨在从高维数据集中恢复其潜在的低维结构,该结构通常被假定为一个弯曲的流形,因此这个问题也被称为非线性降维。与自编码器等方法不同,流形学习主要关注非参数方法,即针对训练集中的每个点计算嵌入,而不是学习一个能嵌入任何输入向量的通用模型。这类方法虽然不易进行样本外泛化,但更易于拟合,且具有较高的灵活性,可用于无监督学习(知识发现)、数据可视化以及监督学习的预处理步骤。
2. 流形的定义
- 直观理解 :简单来说,流形是一个局部欧几里得的拓扑空间。例如,地球表面是一个嵌入在三维空间中的二维曲面,在表面的每个局部点上,地球看起来是平坦的。
- 形式化定义 :一个d维流形X是这样一个空间,其中每个点x∈X都有一个邻域,该邻域在拓扑上等同于一个d维欧几里得空间,称为切空间,记为Tx = TxX。
- 黎曼流形 :黎曼流形是一种可微流形,它在切空间的每个点x处都关联一个内积算子,该算子假定随位置x平滑变化。内积引出了距离、角度和体积的概念,这些内积的集合称为黎曼度量。任何足够平滑的黎曼流形都可以嵌入到一个可能更高维的欧几里得空间中,此时该点处的黎曼内积就变成了切空间中的欧几里得内积。
3. 流形假设
大多数“自然产生”的高维数据集都位于一个低维流形上,这就是流形假设。以图像为例,一张64×57大小的图像是一个3648维空间中的向量,每个维度对应一个像素强度。随机在这个空间中选取一个点生成的图像不太可能看起来像一个数字的图像,但像素之间并非相互独立,因为它们是由一些低维结构(如数字6的形状)生成的。通过改变形状可以生成不同的图像,通常可以用一个低维流形来描述形状变化的空间。
4. 流形学习方法分类
| 方法 | 参数性 | 凸性 |
|---|---|---|
| PCA / 经典MDS | 非参数 | 是(密集) |
| 核PCA | 非参数 | 是(密集) |
| Isomap | 非参数 | 是(密集) |
| LLE | 非参数 | 是(稀疏) |
| 拉普拉斯特征映射 | 非参数 | 是(稀疏) |
| tSNE | 非参数 | 否 |
| 自编码器 | 参数化 | 否 |
下面是流形学习方法的选择流程:
graph LR
A[高维数据集] --> B{是否需要样本外泛化}
B -- 否 --> C{是否需要凸优化}
C -- 是 --> D{需要稀疏还是密集特征求解}
D -- 稀疏 --> E[LLE]
D -- 密集 --> F{是否考虑局部结构}
F -- 是 --> G[Isomap]
F -- 否 --> H[经典MDS/PCA]
C -- 否 --> I{tSNE}
B -- 是 --> J[自编码器]
5. 多维缩放(MDS)
MDS是流形学习中最简单的方法,它试图找到一组低维向量{zi∈RL : i = 1 : N},使得这些向量之间的成对距离尽可能接近用户提供的一组成对相异度D = {dij}。MDS有几种变体:
-
经典MDS
- 定义中心化的Gram(相似性)矩阵:
- 设N×D的数据矩阵X的行向量为xi,定义 ˜Kij = ⟨xi - x, xj - x⟩,用矩阵表示为 ˜K = ˜X ˜X⊤,其中 ˜X = CNX,CN = IN - 1/N 1N1⊤N是中心化矩阵。
- 定义嵌入集的应变:Lstrain(Z) = ∑i,j( ˜Kij - ⟨˜zi, ˜zj⟩)2 = || ˜K - ˜Z˜Z⊤||2F,其中 ˜zi = zi - z是中心化的嵌入向量。最小化这个损失就是经典MDS。
- 最优嵌入满足 ˜Z˜Z⊤ = USU⊤ = (US1/2)(S1/2U⊤),因此可以将嵌入向量设置为 ˜Z = US1/2的行。
- 当只有欧几里得距离时,先计算平方欧几里得距离矩阵D(2) = D ⊙ D,其元素为D(2)ij = ||xi - xj||2 = ||xi - x||2 + ||xj - x||2 - 2⟨xi - x, xj - x⟩ = ||xi - x||2 + ||xj - x||2 - 2 ˜Kij。通过双重中心化D(2)得到 ˜K = -1/2CND(2)CN,然后计算嵌入。
- 经典MDS等价于PCA。
-
操作步骤
:
1. 计算中心化的Gram矩阵 ˜K。
2. 对 ˜K进行截断SVD分解。
3. 根据分解结果计算嵌入向量。
-
度量MDS
- 经典MDS假设使用欧几里得距离,度量MDS通过定义应力函数Lstress(Z) = √(∑i<j(di,j - ˆdij)2 / ∑ij d2ij)将其推广到允许任何相异度度量,其中 ˆdij = ||zi - zj||。
- 可以使用梯度下降来解决优化问题,但更好的方法是使用一种称为SMACOF的有界优化算法。
-
操作步骤
:
1. 定义应力函数。
2. 使用SMACOF算法进行优化。
-
非度量MDS
- 非度量MDS不试图匹配点之间的距离,而是匹配点的相似性排名。定义损失LNM(Z) = √(∑i<j(f(di,j) - ˆdij)2 / ∑ij ˆd2ij),其中f(d)是从距离到排名的单调变换, ˆdij = ||zi - zj||。
- 该目标可以迭代优化,先使用等渗回归优化函数f以匹配当前嵌入距离,然后使用梯度下降优化嵌入Z,如此循环。
-
操作步骤
:
1. 定义损失函数。
2. 迭代进行等渗回归和梯度下降优化。
-
Sammon映射
- 通过将损失的每一项除以dij来强调小距离,定义损失Lsammon(Z) = (1 / ∑i<j dij) ∑i≠j( ˆdij - dij)2 / dij。最小化这个损失得到Sammon映射。
- 但这是一个非凸目标,可能过于强调精确匹配非常小的距离。
-
操作步骤
:
1. 定义Sammon映射的损失函数。
2. 尝试使用优化算法最小化损失。
6. Isomap
如果高维数据位于或接近一个弯曲的流形(如瑞士卷示例),MDS可能会认为两个点很接近,即使它们在流形上的距离很大。Isomap通过创建数据点之间的K近邻图,然后用图上的最短距离来近似两点之间的流形距离(可使用Dijkstra最短路径算法高效计算),最后应用经典MDS(即PCA)。这种方法可以捕捉局部结构并避免局部最优。但如果数据有噪声,近邻图中可能会出现“虚假”边,导致“短路”,显著扭曲嵌入,这被称为“拓扑不稳定性”。
-
操作步骤
:
1. 创建数据点之间的K近邻图。
2. 使用Dijkstra算法计算图上的最短距离。
3. 应用经典MDS进行嵌入计算。
7. 核PCA
PCA(和经典MDS)找到数据的最佳线性投影以保留所有点之间的成对相似性,而核PCA考虑非线性投影。其关键思想是通过找到内积(Gram)矩阵K = XX⊤的特征向量来解决PCA问题,然后使用核技巧将内积如x⊤i xj替换为核函数Kij = K(xi, xk)。
-
操作步骤
:
1. 计算Gram矩阵K。
2. 对K进行特征分解。
3. 使用核技巧进行非线性投影。
4. 对特征向量进行中心化处理。
5. 计算测试向量的投影。
如果使用线性核,核PCA会恢复常规PCA(经典MDS),但使用非退化核时可以使用多达N个分量。然而,使用径向基函数(RBF)核的核PCA可能会扩展特征空间而不是减少它,因此在降维方面可能不太有用。
流形学习:高维数据中的低维结构探索
8. 最大方差展开(MVU)
核PCA在使用某些核(如RBF)时可能无法得到低维嵌入,基于这一观察,人们开发了半定嵌入算法,也称为最大方差展开(MVU)。MVU试图学习一组嵌入{zi},使得:
[
\max \sum_{ij} \frac{||z_i - z_j||^2}{2} \quad \text{s.t.} \quad \frac{||z_i - z_j||^2}{2} = \frac{||x_i - x_j||^2}{2} \quad \text{for all } (i, j) \in G
]
其中,G是最近邻图(与Isomap中的相同)。这种方法明确地尝试在尊重最近邻约束的同时“展开”数据流形。
可以通过定义核矩阵K = ZZ⊤,将其重新表述为半定规划(SDP)问题,然后进行优化:
[
\max \text{tr}(K) \quad \text{s.t.} \quad \frac{||z_i - z_j||^2}{2} = \frac{||x_i - x_j||^2}{2}, \quad \sum_{ij} K_{ij} = 0, \quad K \succ 0
]
得到的核矩阵随后被传递给核PCA,得到的特征向量即为低维嵌入。
-
操作步骤
:
- 构建最近邻图G。
- 定义目标函数和约束条件,将问题转化为半定规划问题。
- 求解半定规划问题,得到核矩阵K。
- 将K传递给核PCA,计算低维嵌入。
9. 局部线性嵌入(LLE)
前面讨论的技术都依赖于对成对相似性的完整矩阵进行特征分解,无论是在环境空间(PCA)、特征空间(核PCA)还是KNN图(Isomap)中。而局部线性嵌入(LLE)则是一种解决稀疏特征值问题的技术,因此更关注数据中的局部结构。
LLE假设每个数据点xi周围的数据流形是局部线性的。可以通过使用重建权重wi将xi预测为其K个最近邻的线性组合,来找到最佳线性近似。这可以通过求解以下问题来实现:
[
\hat{W} = \min_{W} \sum_{i = 1}^{N} \left(x_i - \sum_{j = 1}^{N} w_{ij}x_j\right)^2
]
约束条件为:
[
\begin{cases}
w_{ij} = 0 & \text{if } x_j \notin \text{nbr}(x_i, K) \
\sum_{j = 1}^{N} w_{ij} = 1 & \text{for } i = 1 : N
\end{cases}
]
-
操作步骤
:
- 对于每个数据点xi,找到其K个最近邻。
- 求解上述优化问题,得到重建权重矩阵W。
- 根据权重矩阵W计算低维嵌入。
10. 流形学习方法对比
| 方法 | 核心思想 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 经典MDS | 最小化高维数据和低维嵌入之间的成对距离差异 | 与PCA等价,易于理解和实现 | 假设欧几里得距离,对局部结构捕捉不足 | 数据结构简单,无明显局部特征 |
| 度量MDS | 推广到任意相异度度量 | 可处理非欧几里得距离 | 优化较复杂 | 数据距离度量非欧几里得 |
| 非度量MDS | 匹配点的相似性排名 | 不依赖具体距离值 | 迭代优化较耗时 | 数据相似性难以用距离衡量 |
| Sammon映射 | 强调小距离 | 能突出局部结构 | 非凸目标,易陷入局部最优 | 局部结构重要的场景 |
| Isomap | 用图最短距离近似流形距离 | 能捕捉流形上的真实距离 | 对噪声敏感,存在拓扑不稳定性 | 数据位于弯曲流形上 |
| 核PCA | 使用核技巧进行非线性投影 | 可处理非线性数据 | 某些核可能扩展特征空间 | 数据存在非线性关系 |
| MVU | 在尊重最近邻约束下展开流形 | 能有效展开流形 | 计算复杂度高 | 数据需要展开以进行降维 |
| LLE | 局部线性近似 | 关注局部结构 | 对全局结构捕捉不足 | 局部结构明显的数据集 |
下面是不同数据场景下选择流形学习方法的流程:
graph LR
A[高维数据集] --> B{数据是否线性}
B -- 是 --> C{是否关注局部结构}
C -- 否 --> D[经典MDS/PCA]
C -- 是 --> E[LLE]
B -- 否 --> F{数据是否有噪声}
F -- 否 --> G{是否需要展开流形}
G -- 是 --> H[MVU]
G -- 否 --> I[核PCA]
F -- 是 --> J{局部结构是否重要}
J -- 是 --> K[调整参数后的Isomap]
J -- 否 --> L[考虑其他方法]
11. 总结
流形学习为我们提供了从高维数据中挖掘低维结构的有效手段。不同的流形学习方法各有优劣,适用于不同的数据特点和应用场景。在实际应用中,需要根据数据的特性(如线性与否、是否存在噪声、局部结构是否重要等)来选择合适的方法。同时,还可以结合多种方法进行尝试,以找到最能揭示数据潜在结构的方案。
例如,如果数据结构简单且呈线性,经典MDS或PCA可能是不错的选择;如果数据位于弯曲流形上且局部结构重要,Isomap或LLE可能更合适;而对于非线性数据,核PCA或MVU可能会发挥更好的作用。通过合理运用流形学习方法,我们可以更好地进行数据可视化、无监督学习和监督学习的预处理等任务。
超级会员免费看
211

被折叠的 条评论
为什么被折叠?



