sklearn与机器学习系列专题之降维(六)一文弄懂LLE特征筛选&降维

10 篇文章 1 订阅
9 篇文章 1 订阅

1.LLE算法简介

局部线性嵌入算法(Locally Linear Embedding,LLE)和上一篇专题Isomap都属于流形学习方法。与Isomap不同的是,LLE在降维中,试图保持邻域内样本之间的线性关系,使得样本之间的映射坐标能够在低维空间中得以保持,如下图所示。
在这里插入图片描述
以下图为例,使用LLE将三维数据(B)映射到二维(C)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。
在这里插入图片描述

2.LLE算法原理

再次本着鲁迅先生的“拿来主义”,上周志华老师既高大上又简洁明了的推导过程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.LLE优缺点

优点:

(1)LLE 算法能够突破PCA在非线性数据的局限,可以学习任意维的局部线性低维流形,广泛地应用在处理分析非线性信号。

在这里插入图片描述
(2)LLE算法可以很好表达数据的内在流形结构,能够保留数据的本质特征,可以很好得保留原有数据特征,这点在故障诊断中有重要的意义。

(3)LLE算法本身参数的选择很少,计算量较小,故能更好的进行特征参数优化,这为故障检测和故障诊断打下坚实的基础。

缺点:
(1)LLE所学习的流形只能是不闭合的,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间中,且不能保持原有的数据流形。在处理数据时,首先假设数据不是分布在闭合的球面或者椭球面上;

(2)该算法的局部邻域参数 k、嵌入维数 d 和信号中的噪声,会影响高维空间的降维效果;

(3)LLE 算法需要进行稠密采样;

(4)LLE 无法处理等距流形等。

4.python实战LLE

不知不觉,降维专题就要接近尾声了,在接下来的几个专题里,小编将通过几个简短的实战代码,对比不同的降维算法。

在这个专题中,借助实战项目,比较不同的流行学习算法。

from collections import OrderedDict
from functools import partial
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

Axes3D

n_points = 1000
X, color = datasets.make_s_curve(n_points, random_state=0)
n_neighbors = 10
n_components = 2

# 创建图层
fig = plt.figure(figsize=(15, 8))
fig.suptitle("Manifold Learning with %i points, %i neighbors"
             % (1000, n_neighbors), fontsize=14)

# 添加三维散点图
ax = fig.add_subplot(251, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
ax.view_init(4, -72)

# 创建不同的流行学习方法
LLE = partial(manifold.LocallyLinearEmbedding,
              n_neighbors, n_components, eigen_solver='auto')

methods = OrderedDict()
methods['LLE'] = LLE(method='standard')
methods['LTSA'] = LLE(method='ltsa')
methods['Hessian LLE'] = LLE(method='hessian')
methods['Modified LLE'] = LLE(method='modified')
methods['Isomap'] = manifold.Isomap(n_neighbors, n_components)
methods['MDS'] = manifold.MDS(n_components, max_iter=100, n_init=1)
methods['SE'] = manifold.SpectralEmbedding(n_components=n_components,
                                           n_neighbors=n_neighbors)
methods['t-SNE'] = manifold.TSNE(n_components=n_components, init='pca',
                                 random_state=0)

# 展示拟合结果
for i, (label, method) in enumerate(methods.items()):
    t0 = time()
    Y = method.fit_transform(X)
    t1 = time()
    print("%s: %.2g sec" % (label, t1 - t0))
    ax = fig.add_subplot(2, 5, 2 + i + (i > 3))
    ax.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
    ax.set_title("%s (%.2g sec)" % (label, t1 - t0))
    ax.xaxis.set_major_formatter(NullFormatter())
    ax.yaxis.set_major_formatter(NullFormatter())
    ax.axis('tight')

plt.show()

降维前为一个在三维空间中的S形曲线,采用不同的降维方法后,程序运行时间和降维后的二维图形均如下图所示。
在这里插入图片描述

5.下篇预告

sklearn与机器学习系列专题之降维(七)一文弄懂t-SNE特征筛选&降维
敬请期待!

欢迎关注公众号“码点联盟”,不定期分享机器学习、深度学习干货,及各种资料大礼包!
另外,这是一个由一线互联网大厂算法工程师及双985研究生创建的公众号,后续会经常分享各类实用机器学习算法技术文章,欢迎交流讨论!在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值