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

如下图,使用LLE将三维数据(b)映射到二维(c)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。

但是LLE在有些情况下也并不适用,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间,且不能保持原有的数据流形。那么我们在处理数据中,首先假设数据不是分布在闭合的球面或者椭球面上。

LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:

  • 1、寻找每个样本点的k个近邻点;
  • 2、由每个 样本点的近邻点计算出该样本点的局部重建权值矩阵;
  • 3、由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。

理解:对于图像X中每一个块X1

  • 第一步是计算出每个样本点Xi的k个近邻点,即找出样本点的近邻域集合,此处计算可以通过欧几里德距离法求;
  • 第二步是计算出样本点的局部重建权值矩阵W来使得重构块X1的误差最小化;
  • 第三步将所有样本点映射到低维空间中达到降维的目的

其原理解释可参考:

  R实现LLE算法包


R算法包 lle , 参考资料:https://cran.r-project.org/web/packages/lle/index.html

Usage: lle(X, m, k, reg = 2, ss = FALSE, p = 0.5, id = FALSE, nnk = TRUE, eps = 1, iLLE = FALSE, v = 0.99)

  • X: 输入的数据对象
  • m: 输入数据的内在维度,这个参数主要影响结果的可视化,实现的内在维度结果在算法中会自动进行计算
  • k: 近邻个数,K的取值在算法中起到关键作用,如果K值太大,LLE不能体现局部特性。使得LLE算法趋向于PCA算法。反之取得太小,LLE便不能保持样本点在在低维空间中的拓扑结构。可使用  calc_k. 函数进行计算
  • id: 逻辑变量,定义是否进行内存维度计算

Usage: calc_k(X, m, kmin=1, kmax=20, plotres=TRUE,parallel=FALSE, cpus=2, iLLE=FALSE)

  • m: 输入数据的内在维度
  • kmin: K最小值
  • kmax: K最大值
  • plotres:是否plot结果
  • parallel: 是否使用并行计算

示例代码

> remove(list = ls())
> if (require(lle) == FALSE)
+ {
+ install.packages("lle")
+ }
>
> test <- iris[,1:4]
> le <- lle(test,5,20,id=TRUE)
finding neighbours
calculating weights
intrinsic dim: mean=3.96, mode=4
computing coordinates
> table(le$id) 3 4
6 144

从上面的结果发现,输入数据的内在维度为2,再通过calc_k计算最合适的K值  

> k <- calc_k(test,2,kmin = 1,kmax = dim(test)[1])
snowfall 1.84-6.1 initialized: sequential execution, one CPU.

如下图,选择K值:50

根据计算优化的参数,重新进行数据计算

> le <- lle(test,2,50)
finding neighbours
calculating weights
computing coordinates
> newSet <- cbind(iris,as.data.frame(le$Y))
> head(newSet)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species V1 V2
1 5.1 3.5 1.4 0.2 setosa 0.5703337 -1.345773
2 4.9 3.0 1.4 0.2 setosa -0.7795944 -1.236492
3 4.7 3.2 1.3 0.2 setosa -0.8186908 -1.311557
4 4.6 3.1 1.5 0.2 setosa -1.2211154 -1.217567
5 5.0 3.6 1.4 0.2 setosa 0.5488266 -1.365494
6 5.4 3.9 1.7 0.4 setosa 1.9528668 -1.289062

结果图例显示

library(rgl)
plot_lle(le$Y,test)

ML: 降维算法-LLE的更多相关文章

  1. ML: 降维算法-概述

    机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达, y是数据点映射后的低维向量 ...

  2. ML: 降维算法-LE

    PCA的降维原则是最小化投影损失,或者是最大化保留投影后数据的方差.LDA降维需要知道降维前数据分别属于哪一类,而且还要知道数据完整的高维信息.拉普拉斯特征映射 (Laplacian Eigenmap ...

  3. ML: 降维算法-LDA

    判别分析(discriminant analysis)是一种分类技术.它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类.判别分析的方法大体上有三类,即Fishe ...

  4. ML: 降维算法-PCA

            PCA (Principal Component Analysis) 主成份分析 也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结 ...

  5. 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...

  6. 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...

  7. 降维算法整理--- PCA、KPCA、LDA、MDS、LLE 等

    转自github: https://github.com/heucoder/dimensionality_reduction_alo_codes 网上关于各种降维算法的资料参差不齐,同时大部分不提供源 ...

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

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

  9. sklearn LDA降维算法

    sklearn LDA降维算法 LDA(Linear Discriminant Analysis)线性判断别分析,可以用于降维和分类.其基本思想是类内散度尽可能小,类间散度尽可能大,是一种经典的监督式 ...

随机推荐

  1. Python 内置函数2

    print(list("胡辣汤")) lst = ["河南话", "四川话", "东北", "山东" ...

  2. 3--Selenium环境准备--Eclipse 引入 selenium-server包

    1.下载selenium-server包   selenium-server-standalone包是Seleniumd的核心jar包,其中包含了各种元素定位和调用浏览器的方法.下载jar包后,在ID ...

  3. Golang游戏服务器与skynet的个人直观比较

    我对和GOLANG写MMO服务器的一些遐想: 1.沙盒(隔离性) SKYNET:原生LUA STATE作为沙盒, 进行服务器间隔离安全性高: 服务可以很容易的配置到不同节点之上. GO:估计用RECO ...

  4. C语音,关于可变参数的宏定义

    typedef char * va_list; // TC中定义为void* //为了满足需要内存对齐的系统 #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int) ...

  5. C#动态创建Xml-LinQ方式

    C#创建Xml-LinQ方式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  6. CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)

    核心 : 博弈搜索树     双方得分互为相反数 dfs (x,y,player): 玩家player下完(x,y)之后的得分最大值 易错: 先判断输赢,再判断平局 待改进: check() 函数写的 ...

  7. linux php.ini文件没有指向 不生效

    phpinfo下查看: 命令行下查看 :php -i | grep "Loaded Configuration File" 解决: 使用命令去追踪错误: strace  /usr/ ...

  8. 02 JDBC相关

    ====================================================================================JDBC JAVA Databa ...

  9. jdk1.8新特性----接口可以有方法体,子类可以不用重写接口中已实现的方法

    是的这就是jdk1.8新特性之一,刚刚看到. 注意:编译环境是1.8. public interface Tree { public static String name="树名" ...

  10. Map 按Key排序 和 按Value排序

    https://www.cnblogs.com/binz/p/6671917.html 一.根据value排序 通用方法 public class MapUtil { public static &l ...