当前位置:网站首页>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) = [];
边栏推荐
- 关于一次性通过CISSP考试的一点经验分享
- JS报错-Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on...
- WAVE SUMMIT 2022深度学习开发者峰会
- 软件测试面试题目:请你列举几个物品的测试方法怎么说?
- makefile学习-解决目标文件输出路径问题
- 黑盒测试常见错误类型说明及解决方法有哪些?
- JMeter参数化4种实现方式
- Cisco common basic configuration of common commands
- China to create a domestic "Google Earth" clarity scary
- 6.Map interface and implementation class
猜你喜欢
.ts 音频文件转换成 .mp3 文件
web测试之功能测试常用的方法有哪几种?有什么要点要注意?
性能测试包括哪些方面?分类及测试方法有哪些?
软件测试面试常见问题及答案(发散思维、接口、性能、概念、)
Do you know the principles of test cases and how to write defect reports?
软件测试个人求职简历该怎么写,模板在这里
Summary of steps and methods for installing and uninstalling test cases that you must read
秒拍app分析
本体开发日记04-努力理解protege的某个方面
QT sets the icon of the exe executable
随机推荐
接口测试的基础流程和用例设计方法你知道吗?
性能测试报告包括哪些内容?模板范文哪里找?看这里
软件测试面试常见问题及答案(发散思维、接口、性能、概念、)
7.Collections tool class
The div simulates the textarea text box, the height of the input text is adaptive, and the word count and limit are implemented
Do you know the principles of test cases and how to write defect reports?
unittest测试框架原理及测试流程解析,看完绝对有提升
本体开发日记04-努力理解protege的某个方面
A first look at the code to start, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the first time to run the golang program EP01
字符串
Go-goroutine 的那些事
Go-控制语句那些事
本体开发日记02-sparql简单查询
What are the basic concepts of performance testing?What knowledge do you need to master to perform performance testing?
Another implementation of lateral view explode
自动化测试简历编写应该注意哪方面?有哪些技巧?
Global 19 Google Satellite Map Free View Download
Redis high availability
JS-常用方法整理
本体开发日记05-努力理解SWRL(Usage Suggestions)