1. 从“卷起来的布”说起:LLE降维到底在做什么?
想象一下,你有一块揉成一团的丝绸手帕。从远处看,它就是一个三维空间里的不规则球体。但你知道,它本质上是一块二维的布,只是被“卷”起来了。现在,你的任务是不破坏这块布的纹理和结构,把它重新平整地展开在桌面上。这个过程,就是流形学习(Manifold Learning)要解决的核心问题,而局部线性嵌入(Locally Linear Embedding, LLE)正是完成这个“优雅展开”任务的经典方法之一。
在机器学习的世界里,我们常常会遇到类似“揉皱的手帕”一样的数据。比如,你拍了几百张人脸照片,每张照片是100x100像素的灰度图,那么每张图片就位于一个10000维的高维空间中的一个点。但实际上,决定一张人脸样貌的关键因素(如脸型、五官位置、光照角度)可能只有几十个。这些数据点看似分布在高维空间,实则可能“居住”在一个低维的流形(Manifold)上。LLE算法的目标,就是找到这个隐藏的低维流形,把数据“摊平”,同时保留数据点之间的局部结构关系。
我刚开始接触LLE时,总觉得那些数学公式有点吓人。但后来我发现,它的核心思想异常直观,甚至有点“邻里互助”的意味。简单来说,LLE做了三件事:
- 找邻居:对于高维空间中的每一个数据点,找到离它最近的k个点(就像你只和你小区里的邻居熟悉)。
- 算关系:认为这个点可以由它的k个邻居线性组合而成(比如,你的性格可能由你最好的三个朋友的性格按一定比例组合而成),并算出这个组合的权重。
- 保关系:在降维后的低维空间里,强行让每个点和它邻居的相对位置关系(即上一步算出的权重)保持不变。
这样一来,当数据从高维映射到低维时,虽然全局的几何形状(比如那块布被揉成了球)被丢弃了,但局部的“谁和谁挨得近、谁由谁构成”的关系却被完美地保留了下来。这对于后续的聚类、可视化或分类任务来说,往往比保留全局的欧氏距离更有价值。接下来,我们就一步步拆解这个思想,并用代码把它实现出来。
2. 庖丁解牛:三步拆解LLE算法核心
理解了LLE的比喻和思想,我们把它落实到具体的数学和算法步骤上。整个过程就像一套精心设计的“降维体操”,每一步都有明确的目标。
2.1 第一步:为每个点找到它的“小圈子”(K近邻)
这是所有后续步骤的基础。在高维数据集中,对于每一个数据点 ( x_i ),我们需要找到离它最近的 ( k ) 个点。这里的“近”通常使用欧氏距离来衡量。这一步看似简单,但有个关键点:k值的选择。
- k太小(比如k=2):每个点只和最近的两个点有关系,重建的局部线性关系非常脆弱,容易受到噪声干扰,最终降维结果可能变得支离破碎。
- k太大:点的“邻居圈”变得很大,会引入不属于同一局部流形的点,强行用它们进行线性表示会模糊真正的局部结构,降维效果会趋向于保留全局特性,失去LLE的局部优势。
在实际操作中,k是一个需要调试的超参数。一个经验法则是,k应该大于你想要降维到的目标维度d,但也不能大得离谱。我常用的一个快速测试方法是,先用一个较小的k(如5-10)跑一下,观察降维可视化结果是否连贯,再逐步调整。
2.2 第二步:计算“小圈子”内的线性情谊(重建权重)
找到邻居后,LLE做出了一个非常强的假设:每个点都可以用它邻居们的线性组合来很好地重建。用数学公式表示就是:
对于点 ( x_i ) 和它的k个邻居 ( x_j ) (其中 ( j \in N(i) )),我们寻找一组权重系数 ( W_{ij} ),使得: [ x_i \approx \sum_{j \in N(i)} W_{ij} x_j ] 并且权重需要满足归一化条件:( \sum_{j} W_{ij} = 1 )。这个条件很重要,它保证了重建具有平移不变性。
如何找到这组最优的 ( W_{ij} ) 呢?我们最小化重建误差: [ \epsilon_i = \left| x_


1万+

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



