局部线性嵌入(LLE)算法matlab可运行

2023-12-07 11:38

本文主要是介绍局部线性嵌入(LLE)算法matlab可运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文主要是学习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可运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/465720

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1