本文主要是学习LLE算法,可视化原作者给的例程,具体原理请移步参考。如有侵权,请联系删除。

文章目录

  • 绘图结果
  • 代码
  • 参考

绘图结果



以上图片分别为运行代码:scurve_jian.m 和swissroll_jian.m文件得到,具体可以从参考文档中下载。

代码

lle.m

% LLE ALGORITHM (using K nearest neighbors)
%
% [Y] = lle(X,K,dmax)
%
% X = data as D x N matrix (D = dimensionality, N = #points)
% K = number of neighbors
% dmax = max embedding dimensionality
% Y = embedding as dmax x N matrix%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [Y] = lle(X,K,d)[D,N] = size(X);
fprintf(1,'LLE running on %d points in %d dimensions\n',N,D);% STEP1: COMPUTE PAIRWISE DISTANCES & FIND NEIGHBORS
fprintf(1,'-->Finding %d nearest neighbours.\n',K);X2 = sum(X.^2,1);
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;[sorted,index] = sort(distance);
neighborhood = index(2:(1+K),:);% STEP2: SOLVE FOR RECONSTRUCTION WEIGHTS
fprintf(1,'-->Solving for reconstruction weights.\n');if(K>D) fprintf(1,'   [note: K>D; regularization will be used]\n'); tol=1e-3; % regularlizer in case constrained fits are ill conditioned
elsetol=0;
endW = zeros(K,N);
for ii=1:Nz = X(:,neighborhood(:,ii))-repmat(X(:,ii),1,K); % shift ith pt to originC = z'*z;                                        % local covarianceC = C + eye(K,K)*tol*trace(C);                   % regularlization (K>D)W(:,ii) = C\ones(K,1);                           % solve Cw=1W(:,ii) = W(:,ii)/sum(W(:,ii));                  % enforce sum(w)=1
end;% STEP 3: COMPUTE EMBEDDING FROM EIGENVECTS OF COST MATRIX M=(I-W)'(I-W)
fprintf(1,'-->Computing embedding.\n');% M=eye(N,N); % use a sparse matrix with storage for 4KN nonzero elements
M = sparse(1:N,1:N,ones(1,N),N,N,4*K*N);
for ii=1:Nw = W(:,ii);jj = neighborhood(:,ii);M(ii,jj) = M(ii,jj) - w';M(jj,ii) = M(jj,ii) - w;M(jj,jj) = M(jj,jj) + w*w';
end;% CALCULATION OF EMBEDDING
options.disp = 0;
options.isreal = 1;
options.issym = 1;
options.v0=ones(N,1); % 笔者新增的部分
[Y,eigenvals] = eigs(M,d+1,0,options);
Y = Y(:,1:d)'*sqrt(N); % bottom evect is [1,1,1,1...] with eval 0fprintf(1,'Done.\n');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% other possible regularizers for K>D
%   C = C + tol*diag(diag(C));                       % regularlization
%   C = C + eye(K,K)*tol*trace(C)*K;                 % regularlization

swissroll_jian.m

% SWISS ROLL DATASETN=2000;K=12;d=2; % PLOT TRUE MANIFOLDtt0 = (3*pi/2)*(1+2*[0:0.02:1]); hh = [0:0.125:1]*30;xx = (tt0.*cos(tt0))'*ones(size(hh));yy = ones(size(tt0))'*hh;zz = (tt0.*sin(tt0))'*ones(size(hh));cc = tt0'*ones(size(hh));figuresubplot(1,3,1); surf(xx,yy,zz,cc);% GENERATE SAMPLED DATAtt = (3*pi/2)*(1+2*rand(1,N));  height = 21*rand(1,N);X = [tt.*cos(tt); height; tt.*sin(tt)];% SCATTERPLOT OF SAMPLED DATAsubplot(1,3,2); scatter3(X(1,:),X(2,:),X(3,:),12,tt,'+');% RUN LLE ALGORITHM
Y=lle(X,K,d);% SCATTERPLOT OF EMBEDDINGsubplot(1,3,3); scatter(Y(2,:),Y(1,:),12,tt,'+');

scurve_jian.m

% S-CURVE DATASETN=2000;K=12;d=2; % PLOT TRUE MANIFOLDtt = [-1:0.1:0.5]*pi; uu = fliplr(tt); hh = [0:0.1:1]*5;xx = [cos(tt) -cos(uu)]'*ones(size(hh));yy = ones(size([tt uu]))'*hh;zz = [sin(tt) 2-sin(uu)]'*ones(size(hh));cc = [tt uu]' * ones(size(hh));figure% 显示图形subplot(1,3,1);surf(xx,yy,zz,cc);shading flat% GENERATE SAMPLED DATAangle = pi*(1.5*rand(1,N/2)-1); angle_lr = fliplr(angle);height = 5*rand(1,N);X = [[cos(angle), -cos(angle_lr)]; height; [ sin(angle), 2-sin(angle_lr)]];% SCATTERPLOT OF SAMPLED DATAsubplot(1,3,2);scatter3(X(1,:),X(2,:),X(3,:),12,[angle angle_lr],'+');% RUN LLE ALGORITHM
Y=lle(X,K,d);% SCATTERPLOT OF EMBEDDINGsubplot(1,3,3); cla;scatter(Y(1,:),Y(2,:),12,[angle angle_lr],'+');

参考

[1]https://github.com/ArrowLuo/LLE_Algorithm
[2]https://cs.nyu.edu/~roweis/lle/code.html

局部线性嵌入(LLE)算法matlab可运行相关推荐

  1. 局部线性嵌入LLE算法--学习笔记

    流形学习是一大类基于流形的框架,形象说明流形降维: ISOMAP(更多细节可参考:isomap降维算法--学习笔记_Wsyoneself的博客-CSDN博客): LLE: 和传统的PCA,LDA等关注 ...

  2. 用scikit-learn研究局部线性嵌入(LLE)

    1. scikit-learn流形学习库概述 在scikit-learn中,流形学习库在sklearn.manifold包中.里面实现的流形学习算法有: 1)多维尺度变换MDS算法:这个对应的类是MD ...

  3. 局部线性嵌入(LLE)

    关于LLE可参考局部线性嵌入(LLE)原理总结.本文对上述博客中第三节LLE算法推导给出一些自己的理解. LLE算法推导 对于LLE算法,我们首先要确定邻域大小的选择,即我们需要多少个邻域样本来线性表 ...

  4. 流行学习、流形学习家族、局部线性嵌入LLE、随机投影(Random Projection)、t-SNE降维及可视化

    流行学习.流形学习家族.局部线性嵌入LLE.随机投影(Random Projection).t-SNE降维及可视化 目录 流行学习.流形学习家族.局部线性嵌入LLE.随机投影(Random Proje ...

  5. 局部线性嵌入(LLE)原理总结

    局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...

  6. 机器学习之:LLE (locally linear embedding) 局部线性嵌入降维算法

    文章目录 LLE 1. LLE 是什么 2. LLE 的主要思想 3. LLE 算法推导过程 3.1 如何找到 k 个近邻 3.2 找 xix_ixi​ 与这 k 个近邻的线性关系 3.3 xix_i ...

  7. lle算法c 语言,局部线性嵌入算法(LLE)与其Python实现-Go语言中文社区

    PCA是至今为止运用最为广泛的数据降维算法,它通过最小化重构误差达到将高维数据映射到低维并同时保留数据中所存在的绝大部分信息.但是一般的PCA也有缺点,它只能实现线性降维.当然现在也有kernel P ...

  8. 两种降维方法的总结——LLE(局部线性嵌入),ISOMAP(等度量映射)

    简介 流形学习是一类借鉴了拓扑流形概念的降维方法.流形是在局部与欧式空间同胚的空间,换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算.若低维流形嵌入到高维空间中,则数据样本在高维空间的分 ...

  9. Hessian局部线性嵌入算法(HLLE)——matlab实现

    好久没写了最近想把之前做过的一写算法发上来,发现只找到一字儿ppt,内容可能不详细忘大家谅解:不过我会把matlab的代码发上来,文章具体内容要是不理解大家可以上网找一些相关文章阅读: Hessian ...

最新文章

  1. Leet Code OJ 203. Remove Linked List Elements [Difficulty: Easy]
  2. python实现随机抽取答题_如何在python中实现随机选择
  3. 下载CentOS镜像
  4. python 多个列表_python遍历多个列表生成列表或字典
  5. Android 编程下 ListView 和 CheckBox 混合使用时的常见问题
  6. SQL已知现在的某一天求去年的同一天或去年同月份的第一天
  7. 如何将图片转化为base64编码格式显示
  8. Android11(RK3568)自定义服务制作(3)-Hardware制作和权限管理
  9. 温习古文之念奴娇·赤壁怀古
  10. Android推送集成方案总结
  11. 软件测试工程师是这么写年终报告的
  12. office修复找不到msi_windows7系统下打开office提示缺少pro11msi如何解决
  13. springbootadmin 客户端监控配置
  14. C语言趣味程序设计编程百例精解
  15. 数字地 模拟地 电源地 屏蔽地
  16. 移动端软件测试面试题及答案-2021年最新版
  17. Skywalking(10):告警功能
  18. matlab运行后没反映,这个matlab程序运行没反应是怎么回事?在线急等
  19. SWA(Stochastic Weight Averaging)实验
  20. mysql实现火车购票系统,jsp784火车票售票系统mysql

热门文章

  1. 2017寒假练习题解 第四周 2.6-2.12
  2. [团队项目]后续安排 Github
  3. Ubuntu 安装配置Git过程记录
  4. 初探Git git基本用法
  5. 用forif循环测量minst0-6的特征迭代次数曲线
  6. MAC Android Studio| Error: The android gradle plugin version 3.0.0-alpha1 is too old
  7. 4.11 一维到三维推广-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  8. LINUX使用tcgetattr函数与tcsetattr函数控制终端二
  9. c语言常用的异常处理,C语言中的异常处理
  10. 使用matlab模拟、检验和估计泊松过程