📄 dualgreedypcatrain.m.svn-base
字号:
function [subspaceInfo, trainInfo] = dualGreedyPCATrain(trainData, params)
%A kernel greedy version of PCA
if (nargin ~= 2)
fprintf('%s\n', help(sprintf('%s', mfilename)));
error('Incorrect number of inputs - see above usage instructions.');
end
[nameX, nameY] = getSpaceNames(params);
[numTrainExamples, numFeatures] = getDataFieldSize(trainData, nameX);
%Store parameters
T = params.iterations;
kernelFunction = char(params.X.kernel.name);
kernelParams = params.X.kernel.params;
if isfield(params.X, 'kernelCols')
kernelCols = params.X.kernelCols;
else
kernelCols = numTrainExamples;
end
trainKj = feval(kernelFunction, getDataFieldValue(trainData, nameX), getDataFieldValue(trainData, nameX), kernelParams);
b = sparse(numTrainExamples, T);
tau = zeros(numTrainExamples, T);
%Do the training
for i=1:T
displayCount(i, T, 30);
%Find dual projection vector
b(:, i) = dualMaxSparseVariance2(trainKj, trainKj, 0, 0, kernelCols);
tau(:, i) = trainKj'*b(:, i);
%Now, deflate K
trainKj = trainKj - tau(:, i)*tau(:, i)';
end
%trainKj should be symmetric - check (it is)
trainInfo.data = data;
trainInfo.data = addDataField(trainInfo.data, 'X', tau, 'examples');
subspaceInfo = struct;
subspaceInfo.b = b;
subspaceInfo.tau = tau;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -