降维——局部线性嵌入(LLE)

来源:互联网 发布:java 两list合并 编辑:程序博客网 时间:2024/06/05 18:49

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

    局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由于LLE在降维时保持了样本的局部特征,它广泛的用于图像图像识别,高维数据可视化等领域


转载因公式格式问题无法直接复制过来,给出原文链接。

https://www.cnblogs.com/pinard/p/6266408.html?utm_source=itdadao&utm_medium=referral





matlab 程序:

function [Y]=llef(X,k,n);
%X是原数据,k是领域点数,n是本证维数
[D,N]=size(X);%获得原数据的个数N和维数D
X2=sum(X.^2,1);%矩阵X中的每个元素以2为指数求幂值,并且竖向相加
%repmat就是在行方向把X2复制成N份,列方向为1份
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;
%sort是对矩阵排序,sorted是返回对每列排序的结果,index是返回排序后矩阵中每个数在矩阵未排序前每列中的位置
[sorted,index]=sort(distance);
neighborhood=index(2:(1+k),:);


%计算权重
if(k>D)
    tol = 1e-3;
else
    tol = 0;
end
W=zeros(k,N);
for ii=1:N
     z=X(:,neighborhood(:,ii))-repmat(X(:,ii),1,k);
     C=z'*z;
     C=C+eye(k,k)*tol*trace(C);
     W(:,ii)=C\ones(k,1);
     W(:,ii)=W(:,ii)/sum(W(:,ii));
end


%计算矩阵M=(I-W)'(I-W)的最小d个非零特征值对应的特征向量
%M=(I-W)'(I-W);
M=sparse(1:N,1:N,ones(1,N),N,N,4*k*N);
for ii=1:N
    w=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


options.disp=0;
options.isreal=1;
options.issym=1;
[Y,eigenvals]=eigs(M,n+1,0,options);
Y=Y(:,2:n)'*sqrt(N);

原创粉丝点击