function [eigvector, eigvalue, elapse] = LGE(W, D, options, data)
% LGE: Linear Graph Embedding
%
% [eigvector, eigvalue] = LGE(W, D, options, data)
%
% Input:
% data - data matrix. Each row vector of data is a
% sample vector.
% W - Affinity graph matrix.
% D - Constraint graph matrix.
% LGE solves the optimization problem of
% a* = argmax (a'data'WXa)/(a'data'DXa)
% Default: D = I
%
% options - Struct value in Matlab. The fields in options
% that can be set:
%
% ReducedDim - The dimensionality of the reduced
% subspace. If 0, all the dimensions
% will be kept. Default is 30.
%
% Regu - 1: regularized solution,
% a* = argmax (a'X'WXa)/(a'X'DXa+ReguAlpha*I)
% 0: solve the sinularity problem by SVD (PCA)
% Default: 0
%
% ReguAlpha - The regularization parameter. Valid
% when Regu==1. Default value is 0.1.
%
% ReguType - 'Ridge': Tikhonov regularization
% 'Custom': User provided
% regularization matrix
% Default: 'Ridge'
% regularizerR - (nFea x nFea) regularization
% matrix which should be provided
% if ReguType is 'Custom'. nFea is
% the feature number of data
% matrix
%
% PCARatio - The percentage of principal
% component kept in the PCA
% step. The percentage is
% calculated based on the
% eigenvalue. Default is 1
% (100%, all the non-zero
% eigenvalues will be kept.
% If PCARatio > 1, the PCA step
% will keep exactly PCARatio principle
% components (does not exceed the
% exact number of non-zero components).
%
%
% Output:
% eigvector - Each column is an embedding function, for a new
% sample vector (row vector) x, y = x*eigvector
% will be the embedding result of x.
% eigvalue - The sorted eigvalue of the eigen-problem.
% elapse - Time spent on different steps
%
%
%
% Examples:
%
% See also LPP, NPE, IsoProjection, LSDA.
%
%
%Reference:
%
% Deng Cai, Xiaofei He, Yuxiao Hu, Jiawei Han, and Thomas Huang,
% "Learning a Spatially Smooth Subspace for Face Recognition", CVPR'2007
%
% version 2.1 --June/2007
% version 2.0 --May/2007
% version 1.0 --Sep/2006
%
% Written by Deng Cai (dengcai2 AT cs.uiuc.edu)
%
if ~exist('data','var')
global data;
end
if (~exist('options','var'))
options = [];
end
if isfield(options,'ReducedDim')
Dim = options.ReducedDim;
else
Dim = 30;
end
if ~isfield(options,'Regu') | ~options.Regu
bPCA = 1;
if ~isfield(options,'PCARatio')
options.PCARatio = 1;
end
else
bPCA = 0;
if ~isfield(options,'ReguType')
options.ReguType = 'Ridge';
end
if ~isfield(options,'ReguAlpha')
options.ReguAlpha = 0.1;
end
end
bD = 1;
if ~exist('D','var') | isempty(D)
bD = 0;
end
[nSmp,nFea] = size(data);
if size(W,1) ~= nSmp
error('W and data mismatch!');
end
if bD & (size(D,1) ~= nSmp)
error('D and data mismatch!');
end
tmp_T = cputime;
bChol = 0;
if bPCA & (nSmp > nFea) & (options.PCARatio >= 1)
if bD
DPrime = data'*D*data;
else
DPrime = data'*data;
end
if issparse(DPrime)
DPrime = full(DPrime);
end
DPrime = max(DPrime,DPrime');
[R,p] = chol(DPrime);
if p == 0
bPCA = 0;
bChol = 1;
end
end
%======================================
% SVD
%======================================
if bPCA
if nSmp > nFea
ddata = data'*data;
if issparse(ddata)
ddata = full(ddata);
end
ddata = max(ddata,ddata');
[eigvector_PCA, eigvalue_PCA] = eig(ddata);
eigvalue_PCA = diag(eigvalue_PCA);
clear ddata;
maxEigValue = max(abs(eigvalue_PCA));
eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);
eigvalue_PCA(eigIdx) = [];
eigvector_PCA(:,eigIdx) = [];
[junk, index] = sort(-eigvalue_PCA);
eigvalue_PCA = eigvalue_PCA(index);
eigvector_PCA = eigvector_PCA(:, index);
%=======================================
if options.PCARatio > 1
idx = options.PCARatio;
if idx < length(eigvalue_PCA)
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector_PCA = eigvector_PCA(:,1:idx);
end
elseif options.PCARatio < 1
sumEig = sum(eigvalue_PCA);
sumEig = sumEig*options.PCARatio;
sumNow = 0;
for idx = 1:length(eigvalue_PCA)
sumNow = sumNow + eigvalue_PCA(idx);
if sumNow >= sumEig
break;
end
end
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector_PCA = eigvector_PCA(:,1:idx);
end
%=======================================
if bD
data = data*eigvector_PCA;
else
eigvalue_PCA = eigvalue_PCA.^-.5;
data = (data*eigvector_PCA).*repmat(eigvalue_PCA',nSmp,1);
end
else
ddata = data*data';
if issparse(ddata)
ddata = full(ddata);
end
ddata = max(ddata,ddata');
[eigvector, eigvalue_PCA] = eig(ddata);
eigvalue_PCA = diag(eigvalue_PCA);
clear ddata;
maxEigValue = max(eigvalue_PCA);
eigIdx = find(eigvalue_PCA/maxEigValue < 1e-12);
eigvalue_PCA(eigIdx) = [];
eigvector(:,eigIdx) = [];
[junk, index] = sort(-eigvalue_PCA);
eigvalue_PCA = eigvalue_PCA(index);
eigvector = eigvector(:, index);
%=======================================
if options.PCARatio > 1
idx = options.PCARatio;
if idx < length(eigvalue_PCA)
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector = eigvector(:,1:idx);
end
elseif options.PCARatio < 1
sumEig = sum(eigvalue_PCA);
sumEig = sumEig*options.PCARatio;
sumNow = 0;
for idx = 1:length(eigvalue_PCA)
sumNow = sumNow + eigvalue_PCA(idx);
if sumNow >= sumEig
break;
end
end
eigvalue_PCA = eigvalue_PCA(1:idx);
eigvector = eigvector(:,1:idx);
end
%=======================================
eigvalue_PCA = eigvalue_PCA.^.5;
eigvalue_PCAMinus = eigvalue_PCA.^-1;
eigvector_PCA = (data'*eig
lsdasvm.rar_LSDA_lsda matlab_学习机 matlab_支持向量_降维方法
版权申诉
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
![avatar](https://profile-avatar.csdnimg.cn/fca2fc36c4174e7caf12f1c9ba2c9265_weixin_42657024.jpg!1)
邓凌佳
- 粉丝: 66
- 资源: 1万+
最新资源
- 1212338883_2402103_9.4.1.7_20240624104230_679666580_a.apk
- 机器学习课程设计报告基本大纲
- 基于LoRa的主从机农田监测系统原理图
- PTC Creo View 是由 PTC 公司开发的一款专业的三维可视化软件,专为工程设计和制造领域而设计
- torchvision中CIFAR10数据集
- 山东大学面向对象编程考试内容的详细归纳
- 基于LoRa的主从机农田监测系统代码
- 计算机组成原理第六版课后习题可能涉及的一些主要内容和概念
- Visual Studio 最新版一键安装包(何时安装何时就可以最新版)
- Matplotlib - Matplotlib tutorial - Nicolas P. Rougier
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)