当前位置:网站首页>LPP code and its comments
LPP code and its comments
2022-08-09 09:32:00 【qq_35774189】
% LPP: Locality Preserving Projections
%
% [eigvector, eigvalue] = LPP(W, options, data)
%
% Input:
% data - Data matrix. Each row vector of fea is a data point.
% W - Affinity matrix(关联矩阵). You can either call "constructW"
% to construct the W, or construct it by yourself.
% options - Struct value in Matlab. The fields in options
% that can be set:
%
% Please see LGE.m for other options.
%
% Output:
% eigvector - Each column is an embedding function, for a new
% data point (row vector) x, y = x*eigvector
% will be the embedding result of x.
% eigvalue - The sorted eigvalue of LPP eigen-problem.
%
%
% Examples:
%
% fea = rand(50,70);
% options = [];
% options.Metric = 'Euclidean'; //欧氏距离定义: 欧氏距离( Euclidean distance)是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离.
% options.NeighborMode = 'KNN';//Put an edge between two nodes if and only if they are among the k nearst neighbors of each other. You are required to provide the parameter k in the options. [Default One]
% options.k = 5; //Default
% options.WeightMode = 'HeatKernel'; //Indicates how to assign weights for each edge in the
% graph.'HeatKernel' - If nodes i and j are connected, put weight
% W_ij = exp(-norm(x_i - x_j)/2t^2). You are
% required to provide the parameter t. [Default One]
%
%
% options.t = 5;
% W = constructW(fea,options);
% options.PCARatio = 0.99 //The percentage of principal component
% kept in the PCA step.The percentage is
% calculated based on the eigenvalue.
% [eigvector, eigvalue] = LPP(W, options, fea);
% Y = fea*eigvector;
%
%
% fea = rand(50,70);
% gnd = [ones(10,1);ones(15,1)*2;ones(10,1)*3;ones(15,1)*4]; //The parameter needed under 'Supervised'NeighborMode.
% Colunm vector of the label information for each data point.
% options = [];
% options.Metric = 'Euclidean';
% options.NeighborMode = 'Supervised'; //k > 0 Put an edge between
% two nodes if they belong to same class and they are among the k nearst neighbors of each other.
% options.gnd = gnd;
% options.bLDA = 1; //If 1, the graph will be constructed to
% make LPP exactly same as LDA. Default will be 0.
% W = constructW(fea,options);
% options.PCARatio = 1;
%
% [eigvector, eigvalue] = LPP(W, options, fea);
% Y = fea*eigvector;
%
%
% Note: After applying some simple algebra, the smallest eigenvalue problem:
% data^T*L*data = \lemda data^T*D*data
% is equivalent to the largest eigenvalue problem:
% data^T*W*data = \beta data^T*D*data
% where L=D-W; \lemda= 1 - \beta.
% Thus, the smallest eigenvalue problem can be transformed to a largest
% eigenvalue problem. Such tricks are adopted in this code for the
% consideration of calculation precision of Matlab.
%
%
% See also constructW, LGE
if (~exist('options','var')) %不存在返回1,存在返回0
options = [];
end
[nSmp,nFea] = size(data); %返回data的行数和列数,分别保存在nSmp和nFea中
if size(W,1) ~= nSmp %size()返回矩阵的行数
error('W and data mismatch!');
end
%==========================
% If data is too large, the following centering codes can be commented
% options.keepMean = 1;
%==========================
if isfield(options,'keepMean') && options.keepMean; %isfield()检查options是否包含由keepMean指定的域,判断输入是否是结构体数组的域.
else
if issparse(data)
data = full(data); %Convert a sparse matrix to a full matrix and store it in data
end
sampleMean = mean(data);%data是一个向量,mean(A)返回A中元素的平均值,如果是一个矩阵,mean(A)Treat each of the columns as vectors,求其平均值.
data = (data - repmat(sampleMean,nSmp,1)); %repmat()是对sampleMeanThe matrix carries the specified number of rowsnSmp和列数1的复制.
end
%==========================
D = full(sum(W,2)); %sum(W,2)对W的行求和 %*D变成50行1列
if ~isfield(options,'Regu') || ~options.Regu
DToPowerHalf = D.^.5; %*DToPowerHalf为50行1列
D_mhalf = DToPowerHalf.^-1; %*D_mhalf为50行1列
if nSmp < 5000 %nSmp行数
tmpD_mhalf = repmat(D_mhalf,1,nSmp); %*将D_mhalf放大到50列,此时tmpD_mhalf是50*50
W = (tmpD_mhalf.*W).*tmpD_mhalf';
clear tmpD_mhalf;
else
[i_idx,j_idx,v_idx] = find(W); %找出i_idx非0元素所在的行,j_idx非0the column the element is in,v_idx非0元素的值.
v1_idx = zeros(size(v_idx)); %返回v_idx的行数和列数
for i=1:length(v_idx)
v1_idx(i) = v_idx(i)*D_mhalf(i_idx(i))*D_mhalf(j_idx(i));
end
W = sparse(i_idx,j_idx,v1_idx); %转化为稀疏矩阵,把0全去掉
clear i_idx j_idx v_idx v1_idx
end
W = max(W,W');
data = repmat(DToPowerHalf,1,nFea).*data;
[eigvector, eigvalue] = LGE(W, [], options, data);
else
options.ReguAlpha = options.ReguAlpha*sum(D)/length(D);
D = sparse(1:nSmp,1:nSmp,D,nSmp,nSmp); %由1:nSmp,1:nSmp,D组成的nSmp*nSmp的稀疏矩阵
[eigvector, eigvalue] = LGE(W, D, options, data);
end
eigIdx = find(eigvalue < 1e-3);
eigvalue (eigIdx) = [];
eigvector(:,eigIdx) = [];
边栏推荐
- Anti App so层对抗分析
- 初窥门径代码起手,Go lang1.18入门精炼教程,由白丁入鸿儒,首次运行golang程序EP01
- 使用Protege4和CO-ODE工具构建OWL本体的实用指南-1.3版本(4.Building An OWL Ontology)
- JMeter初探五-配置元件与参数化
- 软件测试外包公司怎么样?有什么好处和坏处?为什么没人去?
- 8.Properties属性集合
- Go-控制语句那些事
- Domestic with Google earth software, see the download 19th level high-resolution satellite images so easy!
- 全网最全的软件测试基础知识整理(新手入门必学)
- 7.Collections tool class
猜你喜欢
.equals ==
本体开发日记03-理解代码
Ontology Development Diary 05-Strive to Understand SWRL (Part 2)
常用命令之思科常用基础配置
本体开发日记01-Jena配置环境变量
Web请求原理
软件测试面试中,面试官问你一些比较“刁难”的问题你会怎么回答
What are the basic concepts of performance testing?What knowledge do you need to master to perform performance testing?
HD Satellite Map Browser
STM32F103实现IAP在线升级应用程序
随机推荐
"The camera can't be used" + win8.1 + DELL + external camera + USB drive-free solution
6.Map interface and implementation class
[Environmental Construction] tensorrt
手机APP测试流程规范和方法你知道多少?
本体开发日记05-努力理解SWRL(下)
Do you know the principles of test cases and how to write defect reports?
性能测试报告包括哪些内容?模板范文哪里找?看这里
接口测试主要测试哪方面?需要哪些技能?要怎么学习?
Cisco common basic configuration of common commands
makefile学习-解决目标文件输出路径问题
条件和递归
try catch 对性能影响
2. Byte stream
你一定要看的安装及卸载测试用例的步骤及方法总结
What does the test plan include?What is the purpose and meaning?
Anti App so层对抗分析
本体开发日记05-努力理解SWRL(Usage Suggestions)
Ontology Development Diary 05-Strive to Understand SWRL (Part 2)
Another implementation of lateral view explode
问卷问题和答案的合并