LLE

局部线性嵌入,Locally Linear Embedding(LLE)是另一个功能强大的非线性降维(nonlinear dimensional reduction,NLDR)技术。它是一个流形学习技术,并不基于投影。简单地说,LLE工作的方式是:首先衡量每个训练实例与它最近的邻居们(closest neighbors,c.n.)的线性相关程度,然后在这些局部关系可以得到最好地保存的情况下,寻找一个低维的表示训练集的方式。这个方法在展开弯曲的流形时非常有用,特别是数据集中没有太多的噪点时。

下面的代码使用sk-learn的LocallyLinearEmbedding类将一个瑞士卷展开:

from sklearn.manifold import LocallyLinearEmbedding

lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)
X_reduced = lle.fit_transform(X)

生成的2D数据集结果如下图所示:

我们可以看到,瑞士卷被完全地展开了,并且实例之间的距离非常好地在局部保持了。不过,在更大的规模层面上,距离并没有保持好:左边部分的瑞士卷是伸展的,而右边的部分是紧缩的。尽管如此,LLE在流形建模中仍表现的非常好。

LLE的具体工作方式为:对于每条训练实例x(i),算法识别它的k个最邻近邻居(在上面的代码中k=10),然后尝试用它的这些邻居以一个线性函数的方式重构x(i)。更具体地说,它会找到一组权重wi,j使得x(i)与∑wi,jx(j)(其中j 初始为1,累加到第m)之间的平方距离尽可能的小,如果x(j)并不是x(i)的最近k个邻居之一,则假设wi,j = 0。所以LLE的第一步是下面的带约束优化问题,这里W是权重矩阵,包含所有的权重wi,j。第二个约束是对每个训练实例x(i)的权重们一个简单的标准化约束:

在这个步骤完成后,权重矩阵Wˆ(包含权重wˆi,j)便对训练实例之间的局部线性关系进行了编码。第二个步骤就是将训练实例映射到一个d维的空间中(d < n),同时尽可能地保留这些局部关系。如果z(i)x(i)在这个d维空间里的像(image),则我们会想要z(i)与∑wˆi,jz(j) (其中j初始为1,累加到第m)之间的平方距离尽可能的小。这个想法便产生了下一个带约束的优化问题(如下公式所示)。它与第一个步骤非常像,但是并不是固定实例然后找到最优的权重,而是做相反的事情:保持权重固定,在低维空间中找到实例的image的最优位置。需要主要的是,这里Z是包含了所有z(i)的矩阵。

sk-learn的LLE实现,它的计算复杂度,找到k个最近邻居的复杂度是O(m log(m)n log(k)),优化权重的复杂度是O(mnk3),以及构造低维空间表示的复杂度是O(dm2)。可惜的是,在最后一个公式中m2的会让这个算法对超大数据集的扩展十分糟糕。

其他降维技术

还有很多种其他的降维技术,其中部分有在sk-learn中提供,下面是最热门的几个:

  • 随机投影

    • 如它名称所示,使用一个随机的线性投影,将数据投影到一个低维空间中。这个听起来很奇怪,不过结果证明,这种随机投影实际上几乎可以很好的保留距离。它的降维质量取决于数据的条目以及目标label的维度,而却不是初始的维度。可以查看sklearn.random_projection 包获取更多信息
  • 多维缩放(Multidimensional Scaling,MDS)
    • 在尽量保持实例之间距离的情况下减少维度
  • Isomap
    • 通过将每个实例与它的最近邻居连接起来,而创建一个图。然后在尽量保持实例之间测地距离(geodesic distances)的情况下减少维度
  • t-分布式随机邻居嵌入(t-Distributed Stochastic Neighbor Embedding(t-SNE)
    • 在保持相似实例接近而非相似实例远离的情况下减少维度。它大部分用于数据可视化,特别是在可视化高维空间中的实例簇(clusters of instances)时(例如,将MNIST图片在2D上进行可视化)。
  • 线性判别分析(Linear Discriminant Analysi,LDA)
    • 它是一个分类算法,不过在训练时,它会学习最能分辨不同类别的判别轴(discriminative axes),然后这些轴可以被用于定义一个超平面,数据之后便可以投影到这个超平面上。这个方法的好处是投影会保持不同类别尽可能的远离,所以LDA是一个很好的降维技术,它可以用于在执行另外的分类算法(如SVM)前进行降维。

下图展示了其中几种技术:

降维(三)LLE与其他降维技术的更多相关文章

  1. 【机器学习基础】无监督学习(2)——降维之LLE和TSNE

    在上一节介绍了一种最常见的降维方法PCA,本节介绍另一种降维方法LLE,本来打算对于其他降维算法一并进行一个简介,不过既然看到这里了,就对这些算法做一个相对详细的学习吧. 0.流形学习简介 在前面PC ...

  2. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  3. 三种LVS负载均衡技术的优缺点----负载均衡调度算法

    三种LVS负载均衡技术的优缺点归纳以下表: VS/NATVS/TUNVS/DR 服务器操作系统任意支持隧道多数(支持Non-arp) 服务器网络私有网络局域网/广域网局域网 服务器数目(100M网络) ...

  4. 三篇文章了解 TiDB 技术内幕 —— 谈调度

    任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都 ...

  5. 三篇文章了解 TiDB 技术内幕——说计算

    在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...

  6. 三篇文章了解 TiDB 技术内幕 - 说存储(转)

    引言 数据库.操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石.其中数据库更靠近应用层,是很多业务的支撑.这一领域经过了几十年的发展,不断的有新的进展. 很多人用过数据库,但是很少有人实现 ...

  7. ML: 降维算法-LLE

    局部线性嵌入 (Locally linear embedding)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 .LLE可以说是流形学习方法最经典的工作之一.很多后续的流形学习. ...

  8. 【ASP.NET Identity系列教程(三)】Identity高级技术

    注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  9. 面向侧面的程序设计AOP-------《三》.Net平台AOP技术概览

    本文转载自张逸:晴窗笔记 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上, ...

  10. 持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接

    在EJB 2.x中.EJB有3种类型的Bean.各自是会话Bean(Session Bean).消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean). 随 ...

随机推荐

  1. 5.k8s Service四层负载:服务端口暴露

    题目一:暴露服务service 设置配置环境: [candidate@node-1] $ kubectl config use-context k8s Task 请重新配置现有的 deployment ...

  2. 运行程序时报go: cannot find main module, but found .git/config in

    编写单元测试,运行时报下面的错误 haima@haima-PC:/media/haima/34E401CC64DD0E28/site/go/src/haimait/learn/base/cheshi0 ...

  3. Django性能之道:缓存应用与优化实战

    title: Django性能之道:缓存应用与优化实战 date: 2024/5/11 18:34:22 updated: 2024/5/11 18:34:22 categories: 后端开发 ta ...

  4. Idefics2 简介: 为社区而生的强大 8B 视觉语言模型

    我们很高兴在此发布 Idefics2,这是一个通用的多模态模型,接受任意文本序列和图像序列作为输入,并据此生成文本.它可用于回答图像相关的问题.描述视觉内容.基于多幅图像创作故事.从文档中提取信息以及 ...

  5. 什么是Java线程池

    摘自:某个百度知道 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在 ...

  6. orangepi zero2在linux5.4以上内核使用ili9341

    背景 根据orangepi zero2用户手册说明,linux5.13内核不能使用 modprobe fbtft_device 驱动spi lcd 查看linux内核源码提交记录,发现在v5.4-rc ...

  7. 当面试官问出“Unsafe”类时,我就知道这场面试废了,祖坟都能给你问出来!

    一.写在开头 依稀记得多年以前的一场面试中,面试官从Java并发编程问到了锁,从锁问到了原子性,从原子性问到了Atomic类库(对着JUC包进行了刨根问底),从Atomic问到了CAS算法,紧接着又有 ...

  8. .NET周刊【5月第4期 2024-05-26】

    国内文章 开源低代码框架 ReZero API 正式版本发布 ,界面操作直接生成API https://www.cnblogs.com/sunkaixuan/p/18201175 ReZero是一款. ...

  9. 微服务新体验之Aspire初体验

    安装aspire 查看vs版本 我这的版本是17.9.7,不支持aspire,所以需要升级 更新VS 点击 帮助->检查更新 点击更新 静等安装升级 创建aspire项目 项目创建成功,如下图 ...

  10. 在kubernetes里使用seccomp限制容器的系统调用

    目录 一.系统环境 二.前言 三.系统调用简介 四.使用seccomp限制docker容器系统调用 五.在kubernetes里使用seccomp限制容器的系统调用 5.1 配置seccomp允许po ...