所谓LLE即”local linear embedding”的降维算法,在处理所谓的流形降维的时候,效果比PCA要好很多。下面介绍具体实现方法。
首先,所谓流形,我脑海里最直观的印象就是Swiss roll,我吃的时候喜欢把它整个摊开成一张饼再吃,其实这个过程就实现了对瑞士卷的降维操作,即从三维降到了两维。降维前,我们看到相邻的卷层之间看着距离很近,但其实摊开成饼状后才发现其实距离很远,所以如果不进行降维操作,而是直接根据近邻原则去判断相似性其实是不准确的。
LLE原理
LLE的原理其实是这样的:
- 所谓局部线性,就是认为在整个数据集的某小范围内,数据是线性的,就比如虽然地球是圆的,但我们还是可以认为我们的篮球场是个平面;而这个“小范围”,最直接的办法就是k-近邻原则。这个“近邻”的判断也可以是不同的依据:比如欧氏距离,测地距离等。
- 既然是线性,那么对每个数据点 (D维数据,即 的列向量),可以用其k近邻的数据点的线性组合来表示,即
- 。其中, 是 的列向量, 是 的第 行, 是 的第 个近邻点。
- 通过使loss function最小化:
得到权重系数 ,一共 个数据点,对应 列 。 - 接下来是LLE中又一个假设:即认为将原始数据从D维降到d维后, ,其依旧可以表示为其k近邻的线性组合,且组合系数不变,即 ,再一次通过最小化loss function: 得到降维后的数据。
算法推导
step 1:
运用k近邻算法得到每个数据的k近邻点:
step 2: 求解权重系数矩阵
即求解:
在推导之前,我们首先统一下数据的矩阵表达形式
输入:
权重:
则可逐步推导出权重系数矩阵的表达式:
将看做局部协方差矩阵, 那么:
运用拉格朗日乘子法:
求导:
就上述表达式而言,局部协方差矩阵
是个 的矩阵,其分母其实是 的逆矩阵的所有元素之和,而其分子是 的逆矩阵对行求和后得到的列向量。
step 3: 映射到低维空间
即求解:
低维空间向量:
首先,用一个 的稀疏矩阵(sparse matrix) 来表示 :
对 的近邻点 : ;
否则:
因此:
其中,
是 方阵的第 列。所以
由矩阵论可知:对矩阵 ,有
所以:
再一次拉格朗日乘子法:
求导:
即
可见Y其实是M的特征向量构成的矩阵,为了将数据降到 维,我们只需要取M的最小的 个非零特征值对应的特征向量,而一般第一个最小的特征值接近0,我们将其舍弃,取前 个特征值对应的特征向量。
结果演示
借助matlab强大的矩阵运算能力对swiss roll数据集进行了LLE降维。原始的数据如下:
Fig.1. Swill roll数据集。
通过LLE降维后的结果如下:
Fig. 2. LLE降维在不同k值的二维分布结果。k代表在k近邻算法时选取的最近邻个数。
可以看出,当k取值较小(k=4)时,算法不能将数据很好地映射到低维空间,因为当近邻个数太少时,不能很好地反映数据的拓扑结构。当k值取值适合,这里选取的是k=15,可见不同颜色的数据能很好地被分开并保持适合的相对距离。但若k取值太大,如k=50,不同颜色的数据开始相互重叠,说明选取的近邻个数太多则不能反映数据的流形信息。