📄 dualpca2.m.svn-base
字号:
function [newTrainX, newTestX, subspaceInfo] = dualPCA2(trainX, trainY, testX, params)
%Perform kernel KPCA on a dataset. Should use less memory for large test sets
if (nargin ~= 4)
fprintf('%s\n', help(sprintf('%s', mfilename)));
error('Incorrect number of inputs - see above usage instructions.');
end
numTrainExamples = size(trainX, 1);
numTestExamples = size(testX, 1);
numFeatures = size(trainX, 2);
%Store parameters
T = params.iterations;
chunkSize = params.chunkSize; %Process the test set in chunks
kernelFunction = char(params.kernelFunctionName);
kernelParams = params;
numTestChunks = ceil(numTestExamples/chunkSize);
trainK = feval(kernelFunction, trainX, trainX, kernelParams);
T = min(T, rank(trainK));
%Do the training
tic
[B, D] = eigs(trainK, T);
trainTime = toc;
D2 = diag(diag(D).^(-1/2));
newTrainX = trainK*B*D2;
tic;
newTestX = zeros(numTestExamples, T);
for i=1:numTestChunks
startExample = (i-1)*chunkSize+1;
endExample = min(i*chunkSize, numTestExamples);
tempTestTrainK = feval(kernelFunction, testX(startExample:endExample, :), trainX, kernelParams);
newTestX(startExample:endExample, :) = tempTestTrainK*B*D2;
end
testTime = toc;
subspaceInfo = struct;
subspaceInfo.trainTime = trainTime;
subspaceInfo.testTime = testTime;
%subspaceInfo.D = D;
%subspaceInfo.B = B;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -