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 + -
显示快捷键?