Hessian局部线性嵌入算法(HLLE)——matlab实现
好久没写了最近想把之前做过的一写算法发上来,发现只找到一字儿ppt,内容可能不详细忘大家谅解;不过我会把matlab的代码发上来,文章具体内容要是不理解大家可以上网找一些相关文章阅读:
Hessian局部线性嵌入算法试图恢复出局部等距于低维欧式空间中开连通子集的流行的生成坐标,HHLE利用领域计算出每个点的切空间,并通过领域点在切空间的投影坐标估算出每个点的Hessian系数矩阵,最后计算出Hessian矩阵的二次型,并利用这个二次型的零空间求得数据点最后的低维嵌入。
算法流程:
上面求H有错误,应该是这样的。U是取从2到d+1的特征向量构成的。
H矩阵的构造:
这个R矩阵可以随便找一个点的领域去做就可以了,他的作用我感觉就像正则化类似。具体没仔细探讨过,当时只是尝试实现了下。
以下是我自己编的一个matlab程序:
function [T]=HLLE(X,K,d)
[D,N]=size(X);
% Step1: compute pairwise distances & find neighbour
X2 = sum(X.^2,1);%先把X中的所有元素平方,然后再把列相加排成行。
distance = repmat(X2,N,1)+repmat(X2',1,N)-2*X'*X;
%对列进行排序,sorted是拍好的向量,index是sorted 向量中对 A 的索引,排序是安升序进行的。
[sorted,index] = sort(distance);
%第二行到第1+K行的没一列数
neighborhood = index(2:(1+K),:);%%Step2: 获取切空间坐标Vfor ii=1:N
% Xi = zeros(d,K);for jj=1:Kjjj=neighborhood(jj,ii);Xi{ii}(:,jj)=X(:,jjj); % Xiend%奇异值分解XX=Xi{ii}-(sum(Xi{ii},2)/K)*ones(K,1)';
% Xi{ii}-mean(Xi{ii},2)*ones(K,1)';[U,S,V1] = svd (XX);
% V{ii}=[];V{ii}=V1(:,1:d);end%Step3: 估计Hessian矩阵
d1=1+d+d*(d+1)/2;
for i=1:Njs=0;for j=1:dfor j1=j:djs=js+1;VV(:,js)=V{i}(:,j).*V{i}(:,j1); endendM{i}=[ones(K,1),V{i},VV];%施密特正交化[Mi{i}] = GS(M{i});Hi{i}=Mi{i}(:,d+2:d1)';
end
%Step4: 构造二次型
%S
for i=1:NSS{i}=zeros(d*(d+1)/2,N);for j=1:Kjjj=neighborhood(j,i);SS{i}(:,jjj)=Hi{i}(:,j);end
endH=zeros(N,N);
d2=d*(d+1)/2;
for i=1:N H1=SS{i}'*SS{i};H=H+H1;
end
%Step5: 计算H的零空间U
%求特征值特征向量,找到d+1个最小特征值对应的特征向量
[V,D]=eig(H);
% tzp=sort(tz);
U=V(:,2:d+1);%Step6: 计算低维嵌入
R=zeros(d,d);
% for i=1:Nfor i=1:dfor j=1:dfor i1=1:Kjjj=neighborhood(i1,100);R1=U(jjj,i)*U(jjj,j);R(i,j)= R(i,j)+R1;endendend
% end
% T=(U*U')*U';
T=R^(-1/2)*U';
正交化程序:
%Gram-Schmidt 正 交 化
function [v] = GS(A)
v(:,1)=A(:,1)/norm(A(:,1));
Num=0;%迭代步数
[Ahang,Alie]=size(A); %矩阵的行和列
for j=2:Aliesum(:,1)=zeros(1,Ahang); %临时变量 存储后面的求和for i=1:j-1h(i,j)=A(:,j)'*v(:,i);sum(:,1) =sum(:,1)+h(i,j)*v(:,i);Num=Num+1;endv(:,j)=A(:,j)-sum(:,1);v(:,j)=v(:,j)/norm(v(:,j));
end
%disp('Num=');disp(Num);
不知道为什么程序显示是乱码,不过我尝试了下复制下来没有问题。
Hessian局部线性嵌入算法(HLLE)——matlab实现相关推荐
- lle算法c 语言,局部线性嵌入算法(LLE)与其Python实现-Go语言中文社区
PCA是至今为止运用最为广泛的数据降维算法,它通过最小化重构误差达到将高维数据映射到低维并同时保留数据中所存在的绝大部分信息.但是一般的PCA也有缺点,它只能实现线性降维.当然现在也有kernel P ...
- python降维——局部线性嵌入算法(LLE)
sklearn官网地址:https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbeddin ...
- 王和勇计算机软件,图像空间中的鉴别型局部线性嵌入方法
图像空间中的鉴别型局部线性嵌入方法 黄晓华,梁超,郑文明(东南大学儿童发展与学习科学教育部重点实验室,南京 210096;东南大学学习科学研究中心,南京 210096;东南大学信息科学与工程学院,南京 ...
- 一种基于局部线性嵌入的半监督方法——半监督局部线性嵌入(SSLLE),MATLAB程序代码
具体内容大家可以看一下参考文献的原文,这里附上我的自己编的MATLAB程序代码: % SSLLE算法 % [Y] = sslle(X,K,d,l,r) % X :data as D x N matri ...
- 用scikit-learn研究局部线性嵌入(LLE)
1. scikit-learn流形学习库概述 在scikit-learn中,流形学习库在sklearn.manifold包中.里面实现的流形学习算法有: 1)多维尺度变换MDS算法:这个对应的类是MD ...
- 局部线性嵌入 (Locally linear embedding-LLE)原理总结
转载:https://www.cnblogs.com/pinard/p/6266408.html?utm_source=itdadao&utm_medium=referral#!comment ...
- 局部线性嵌入(LLE)原理总结
局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...
- 两种降维方法的总结——LLE(局部线性嵌入),ISOMAP(等度量映射)
简介 流形学习是一类借鉴了拓扑流形概念的降维方法.流形是在局部与欧式空间同胚的空间,换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算.若低维流形嵌入到高维空间中,则数据样本在高维空间的分 ...
- 局部线性嵌入(Locally Linear Embedding,简称LLE)
局部线性嵌入(Locally Linear Embedding,简称LLE) 1 绪论 与Isomap试图保持邻域内样本之间的距离不同,局部线性嵌入(Locally Linear Embedding, ...
最新文章
- 《Web安全之机器学习入门》一 2.2 TensorFlow简介与环境搭建
- 在使用flask下载文件时会出现的一个文件下载不到的问题
- Windows10下安装QT5.14.2并用VS2019打开
- 云信服务器代码,云信一键登录服务端API文档-一键登录-网易云信开发文档
- ps怎么更改背景图层大小_PhotoShop处理图层的一些技巧方法、PS图层处理教程
- IDEA 搭建Java WEB 开发环境
- 从集合(内存)中创建RDD
- 免费python课程排行榜-Python爬虫学习排行榜
- django ajax页面加载,Python Django 之 基于JQUERY的AJAX 登录页面
- pks服务器清除归档文件路径,HoneywellPKS系统维护手册.doc
- 转:imageNamed和dataWithContentsOfFile的区别
- redis介绍及常见用法
- 手把手玩转win8开发系列课程(9)
- APPweb测试工具
- 微信小程序点击事件(bindtap)传递参数的方法
- phpstudy安装部署DVWA
- winrm java客户端_winrm service
- Android无线调试设备WIFI安装apk
- ccf二十四点Java_CCF--二十四点 - osc_kel5e0sw的个人空间 - OSCHINA - 中文开源技术交流社区...
- 计算机网络层次结构特点,网络层次结构