与等度量映射(Isomap)相同,局部线性嵌入(Locally Linear Embedding, 简称LLE)也是流形学习算法中的一员,是一种非线性的降维方法。LLE在2000年被发明出来,并发表在Sience期刊上,截止2019年5月,被引量高达1.3万。它与Isomap试图保持样本间的距离不同,LLE算法试图保持的是邻域内样本之间的线性关系。如下图所示:
如图,高维空间中样本 x i x_i xi可由它的近邻样本 x j \boldsymbol x_j xj, x k \boldsymbol x_k xk, x l \boldsymbol x_l xl通过线性组合而重构出来,即
x i = w i j x j + w i k x k + w i l x l ( 1 ) \boldsymbol x_i=w_{ij}\boldsymbol x_j+w_{ik}\boldsymbol x_k+w_{il}\boldsymbol x_l(1) xi=wijxj+wikxk+wilxl(1)
LLE算法希望式(1)中的关系在低维空间中得以保持。
LLE先为每个样本 x i x_i xi找近邻下标集合 Q i Q_i Qi,然后计算基于 Q i Q_i Qi中的样本点对 x i x_i xi进行线性重构的系数 w i w_i wi,优化目标为重构误差最小:
min W ∑ i = 1 m ∥ x i − ∑ j ∈ Q i w i j x j ∥ 2 2 ( 2 ) s . t . ∑ j ∈ Q i w i j = 1 \begin{aligned} \min\limits_{\boldsymbol W}&\sum^m_{i=1}\| \boldsymbol x_i-\sum_{j \in Q_i}w_{ij}\boldsymbol x_j \|^2_2(2)\\ s.t.&\sum_{j \in Q_i}w_{ij}=1 \end{aligned} Wmins.t.i=1∑m∥xi−j∈Qi∑wijxj∥22(2)j∈Qi∑wij=1
转换为
∑ i = 1 m ∥ x i − ∑ j ∈ Q i w i j x j ∥ 2 2 = ∑ i = 1 m ∥ ∑ j ∈ Q i w i j x i − ∑ j ∈ Q i w i j x j ∥ 2 2 = ∑ i = 1 m ∥ ∑ j ∈ Q i w i j ( x i − x j ) ∥ 2 2 = ∑ i = 1 m W i T ( x i − x j ) ( x i − x j ) T W i = ∑ i = 1 m W i T C i W i \begin{aligned} \sum^m_{i=1}\| \boldsymbol x_i-\sum_{j \in Q_i}w_{ij}\boldsymbol x_j \|^2_2 &=\sum^m_{i=1}\| \sum_{j \in Q_i}w_{ij}\boldsymbol x_i- \sum_{j \in Q_i}w_{ij}\boldsymbol x_j \|^2_2 \\ &=\sum^m_{i=1}\| \sum_{j \in Q_i}w_{ij}(\boldsymbol x_i- \boldsymbol x_j) \|^2_2\\ &=\sum^m_{i=1}\boldsymbol W^T_i(\boldsymbol x_i-\boldsymbol x_j)(\boldsymbol x_i-\boldsymbol x_j)^T\boldsymbol W_i\\ &=\sum^m_{i=1}\boldsymbol W^T_i\boldsymbol C_i\boldsymbol W_i \end{aligned} i=1∑m∥xi−j∈Qi∑wijxj∥22=i=1∑m∥j∈Qi∑wijxi−j∈Qi∑wijxj∥22=i=1∑m∥j∈Qi∑wij(xi−xj)∥22=i=1∑mWiT(xi−xj)(xi−xj)TWi=i=1∑mWiTCiWi
其中, W i = ( w i 1 , w i 2 , ⋅ ⋅ ⋅ , w i k ) T \boldsymbol W_i=(w_{i1},w_{i2},\cdot\cdot\cdot,w_{ik})^T Wi=(wi1,wi2,⋅⋅⋅,wik)T, k k k是 Q i Q_i Qi集合的长度, C i = ( x i − x j ) ( x i − x j ) T \boldsymbol C_i=(\boldsymbol x_i-\boldsymbol x_j)(\boldsymbol x_i-\boldsymbol x_j)^T Ci=(xi−xj)(xi−xj)T, j ∈ Q i j \in Q_i j∈Qi。
∑ j ∈ Q i w i j = W i T 1 k = 1 \sum_{j\in Q_i}w_{ij}=\boldsymbol W_i^T\boldsymbol 1_k=1 j∈Qi∑wij=WiT1k=1
其中, 1 k \boldsymbol 1_k 1k为k维全1向量。
运用拉格朗日乘子法可得,
J ( W ) = ∑ i = 1 m W i T C i W i + λ ( W i T 1 k − 1 ) ∂ J ( W ) ∂ W i = 2 C i W i + λ 1 k \begin{aligned} J(\boldsymbol W)&=\sum^m_{i=1}\boldsymbol W^T_i\boldsymbol C_i\boldsymbol W_i+\lambda(\boldsymbol W_i^T\boldsymbol 1_k-1)\\ \cfrac{\partial J(\boldsymbol W)}{\partial \boldsymbol W_i} &=2\boldsymbol C_i\boldsymbol W_i+\lambda\boldsymbol 1_k \end{aligned} J(W)∂Wi∂J(W)=i=1∑mWiTCiWi+λ(WiT1k−1)=2CiWi+λ1k
令 ∂ J ( W ) ∂ W i = 0 \cfrac{\partial J(\boldsymbol W)}{\partial \boldsymbol W_i}=0 ∂Wi∂J(W)=0,故
W i = − 1 2 λ C i − 1 1 k W i = λ C i − 1 1 k \begin{aligned} \boldsymbol W_i&=-\cfrac{1}{2}\lambda\boldsymbol C_i^{-1}\boldsymbol 1_k\\ \boldsymbol W_i&=\lambda\boldsymbol C_i^{-1}\boldsymbol 1_k\\ \end{aligned} WiWi=−21λCi−11k=λCi−11k
其中,由于 λ \lambda λ原本为一个常数,加入 − 1 2 这 个 放 缩 因 子 -\cfrac{1}{2}这个放缩因子 −21这个放缩因子并无影响。利用 W i T 1 k = 1 \boldsymbol W^T_i\boldsymbol 1_k=1 WiT1k=1,对 W i \boldsymbol W_i Wi归一化,可得
W i = C i − 1 1 k 1 k C i − 1 1 k \boldsymbol W_i=\cfrac{\boldsymbol C^{-1}_i\boldsymbol 1_k}{\boldsymbol 1_k\boldsymbol C^{-1}_i\boldsymbol 1_k} Wi=1kCi−11kCi−11k
在得到高维空间样本点之间的关系之后,按照LLE的算法思想(在低维空间中保持 w i w_i wi不变),于是 x i x_i xi降维后的样本 z i z_i zi应达到的优化目标如下式(2):
min Z ∑ i = 1 m ∥ z i − ∑ j ∈ Q i w i j z j ∥ 2 2 ( 3 ) \min\limits_{\boldsymbol Z}\sum^m_{i=1}\| \boldsymbol z_i-\sum_{j \in Q_i}w_{ij}\boldsymbol z_j \|^2_2(3) Zmini=1∑m∥zi−j∈Qi∑wijzj∥22(3)
与求解 W W W一样的过程:
min Z ∑ i = 1 m ∥ z i − ∑ j ∈ Q i w i j z j ∥ 2 2 = ∑ i = 1 m ∥ Z I i − Z W i ∥ 2 2 = ∑ i = 1 m ∥ Z ( I i − W i ) ∥ 2 2 = ∑ i = 1 m ( Z ( I i − W i ) ) T Z ( I i − W i ) = ∑ i = 1 m ( I i − W i ) T Z T Z ( I i − W i ) = t r ( ( I − W ) T Z T Z ( I − W ) ) = t r ( Z ( I − W ) ( I − W ) T Z T ) = t r ( Z M Z T ) \begin{aligned} \min\limits_{\boldsymbol Z}\sum^m_{i=1}\| \boldsymbol z_i-\sum_{j \in Q_i}w_{ij}\boldsymbol z_j \|^2_2&=\sum^m_{i=1}\|\boldsymbol Z\boldsymbol I_i-\boldsymbol Z\boldsymbol W_i\|^2_2\\ &=\sum^m_{i=1}\|\boldsymbol Z(\boldsymbol I_i-\boldsymbol W_i)\|^2_2\\ &=\sum^m_{i=1}(\boldsymbol Z(\boldsymbol I_i-\boldsymbol W_i))^T\boldsymbol Z(\boldsymbol I_i-\boldsymbol W_i)\\ &=\sum^m_{i=1}(\boldsymbol I_i-\boldsymbol W_i)^T\boldsymbol Z^T\boldsymbol Z(\boldsymbol I_i-\boldsymbol W_i)\\ &=tr((\boldsymbol I-\boldsymbol W)^T\boldsymbol Z^T\boldsymbol Z(\boldsymbol I-\boldsymbol W))\\ &=tr(\boldsymbol Z(\boldsymbol I-\boldsymbol W)(\boldsymbol I-\boldsymbol W)^T\boldsymbol Z^T)\\ &=tr(\boldsymbol Z\boldsymbol M\boldsymbol Z^T) \end{aligned} Zmini=1∑m∥zi−j∈Qi∑wijzj∥22=i=1∑m∥ZIi−ZWi∥22=i=1∑m∥Z(Ii−Wi)∥22=i=1∑m(Z(Ii−Wi))TZ(Ii−Wi)=i=1∑m(Ii−Wi)TZTZ(Ii−Wi)=tr((I−W)TZTZ(I−W))=tr(Z(I−W)(I−W)TZT)=tr(ZMZT)
其中, M = ( I − W ) ( I − W ) T \boldsymbol M=(\boldsymbol I-\boldsymbol W)(\boldsymbol I-\boldsymbol W)^T M=(I−W)(I−W)T。
再加上约束条件 Z T Z = I \boldsymbol Z^T\boldsymbol Z=\boldsymbol I ZTZ=I,保证得到标准化(标准正交空间)的低维数据。
式(2)重写为:
min Z t r ( Z M Z T ) ( 4 ) s . t . Z T Z = I \begin{aligned} &\min\limits_{\boldsymbol Z}tr(\boldsymbol Z\boldsymbol M\boldsymbol Z^T)(4) \\ &s.t.\boldsymbol Z^T\boldsymbol Z=\boldsymbol I \end{aligned} Zmintr(ZMZT)(4)s.t.ZTZ=I
式(3)可以通过特征值分解求解: M M M最小的 d ′ d' d′个特征值对应的特征向量组成的矩阵即为 Z T \boldsymbol Z^T ZT。
输入:样本集 D = { x 1 , x 2 , ⋅ ⋅ ⋅ , x m } D=\{\boldsymbol x_1,\boldsymbol x_2,\cdot\cdot\cdot,\boldsymbol x_m\} D={x1,x2,⋅⋅⋅,xm};近邻参数 k k k;低维空间维数 d ′ d' d′。
步骤:
1:for i=1,2,…,m do
2: 确定 x i \boldsymbol x_i xi的 k k k近邻;
3: 从式(2)求得 w i j w_{ij} wij, j ∈ Q i j \in Q_i j∈Qi;
4: 对于 j ∉ Q i j \notin Q_i j∈/Qi,令 w i j = 0 w_{ij}=0 wij=0;
5:end for
6:从式(3)得到 M \boldsymbol M M;
7:对 M \boldsymbol M M进行特征值分解;
8:return M \boldsymbol M M的最小 d ′ d' d′个特征值对应的特征向量
输出:样本集 D D D在低维空间的投影 Z = { z 1 , z 2 , ⋅ ⋅ ⋅ , z m } Z=\{ \boldsymbol z_1,\boldsymbol z_2,\cdot\cdot\cdot,\boldsymbol z_m \} Z={z1,z2,⋅⋅⋅,zm}。
"""
LLE : Locally Linear Embedding
Refercences :
[1]周志华.机器学习[M].清华大学出版社,2016:425.
[2]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html
Author : Ggmatch
Date : 2019/5/14
"""
from time import time
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter
from sklearn import manifold, datasets
# 制造样本
n_points = 1000
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
fig = plt.figure(figsize=(6, 4)) #画板
gs = fig.add_gridspec(1,2) #共2副子图
ax1 = fig.add_subplot(gs[0,0], projection='3d') #第一幅子图表示原始样本分布
ax1.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
# LLE降维
n_components = 2
t0 = time() #计时开始
Y = manifold.LocallyLinearEmbedding(n_neighbors, n_components).fit_transform(X)
t1 = time() #计时结束
ax2 = fig.add_subplot(gs[0,1])
ax2.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral) #第2副子图表示降维后样本分布
ax2.set_title("LLE (%.2g sec)" % (t1 - t0))
ax2.xaxis.set_major_formatter(NullFormatter())
ax2.yaxis.set_major_formatter(NullFormatter())
plt.show()
[1]Roweis S T, Saul L K. Nonlinear dimensionality reduction by locally linear embedding[J]. science, 2000, 290(5500): 2323-2326.
[2]周志华.机器学习[M].清华大学出版社,2016:425.
[3]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html