PCA的降维原则是最小化投影损失,或者是最大化保留投影后数据的方差。LDA降维需要知道降维前数据分别属于哪一类,而且还要知道数据完整的高维信息。拉普拉斯特征映射 (Laplacian Eigenmaps,LE)看问题的角度和LLE十分相似。它们都用图的角度去构建数据之间的关系。图中的每个顶点代表一个数据,每一条边权重代表数据之间的相似程度,越相似则权值越大。并且它们还都假设数据具有局部结构性质。LE假设每一点只与它距离最近的一些点相似,再远一些的数据相似程度为0,降维后相近的点尽可能保持相近。而LLE假设每一个点都能通过周围邻域数据的线性组合来描述,并且降维后这一线性关系尽可能保持不变。

LE的基本思想就是用一个无向有权图来描述一个流形,然后通过用图的嵌入(graph embedding)来找低维表示。说白了,就是保持图的局部邻接关系的情况下把这个图从高维空间中重新画在一个低维空间中(graph drawing)。就算法而言,就是那三步:构建图、选择权、特征映射。

如: 对 N 个维度为 m 的样本,希望可以把它们降到 k 维(k<m)。不过首先我们要把样本们转化成一张图。一般来说有两种思路可以完成这一步:

  • 1. 对于每个顶点,找到距离它最近的 k 个邻居, 每个邻居用下面这个高斯函数计算边的权重;
  • 2. 以每个顶点为中心画一个半径为 R 的球, 所有在这个球里面的点都是邻居,用下面这个高斯函数计算一下权重

有了一个 graph,然后就可以用 Laplacian 三板斧了: 1. 计算 L; 2. 把 L 做SVD分解; 3. 找 出 top k+1 最小的 eigenvalue, 去掉为 0 的那个, 就能得到对应的 k 个维度为 1*N 的向量, 变成 N 个 k*1 的向量就是降维之后的点。

LE算法的数据推理参见;

dimRed


参考资料:https://cran.r-project.org/web/packages/dimRed/dimRed.pdf

Slots

  • fun: A function that does the embedding and returns a dimRedResult object.
  • stdpars:The standard parameters for the function

需求安装的软件包

install.packages("loe")install.packages("RSpectra")install.packages("dimRed")

构建对象及结构示例代码:

> library(dimRed)
> library(loe)
> library(RSpectra)
>
> #构建dimRedResult 对象
> dm <- dimRedData(data = iris[, 1:4], meta = iris[, 5])
> leim <- LaplacianEigenmaps()
> str(leim)
Formal class 'LaplacianEigenmaps' [package "dimRed"] with 2 slots
..@ fun :function (data, pars, keep.org.data = TRUE)
..@ stdpars:List of 6
.. ..$ ndim : num 2
.. ..$ sparse: chr "knn"
.. ..$ knn : num 50
.. ..$ eps : num 0.1
.. ..$ t : num Inf
.. ..$ norm : logi TRUE

参数说明:

  • ndim: 输出维度数
  • sparse:字符串向量, "knn", "eps"
  • knn: knn 近邻个数
  • eps:球半径
  • t:Parameter for the transformation of the distance matrix by w=exp(-d^2/t), larger values give less weight to differences in distance, t == Inf treats all distances != 0 equally

计算及结果示例代码

> emb <- leim@fun(dm,leim@stdpars)
2017-08-18 18:50:25: Creating weight matrix
2017-08-18 18:50:25: Eigenvalue decomposition
Eigenvalues: 3.838199e-01 3.691626e-02 9.011414e-17
2017-08-18 18:50:25: DONE
> str(emb)
Formal class 'dimRedResult' [package "dimRed"] with 9 slots
..@ data :Formal class 'dimRedData' [package "dimRed"] with 2 slots
.. .. ..@ data: num [1:150, 1:2] -0.104 -0.116 -0.114 -0.117 -0.106 ...
.. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. ..$ : NULL
.. .. .. .. ..$ : chr [1:2] "LEIM1" "LEIM2"
.. .. ..@ meta:'data.frame': 150 obs. of 1 variable:
.. .. .. ..$ meta: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
..@ org.data : num [1:150, 1:4] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : NULL
.. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
..@ apply :function (x)
..@ inverse :function (x)
..@ has.org.data: logi TRUE
..@ has.apply : logi FALSE
..@ has.inverse : logi FALSE
..@ method : chr "leim"
..@ pars :List of 7
.. ..$ ndim : num 2
.. ..$ sparse: chr "knn"
.. ..$ knn : num 50
.. ..$ eps : num 0.1
.. ..$ t : num Inf
.. ..$ norm : logi TRUE
.. ..$ d :function (x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
> head(emb@data@data)
LEIM1 LEIM2
[1,] -0.1038285 -0.012537113
[2,] -0.1158002 -0.016098949
[3,] -0.1140282 -0.014946421
[4,] -0.1168551 -0.006973706
[5,] -0.1057686 -0.012734742
[6,] -0.1298387 -0.017395325

图例: plot(emb,type="parpl")

LDA计算分类结果

> library(MASS)
> newSet <- cbind(iris,emb@data@data)
> model1=lda(Species~LEIM1+LEIM2,data=newSet)
> table(iris$Species,predict(model1)$class) setosa versicolor virginica
setosa 50 0 0
versicolor 1 42 7
virginica 0 6 44

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

  1. ML: 降维算法-LLE

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

  2. ML: 降维算法-概述

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

  3. ML: 降维算法-LDA

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

  4. ML: 降维算法-PCA

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

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

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

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

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

  7. sklearn LDA降维算法

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

  8. 一步步教你轻松学奇异值分解SVD降维算法

    一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...

  9. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

随机推荐

  1. QueryString中的加号变成空格解决方法

    通过Request.QueryString["CheckItem"]的方式调用值的时候,数值中的加号“+”会转换为空格“ ” 例如传输“ABC+EFG”,就会取到“ABC EFG” ...

  2. 【转载】 BN(batch normalization)

    原文地址: https://blog.csdn.net/qq_35608277/article/details/79212700 ----------------------------------- ...

  3. git get submodule after clone

    /********************************************************************************* * git get submodu ...

  4. Templates中的标签if

    1.什么是标签 每个标签标示的是不同的服务器端的功能 2.常用标签 1. if 标签 1.基本if结构 {% if 条件 %} % endif %} 2.if ... else ... 结构 {% i ...

  5. HDU 1716:排列2(全排列)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. HDU 1260:Tickets(DP)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  7. HDU 1425 sort C语言实现快速排序

    AC代码:sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. kafka安装和部署

    阅读目录 一.环境配置 二.操作过程 Kafka介绍 安装及部署 回到顶部 一.环境配置 操作系统:Cent OS 7 Kafka版本:0.9.0.0 Kafka官网下载:请点击 JDK版本:1.7. ...

  9. linux下简单制作iso,img镜像文件

    1. 如果你是直接从cd压制iso文件的,执行sudo umount /dev/cdromdd if=/dev/cdrom of=file.iso bs=1024 2. 如果你要把某个文件或者目录压到 ...

  10. ★ MYSQL隔离级别 通俗理解 + mysql、oracle默认事务隔离级别

    ★  脏读 : 读取了前一事务 未提交 的数据 ; 不可重复读    : 读取了前一事务     提交 的数据: ★ 幻读 与 不可重复读 common :都是读取了另一条已经提交的事务(这点与脏读不 ...