📄 dualgreedypcatest.m.svn-base
字号:
% A script to test dualGreedyPCATrain
clear;
rand('state',21);
tol = 10^-7;
numExamples = 15;
numFeatures = 10;
X = rand(numExamples, numFeatures);
d = data;
d = addDataField(d, 'X', X, 'examples');
[trainData, testData] = splitData2(d, 2/3);
T = 7;
params.iterations = T;
params.X.kernel = getDefaultLinearKernel;
[subspaceInfo, trainInfo] = dualGreedyPCATrain(trainData, params);
[testInfo, projectionInfo] = dualGreedyPCAProject(trainData, testData, subspaceInfo, params);
%This should give 1's on the diagonal if normalised correctly
if norm(diag(subspaceInfo.b'*subspaceInfo.tau) - ones(T, 1)) > tol
error('Dual projections are not normalised correctly');
end
%Should give the primal projection direction in linear kernel case
u = inv(getDataFieldValue(trainData, 'X')'*getDataFieldValue(trainData, 'X'))*getDataFieldValue(trainData, 'X')'*subspaceInfo.tau;
if norm(u'*u - eye(T, T)) > tol
error('Primal projection directions are not correct');
end
%Compare against craigs version, for luck
trainK = getDataFieldValue(trainData, 'X')*getDataFieldValue(trainData, 'X')';
[p,pcaind,pcanorm] = greedyPCA(trainK, T);
[indices, elements] = findNonZeroElements(subspaceInfo.b);
if norm(indices - pcaind) > tol
error('Chosen dual directions are incorrect');
end
%Now compare projections on test set to craigs
testTrainK = getDataFieldValue(testData, 'X')*getDataFieldValue(trainData, 'X')';
[newTestX] = getProjections(p, testTrainK);
if norm(newTestX - getDataFieldValue(testInfo.data, 'X')) > tol
error('Prediction on the test set do not match with craigs');
end
%Check the prediction on the test set are correct
[subspaceInfo, trainInfo] = dualGreedyPCATrain(trainData, params);
[testInfo, projectionInfo] = dualGreedyPCAProject(trainData, trainData, subspaceInfo, params);
if norm(getDataFieldValue(trainInfo.data, 'X') - getDataFieldValue(testInfo.data, 'X')) > tol
error('Prediction on training set do not match when same dataset is used for testing');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -