LLE算法实现与sklearn实现

在pyhton的机器学习库sklearn中,LLE等降维算法可以直接调用,在本次大作业中,根据LLE的推导过程编写算法实现了LLE,与mainfold自带的LLE进行对比。由于后面的实验中都是直接调用LocallyLinearEmbedding,所以用大量篇幅介绍了LocallyLinearEmbedding的参数含义以及调参方法。

图2-5 LLE算法推导实现与sklearn实现对比

由图2-5可知,自行编写的LLE降维算法在降维之后的效果略逊于sklearn中提供的接口,后面的实验中都是直接调用LocallyLinearEmbedding再调参,以下给出自行实现LLE算法的步骤以及LocallyLinearEmbedding参数意义。

My_LLE算法流程:

step1:利用KNN找到每个数据最近的K个近邻点

step2:求出权重系数W

step3:得到M

step4:返回最小的d’个特征值所对应发的特征向量

sklearn调用参数含义:

Mainfold.LocallyLinearEmbedding(n_neighbors,n_components,method)[4][11]

LLE算法LocallyLinearEmbedding使用起来并不复杂,一般来说,需要调参的参数只有样本近邻的个数即n_neighbors的值。

  1. n_neighbors:即k近邻算法时选取的最近邻个数,默认是5。 n_neighbors个数越大,则建立样本局部关系的时间会越大,也就意味着算法的复杂度会增加。当然n_neighbors个数越大,则降维后样本的局部关系会保持的更好。如果算法的运行时间可以接受,我们可以采用一个比较大的n_neighbors。但是n_neighbors取值太大,不同颜色的数据开始相互重叠,说明选取的近邻个数太多则不能反映数据的流形信息。n_neighbors参数变化对降维的影响如图2-6所示。
  2. n_components:即我们降维到的维数。可视化数据一般可以选择2-5维。
  3. method:即LLE的具体算法。LocallyLinearEmbedding支持4种LLE算法,分别是'standard'对应我们标准的LLE算法,'hessian'对应HLLE算法,'modified'对应MLLE算法,‘ltsa’对应LTSA算法。默认是'standard'。 
  4. neighbors_algorithm:这个是k近邻的搜索方法,和KNN算法的使用的搜索方法一样。对于这个参数,一共有4种可选输入,‘brute’对应第一种蛮力实现,‘kd_tree’对应第二种KD树实现,‘ball_tree’对应第三种的球树实现,‘auto’则会在上面三种算法中做权衡,选择一个拟合最好的最优算法。

图2-6.LLE降维在不同k值的二维分布结果。n_neighbors=k

可以看出,当k取值较小(k=1、2、3、4)时,因为当近邻个数太少时,难以很好地反映数据的拓扑关系,LLE算法不能将数据很好地映射到低维空间,当k值取值适合,比如k=15,可见不同颜色的数据能很好地被分开并保持适合的间距。但若k取值太大,如k=100,999,不同颜色的数据开始相互重叠,说明选取的近邻个数太多则不能反映数据的流形信息。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
LLE(Locally Linear Embedding,局部线性嵌入)是一种降维算法,用于在保持数据局部结构的同时降低数据维度。下面我将用300字中文来介绍Python中的LLE算法实现。 在Python中,Scikit-learn是一个常用的机器学习库,它提供了LLE算法实现。首先,我们需要安装Scikit-learn库。可以通过pip install scikit-learn命令来安装。 接下来,我们可以导入所需的类和函数: ```python from sklearn.manifold import LocallyLinearEmbedding from sklearn.datasets import make_swiss_roll ``` 然后,我们可以使用`make_swiss_roll`函数生成一个样本数据集: ```python X, _ = make_swiss_roll(n_samples=1000, random_state=0) ``` 在生成数据之后,我们可以创建一个`LocallyLinearEmbedding`对象: ```python lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10) ``` 在这个例子中,我们选择将数据降低到2个维度,并设置每个样本的10个最近邻居。 接下来,我们可以使用`fit_transform`函数对数据进行降维变换: ```python X_transformed = lle.fit_transform(X) ``` 最后,我们可以将降维后的数据进行可视化: ```python import matplotlib.pyplot as plt plt.scatter(X_transformed[:, 0], X_transformed[:, 1], c=X[:, 0], cmap=plt.cm.Spectral) plt.show() ``` 代码中的最后两行将在二维平面上绘制样本点,并按照原始数据的第一维度进行着色。 通过以上步骤,我们可以使用Python中的Scikit-learn库来实现LLE降维算法。希望这样的回答能够帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上园村蜻蜓队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值