简介

流形学习是一类借鉴了拓扑流形概念的降维方法。流形是在局部与欧式空间同胚的空间,换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算。若低维流形嵌入到高维空间中,则数据样本在高维空间的分布虽然看上去非常复杂,但在局部上仍具有欧式空间的性质,基于流形学习的降维正是这种“邻域保持”的思想。如此,可以在局部建立降维映射关系,然后再设法将局部映射推广到全局。当维数被降至二维或三维时,能对数据进行可视化展示。因此流形学习也可被用于可视化 . 本节介绍两种著名的流形学习方法。

局部线性嵌入(LLE)

局部线性嵌入试图保持邻域内样本之间的线性关系.

LLE 希望式子的关系在低维空间中得以保持.

等度量映射ISOMAP

前面的 LLE ,被称作局部模型。因为他们都只关注样本点跟邻居们的关系。现在我们介绍一个全局模型 ISOMAP ( 多维缩放( MDS )的一个变种)。

利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻点之间存在连接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题就转变为计算近邻连接图上两点之间的最短路径问题.

在近邻连接图上计算两点间的最短路径,可采用著名的Dikstra算法或Floyd 算法,在得到任意两点的距离之后,就可通过 MDS 方法来获得样本点在低维空间中的坐标.(两种距离算法和MDS在我的文章中有大家可以看看)

Isomap算法描述

isomap 最主要的优点就是使用“测地距离”,而不是使用原始的欧几里得距离,这样可以更好的控制数据信息的流失,能够在低维空间中更加全面的将高维空间的数据表现出来。

MATLAB实验结果:

LLE算法中近邻点数不同K的选取实验结果图

K分别为5681012,14,16,16,18,20,20时降维的图。

由实验结果可看出,近邻点数目的取值与降维结果紧密联系,当K值过小时,同类数据可能被分开,实验结果出错。

K值过大时数据呈流型结构,当K值取合理时,数据降维达到预期目标。

ISOMAP算法实现

降维前在三维图上的测地距离

ISOMAP降维后的测地距离

结论

值得注意的是,流形学习欲有效进行邻域保持则需样本密采样,而这恰是高维情形下面临的重大障碍;因此流形学习方法在实践中的降维性能往往没有预期的好 。

流形学习算法也可以按照算法本身关注的结构信息可以分为两类:一类是保持全局的结构信息,比如ISOMAP,使高维空间中任意点对之间的测地距离关系在低维空间中保持不变;另一类是保持局部的结构信息,比如LLE等,这些算法首先是考虑局部邻域信息,局部信息的重叠能够提供全局的信息。

全局算法要求流形必须是凸结构的,只有这样才能保持流形上距离较远的点能够准确降维,由于要找出相距远点的测地距离,所以要花费很多的运算时间,时间复杂度高。局部算法只考虑流形上近邻点之间的关系,保证流形的局部几何结构不变,使流形上近距离的点映射成低维空间中的邻近点,所以不必要求流形必须是凸结构的,局部性质的保持可以在非凸流形上成功应用,适用范围较广。

LLE不需要计算距离矩阵,仅仅需要计算稀疏矩阵,大大减少了计算量。由于是局部优化算法,只考虑距离近的点,这种局部性质的保持可以在非凸流形上成功的应用,因此应用范围比广泛,但是这种局部性质的保持,对于数据稀疏的数据集,近邻区域很有可能不位于一个平面上,基于局部线性嵌入的降维算法研究则误差函数形成的误差比较大,影响降维效果;数据集之间的关联性弱,局部信息的重叠不可能反映整体的全局结构。

LLEmatlab代码主程序:

% 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 neighbour
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 recinstruction 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;
[Y,eigenvals] = eigs(M,d+1,0,options);
Y = Y(:,2:d+1)'*sqrt(N); % bottom evect is [1,1,1,1...] with eval 0
fprintf(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
运行实例的程序:
clear all,clc
K = 16 ;%(领域点个数)
d = 2;%最大嵌入维数
%瑞士卷的生成图
N=4000;
t=(3*pi/2)*(1+2*rand(1,N));
s=21*rand(1,N);
X=[t.*cos(t);s;t.*sin(t)];
plot3(X(1,:),X(2,:),X(3,:),'.')
%用lle降维
Y=lle(X,K,d);
figure
plot(Y(1,:),Y(2,:),'.r')

ISOMAP算法matlab代码(其中需要调用的测地距离代码在我的其他文章中能找到):

clc;
clear all;
close all;
%用isomap对瑞士卷降维
%瑞士卷的生成图
N=1000;
t=(3*pi/2)*(1+2*rand(1,N));
s=21*rand(1,N);
X=[t.*cos(t);s;t.*sin(t)];
%plot3(X(1,:),X(2,:),X(3,:),'.')
%计算距离矩阵个
X=X';
[m,n]=size(X);
D=zeros(m,m);
for i=1:mfor j=i:mD(i,j)=norm(X(i,:)-X(j,:));D(j,i)=D(i,j);end
end
%计算矩阵中每行前k个值的位置并赋值(先按大小排列)
W1=zeros(m,m);
k=8;
for i=1:m
A=D(i,:);
t=sort(A(:));%对每行进行排序后构成一个从小到大有序的列向量
[row,col]=find(A<=t(k),k);%找出每行前K个最小数的位置
for j=1:k
c=col(1,j);W1(i,c)=D(i,c); %W1(i,c)=1;%给k近邻赋值为距离
end
end
for i=1:mfor j=1:mif W1(i,j)==0&i~=jW1(i,j)=inf;endend
end
%计算测地距离o就是测地距离
[dist,mypath,o]=myfloyd(W1,10,20);
figure
[col,rol]=size(mypath);
X1=[];
for i=1:rolding=mypath(1,i);X1=[X1;X(ding,:)];
end
plot3(X(:,1),X(:,2),X(:,3),'.')
hold on
plot3(X1(:,1),X1(:,2),X1(:,3),'o-r')%mds算法降维
d=o;
n=size(d,1);
B=zeros(n,n);
for i=1:nfor j=1:nB(i,j)=-0.5*(d(i,j)^2 -1/n*d(i,:)*d(i,:)' -1/n*d(:,j)'*d(:,j) +1/n^2*sum(sum(d.^2)));end
end
[V,D]=eig(B);A=sort(diag(D),'descend');%把对角矩阵变成列向量
V1=[V(:,1),V(:,2)]*[A(1,1),0;0,A(2,1)];figure;
%plot(V1(:,1),V1(:,2),'.')[col,rol]=size(mypath);
V2=[];
for i=1:rolding=mypath(1,i);V2=[V2;V1(ding,:)];
end
plot(V1(:,1),V1(:,2),'.')
hold on
plot(V2(:,1),V2(:,2),'o-r')

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

  1. PCA与LDA两种降维方法原理的简要对比

    1.PCA(主成分分析) 无监督的,选择的是投影后数据方差最大的方向.因此PCA假设方差越大,代表的信息量越大,使用主成分来表示原始数据可以去除冗余的维度,达到降维的目的. 2.LDA(线性判别分析) ...

  2. 一种基于局部线性嵌入的半监督方法——半监督局部线性嵌入(SSLLE),MATLAB程序代码

    具体内容大家可以看一下参考文献的原文,这里附上我的自己编的MATLAB程序代码: % SSLLE算法 % [Y] = sslle(X,K,d,l,r) % X :data as D x N matri ...

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

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

  4. 王和勇计算机软件,图像空间中的鉴别型局部线性嵌入方法

    图像空间中的鉴别型局部线性嵌入方法 黄晓华,梁超,郑文明(东南大学儿童发展与学习科学教育部重点实验室,南京 210096;东南大学学习科学研究中心,南京 210096;东南大学信息科学与工程学院,南京 ...

  5. matlab设计降维状态观测器,降维状态观测器的两种设计方法及算例

    第 17卷第 3期 2005年 6月 军 械 工 程 学 院 学 报 Journal of Ordnance Engineering College Vo1.17 No.3 Jun.,2005 文章编 ...

  6. HTML局部打印,区域打印的两种实现方法总结

    在开发中,有时需要实现页面的局部打印功能,不打印页面上不需要的区域, 例如页面: <div>aaaaaaaaaaaaaaaaaaa</div><div>bbbbbb ...

  7. 流形学习的四种降维方法

    文章目录 流形学习 主成分分析(PCA) 原理 实现 手写版 调库版 缺点 奇异值分解(SVD) 原理 实现 线性判别分析(LDA) 原理 手写版 调库版 PCA与LDA 局部线性嵌入(LLE) 原理 ...

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

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

  9. 机器学习降维算法三:LLE (Locally Linear Embedding) 局部线性嵌入

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

最新文章

  1. ARMed解决方案对DSP的战争
  2. day12 Python操作rabbitmq及pymsql
  3. 基本设计模式:单例模式和工厂模式代码实现
  4. Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
  5. work hard, think harder
  6. 【杭电多校2020】Minimum Index【Lyndon Word】
  7. 部署shiro官方源码时,执行maven命令出错
  8. apache.camel_Apache Camel 2.16发布–十大亮点
  9. java 蓝桥杯算法提高 身份证号码升级(题解)
  10. 函数指针作为函数參数,实现冒泡排序的升序排序和降序排序
  11. c# gerber文件读取_Gerber文件查看方法
  12. GPS模块开发详解(转)
  13. 解决端口占用问题 Port xxxx was already in use
  14. 理解DC中的link_library与target_library
  15. 宝尚网上股票缩量商场拉大盘股高潮
  16. 手撕鸭腌料批发场 新奥尔良烤肉腌料批发 奥尔良鸡叉骨腌料批发
  17. 风雨哈佛路,我在折戟沉沙的路上浴火重生
  18. 全球与中国货船维修保养市场深度研究分析报告
  19. Asp网站脚本漏洞的安全防范
  20. 回头看看自己这半年走过的路-2012

热门文章

  1. jQuery使用ajaxSubmit()提交表单示例(转)
  2. uchar和char、schar的区别
  3. Mysql中的循环语句
  4. setClickable,setEnabled,setFocusable 的区别
  5. 第一性原理计算筛选本征二维磁性材料
  6. c语言不能输出字符A的语句的是,以下不能输出字符a的语句是( )。
  7. java异常之-ClassNotFoundException: .......web.context.ContextLoaderServlet
  8. 跨域请求传递Cookie
  9. 计算机网络详解--套接字编程
  10. ICPR 2020 | 论文阅读 ——SyNet: An Ensemble Network for Object Detection in UAV Images