局部线性嵌入 (Locwise Linear Embedding, LNE) 算法的原理与实现步骤
题目描述
局部线性嵌入是一种著名的非线性降维算法。它的核心思想是:在高维空间中,数据的局部邻域内可以用一个超平面来近似(即局部是线性的)。算法旨在找到这种局部线性关系,然后在低维空间中尽量保持同样的局部线性关系,从而实现降维。请详细描述其原理,并逐步讲解其实现过程。
解题过程
局部线性嵌入的目标是将高维数据点映射到低维空间,同时保持数据点与其邻居间的局部线性结构。整个过程分为三个主要步骤:构建邻域图、重建权值矩阵和求解低维嵌入。
第一步:构建邻域图(确定局部邻居)
对于数据集中的每一个点 \(\mathbf{x}_i\) (维度为 \(D\)),我们需要找到它在高维空间中的 \(k\) 个最近邻(\(k\) 是预设参数)。这通常通过计算所有点之间的欧氏距离来完成,选择距离最近的 \(k\) 个点作为邻居。这个邻域图定义了数据的局部结构。
关键点:
- 参数 \(k\) 的选择至关重要。如果 \(k\) 太小,邻域过于局部化,可能无法捕捉到足够的结构信息,导致结果不稳定;如果 \(k\) 太大,邻域包含了非局部结构,会破坏“局部线性”的假设。
- 除了 \(k\)-近邻,有时也使用 \(\epsilon\)-邻域(距离小于 \(\epsilon\) 的点),但 \(k\)-近邻更常用。
第二步:计算局部重建权值矩阵(保持局部线性关系)
这是LLE算法的核心。对于每个数据点 \(\mathbf{x}_i\),我们假设它可以由其 \(k\) 个邻居点进行线性组合(重建)得到。这个线性组合的权值反映了该点与邻居之间的局部几何关系。
数学目标:
最小化每个点的重建误差。
\[\min_{W} \sum_{i=1}^{N} \left\| \mathbf{x}_i - \sum_{j=1}^{N} w_{ij} \mathbf{x}_j \right\|^2 \]
其中 \(W\) 是一个 \(N \times N\) 的权值矩阵,\(w_{ij}\) 表示点 \(\mathbf{x}_j\) 对重建点 \(\mathbf{x}_i\) 的贡献,并且满足两个约束条件:
- 局部性:如果 \(\mathbf{x}_j\) 不是 \(\mathbf{x}_i\) 的 \(k\) 个最近邻之一,则 \(w_{ij} = 0\)。
- 归一化:对于每个点 \(i\),其所有权值之和为1,即 \(\sum_j w_{ij} = 1\)。这个约束保证了重建具有平移不变性。
求解过程:
这个最小化问题可以分解为 \(N\) 个独立的子问题,每个点 \(i\) 单独求解其权值向量 \(\mathbf{w}_i\)。
- 对于一个点 \(\mathbf{x}_i\),设其 \(k\) 个邻居的索引集合为 \(Q_i\)。
- 计算该点与其所有邻居的距离构成的协方差矩阵 \(C_i\),其元素为:
\[ C_{jm}^{(i)} = (\mathbf{x}_i - \mathbf{x}_j)^T (\mathbf{x}_i - \mathbf{x}_m), \quad j, m \in Q_i \]
这里 \((\mathbf{x}_i - \mathbf{x}_j)\) 是差值向量。
3. 通过求解线性方程组来计算权值 \(\mathbf{w}_i\) (仅包含邻居对应的权值):
\[ \sum_{m \in Q_i} C_{jm}^{(i)} w_{im} = 1, \quad \text{对所有的 } j \in Q_i \]
更常用的是正则化方法:因为 \(C_i\) 可能是奇异的或接近奇异的,我们通过引入一个小的正则项来稳定求解。即求解:
\[ (C_i + \lambda \text{trace}(C_i) I) \mathbf{w}_i = \mathbf{1} \]
其中 \(\lambda\) 是一个很小的正数(如0.001),\(I\) 是单位矩阵,\(\mathbf{1}\) 是全1向量。然后对解进行归一化,使其元素和为1:\(\sum_j w_{ij} = 1\)。
通过这一步,我们得到了一个稀疏的权值矩阵 \(W\),它编码了数据在高维空间的局部几何结构。
第三步:求解低维嵌入坐标(保持权值关系)
在最后一步,我们利用上一步得到的重建权值矩阵 \(W\),来寻找低维空间的嵌入坐标 \(\mathbf{y}_i\) (维度为 \(d\), \(d << D\))。
核心思想: 在低维空间中,我们要求每个点 \(\mathbf{y}_i\) 也能用其邻居以同样的权值矩阵 \(W\) 进行线性重建。这意味着我们希望保持第一步中发现的局部线性关系。
数学目标:
最小化低维空间中的重建误差。
\[\min_{\mathbf{Y}} \sum_{i=1}^{N} \left\| \mathbf{y}_i - \sum_{j=1}^{N} w_{ij} \mathbf{y}_j \right\|^2 \]
其中 \(\mathbf{Y} = [\mathbf{y}_1, \mathbf{y}_2, ..., \mathbf{y}_N]^T\) 是 \(N \times d\) 的低维坐标矩阵。
求解过程:
这个优化问题可以转化为一个特征值问题。
- 定义稀疏矩阵 \(M\):
\[ M = (I - W)^T (I - W) \]
其中 \(I\) 是 \(N \times N\) 的单位矩阵。
2. 目标函数可以重写为:
\[ \Phi(\mathbf{Y}) = \sum_{i,j} M_{ij} \mathbf{y}_i^T \mathbf{y}_j = \text{tr}(\mathbf{Y}^T M \mathbf{Y}) \]
-
为了避免退化解(例如所有点都映射到原点),我们施加两个约束:
- 中心化:\(\sum_i \mathbf{y}_i = \mathbf{0}\) (嵌入数据以原点为中心)。
- 单位协方差:\(\frac{1}{N} \mathbf{Y}^T \mathbf{Y} = I\) (避免缩放的影响,确保解是唯一的)。
-
在上述约束下,最小化 \(\text{tr}(\mathbf{Y}^T M \mathbf{Y})\) 等价于求解 \(M\) 的特征值和特征向量:
- 计算矩阵 \(M\) 的最小 \(d+1\) 个特征值 (\(\lambda_0 \leq \lambda_1 \leq ... \leq \lambda_d\)) 及其对应的特征向量。
- 最小的特征值 \(\lambda_0\) 理论上应为0,对应的特征向量是全1向量(在中心化约束下被丢弃)。
- 因此,我们取第2小到第 \(d+1\) 小的特征值对应的特征向量,这些特征向量(每个是 \(N\) 维向量)的各个分量就构成了我们要求的低维坐标 \(\mathbf{y}_1, ..., \mathbf{y}_N\)。具体来说,第 \(j\) 个特征向量的第 \(i\) 个元素就是点 \(\mathbf{y}_i\) 的第 \(j\) 维坐标。
总结与特点
-
优点:
- 能够学习任意维度的局部线性低维流形。
- 求解最终转化为稀疏矩阵特征值问题,计算相对高效。
- 待优化的目标函数是凸的,能保证得到全局最优解(嵌入坐标)。
- 只有两个主要参数:邻居数 \(k\) 和目标维度 \(d\)。
-
缺点与注意事项:
- 对邻域大小 \(k\) 敏感,需要仔细调参。
- 假设数据在整个流形上是均匀采样的,否则可能效果不佳。
- 属于“直推式”方法,主要处理训练数据。对于新样本点,需要额外的“外样本”扩展技术才能映射。
- 无法处理非局部几何属性(如流形的聚类结构),它只保持局部关系。
局部线性嵌入通过“局部线性重建”和“全局坐标保持”的巧妙转换,成功地将复杂的非线性流形学习问题转化为线性代数的特征值问题,是流形学习领域的经典算法。