局部线性嵌入(Locally Linear Embedding,简称LLE)

局部线性嵌入(Locally Linear Embedding,简称LLE)

1 绪论

Isomap试图保持邻域内样本之间的距离不同,局部线性嵌入(Locally Linear Embedding,LLE)试图保持邻域内样本之间的线性关系。其根本思想可以概括为局部线性重构。

假定样本点 x i x_i xi的坐标能够通过它的邻域样本 x j , x k , x l x_j,x_k,x_l xj,xk,xl进行线性组合而重构出来,即: x i = w i , j x j + w i , k x k + w i , l x l x_i=w_{i,j}x_j+w_{i,k}x_k+w_{i,l}x_l xi=wi,jxj+wi,kxk+wi,lxl。LLE算法希望这种关系在低维空间中得到保持。

2 LLE算法解析

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 1 , w 2 … w m ∑ i = 1 m ∥ x i − ∑ j ∈ Q i w i j x i ∥ 2 2 \min_{w_1,w_2…w_m}\sum_{i=1}^m\begin{Vmatrix}x_i-\sum_{j\in{Q_i}}w_{ij}x_i\end{Vmatrix}_2^2 w1,w2wmmini=1mxijQiwijxi22
s . t .   ∑ j ∈ Q i w i j = 1 s.t. \ \sum_{j\in{Q_i}}w_{ij}=1 s.t. jQiwij=1
其中 x i x_i xi x j x_j xj为已知,令 C j k = ( x i − x j ) T ( x i − x k ) C_jk=(x_i-x_j)^T(x_i-x_k) Cjk=(xixj)T(xixk) w i j w_{ij} wij有闭式解
w i j = ∑ k ∈ Q i C j k − 1 ∑ l , s ∈ Q i C l s − 1 w_{ij}=\frac{\sum_{k\in{Q_i}}C_{jk}^{-1}}{\sum_{{l,s}\in{Q_i}}C_{ls}^{-1}} wij=l,sQiCls1kQiCjk1
其中 C j k C_{jk} Cjk刻画了 x k x_k xk x i x_i xi的差向量,与 x j x_j xj x i x_i xi的差向量的内积。 w i j w_{ij} wij刻画了这些内积中,与 x j x_j xj相关的内积的比例。

LLE在低维空间中保持 w i w_i wi不变,于是 x i x_i xi对应的低维空间坐标 z i z_i zi可通过下式求解:
min ⁡ z 1 , z 2 … z m ∑ i = 1 m ∥ z i − ∑ j ∈ Q i w i j z i ∥ 2 2 \min_{z_1,z_2…z_m}\sum_{i=1}^m\begin{Vmatrix}z_i-\sum_{j\in{Q_i}}w_{ij}z_i\end{Vmatrix}_2^2 z1,z2zmmini=1mzijQiwijzi22
Z = ( z 1 , z 2 , … , z m ) ∈ R d ′ × m , W i j = w i j Z=(z_1,z_2,…,z_m)\in{\mathbb{R}^{d'×m}},W_{ij}=w_{ij} Z=(z1,z2,,zm)Rd×m,Wij=wij
M = ( I − W ) T ( I − W ) M=(I-W)^T(I-W) M=(IW)T(IW)
此式可重写为:
min ⁡ Z t r ( Z M Z T ) \min_Ztr(ZMZ^T) Zmintr(ZMZT)
s . t .   Z Z T = I s.t. \ ZZ^T=I s.t. ZZT=I
则可通过特征值分解求解: M M M最小的 d ′ d' d个特征值对应的特征向量组成的矩阵 Z T Z^T ZT

3 LLE伪码说明

4 以瑞士卷例子来展示LLE算法

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as p3d
from sklearn import datasets, manifold
from sklearn.datasets import make_swiss_roll

def test_swiss_roll(n_samples=5000):
	X, t = make_swiss_roll(n_samples=n_samples, noise=0.2, random_state=42) # X为坐标 t为颜色
	# figure1=plt.figure()
	axes = [-11.5, 14, -2, 23, -12, 15]	
	fig = plt.figure()
	ax = fig.add_subplot(121, projection='3d')
	ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=t, cmap=plt.cm.hot)
	ax.view_init(10, 60)
	ax.set_xlabel("$x$", fontsize=18)
	ax.set_ylabel("$y$", fontsize=18)
	ax.set_zlabel("$z$", fontsize=18)
	ax.set_xlim(axes[0:2])
	ax.set_ylim(axes[2:4])
	ax.set_zlim(axes[4:6])
	plt.title('3D swiss roll')
	ax2 = fig.add_subplot(122)
	Z = manifold.LocallyLinearEmbedding(n_components=2).fit_transform(X)
	ax2.scatter(Z[:, 0], Z[:, 1], c=t, cmap=plt.cm.hot)
	plt.title('sklearn LLE')
	plt.show()

if __name__ == '__main__':
	test_swiss_roll()

程序运行可见:https://aistudio.baidu.com/aistudio/projectdetail/2507328

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
局部线性嵌入Locally Linear EmbeddingLLE)是一种非线性降维算法,用于从高维数据中提取其低维流形结构。它通过保持数据点之间的线性关系来实现降维,而不是简单地保持数据的距离关系。 LLE的基本思想是假设高维数据的低维表示可以通过将每个数据点与其邻居点进行线性组合来构建。具体来说,LLE将每个数据点表示为其邻居点的线性组合,使得该点与其邻居点之间的欧氏距离达到最小。然后,通过在低维空间中重建每个数据点的线性组合关系,LLE可以实现数据降维并保持其局部结构。 LLE算法包括以下步骤: 1. 寻找每个数据点的邻居点:根据设定的邻居数量,通过计算距离选择每个数据点的最近邻居。 2. 重建每个数据点的线性组合关系:对于每个数据点,根据其邻居点的权重,通过最小化重建误差来确定每个数据点的线性组合关系。 3. 构建低维表示:通过求解一个关于低维表示的优化问题,将高维数据映射到低维空间中。 LLE的优点是能够保持数据的局部结构,并且对噪声和非线性变换具有较好的鲁棒性。然而,LLE也存在一些缺点,如对邻居数量和权重的选择敏感,容易产生过拟合问题,并且计算复杂度较高。 总之,局部线性嵌入是一种通过保持数据点之间的线性关系来实现降维的非线性降维算法。它是一种有力的工具,可用于理解和分析高维数据集的结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值