等度量映射ISOMAP
前面的 LLE ,被称作局部模型。因为他们都只关注样本点跟邻居们的关系。现在我们介绍一个全局模型 ISOMAP ( 多维缩放( MDS )的一个变种)。
利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻点之间存在连接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题就转变为计算近邻连接图上两点之间的最短路径问题.
在近邻连接图上计算两点间的最短路径,可采用著名的Dikstra算法或Floyd 算法,在得到任意两点的距离之后,就可通过 MDS 方法来获得样本点在低维空间中的坐标.(两种距离算法和MDS在我的文章中有大家可以看看)
Isomap算法描述
• isomap 最主要的优点就是使用“测地距离”,而不是使用原始的欧几里得距离,这样可以更好的控制数据信息的流失,能够在低维空间中更加全面的将高维空间的数据表现出来。
%% 清空变量
clear all
clc
%% 下载数据
load('matrix.mat')
%% 数据标准化
tic
X=matrix';
% 求矩阵维数
L=size(X);
n=L(1);
m=L(2);
%求样本的均值
A=mean(X);
%求样本的标准差
B=std(X,0);
% 样本标定
C=zeros(n,m);
for i =1:m
for j=1:n
C(j,i)=(X(j,i)-A(i))/B(i);
end
end
%% ISOMAP降维
options.dims=6; % 输出维度
options.nntype = 0; % 输出类型
options.nn_nbr = 89; % 定义最近邻数(不能超过90)
[Y,E,F] = isomap(C,options);
% Y 降维后的输出
% E 降维后的特征向量
% F 降维后的特征值矩阵
[G,H]=sort(F(F~=0),'descend');%G是排列好的特征值,H是索引
P=E(:,H);%按索引排序的特征向量
% 计算得分矩阵
T=C*P;
toc
%% 显示降维后的主成分热图
r=212;c=308;
ha = tight_subplot(3,2,[.05 .05],[.03 .03],[.1 .1]);
axes(ha(1));temp1=(reshape(T(:,1),r,c));imagesc(temp1);title('PC1');colorbar;colormap(jet);axis image;
axes(ha(2));temp2=(reshape(T(:,2),r,c));imagesc(temp2);title('PC2');colorbar;colormap(jet);axis image;
axes(ha(3));temp3=(reshape(T(:,3),r,c));imagesc(temp3);title('PC3');colorbar;colormap(jet);axis image;
axes(ha(4));temp4=(reshape(T(:,4),r,c));imagesc(temp4);title('PC4');colorbar;colormap(jet);axis image;
axes(ha(5));temp5=(reshape(T(:,5),r,c));imagesc(temp5);title('PC5');colorbar;colormap(jet);axis image;
axes(ha(6));temp6=(reshape(T(:,6),r,c));imagesc(temp6);title('PC6');colorbar;colormap(jet);axis image;
aaa