dualpca2.m.svn-base
来自「a function inside machine learning」· SVN-BASE 代码 · 共 50 行
SVN-BASE
50 行
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 + =
减小字号Ctrl + -
显示快捷键?