ML: 降维算法-LE
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算法的数据推理参见;
- https://zhuanlan.zhihu.com/p/25096844
- http://www.cnblogs.com/xbinworld/archive/2012/11/29/2795287.html
- http://www.cnblogs.com/xbinworld/archive/2012/11/27/2791504.html
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的更多相关文章
- ML: 降维算法-LLE
局部线性嵌入 (Locally linear embedding)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 .LLE可以说是流形学习方法最经典的工作之一.很多后续的流形学习. ...
- ML: 降维算法-概述
机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达, y是数据点映射后的低维向量 ...
- ML: 降维算法-LDA
判别分析(discriminant analysis)是一种分类技术.它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类.判别分析的方法大体上有三类,即Fishe ...
- ML: 降维算法-PCA
PCA (Principal Component Analysis) 主成份分析 也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结 ...
- 降维算法整理--- PCA、KPCA、LDA、MDS、LLE 等
转自github: https://github.com/heucoder/dimensionality_reduction_alo_codes 网上关于各种降维算法的资料参差不齐,同时大部分不提供源 ...
- 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映 ...
- sklearn LDA降维算法
sklearn LDA降维算法 LDA(Linear Discriminant Analysis)线性判断别分析,可以用于降维和分类.其基本思想是类内散度尽可能小,类间散度尽可能大,是一种经典的监督式 ...
- 一步步教你轻松学奇异值分解SVD降维算法
一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...
- 一步步教你轻松学主成分分析PCA降维算法
一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...
随机推荐
- 1.selenium实战之从txt文档读取配置信息并执行登录
前置条件: 1.本机已搭建ECShop3.0网站 2.在脚本目录创建了user.txt文本如下: 目的:实现从txt中读取配置文件信息,本实战中,包含url地址.用户名.密码,然后进行ESChop的登 ...
- html页面中的title设置为空格
这样页面加载时,title会显示为空,而不是当前页面的URL. document.title='\u200E'
- 检测IP地址冲突的shell脚本-check_server_ip_conflict.sh
check_server_ip_conflict.sh 使用arping获取对应IP地址的MAC地址,如果和预料的不一致则报警: #!/bin/bash epg_addr_01="00:50 ...
- [LeetCode&Python] Problem 541. Reverse String II
Given a string and an integer k, you need to reverse the first k characters for every 2k characters ...
- Blender 画正四面体
正四面体打开“添加网格”菜单(Shift + A),然后选择“锥形”.将“顶点数”设置为3,将“半径1”保留为默认值1.000,将“半径2”设置为0.000.现在,将深度设置为 {根号2,约等于1.4 ...
- C++学习(九)(C语言部分)之 项目 推箱子游戏
游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...
- js中将一个字一个字的打印出来
第一种方式: setTimeout(function(){ var cc=document.createTextNode(ss[i]) content.appendChild(cc) },3000)
- 【liunx】时间处理函数
一.脚本示例 [mylinuxaccount@linux01 ~]$ date +%Y%m%d 20171224 [mylinuxaccount@linux01 ~]$ date +%F 2017-1 ...
- 深入浅出Node.js---Connect模块解析 。转载
文章地址:https://blog.csdn.net/zhangyuan19880606/article/details/51509205 1 Connect模块背景 Node.js的愿望是成为一个能 ...
- Python-pycurl模块的安装
先执行以下命令(因为我在另一个终端执行,所以history的编号有重复) 7 wget https://pypi.python.org/packages/source/p/pycurl/pycurl- ...