📄 dualgreedygstest.m.svn-base
字号:
%A script to test gram schmidt
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 = 5;
params.iterations = T;
params.X.kernel = getDefaultLinearKernel;
[subspaceInfo, trainInfo] = dualGreedyGSTrain(trainData, params);
[testInfo, projectionInfo] = dualGreedyGSProject(trainData, testData, subspaceInfo, params);
%Compare against the primal space Gram Schmidt
testX = getDataFieldValue(testData, 'X');
trainX = getDataFieldValue(trainData, 'X');
trainXj = trainX;
numTrainExamples = size(trainXj, 1);
Q = zeros(numTrainExamples, T);
b = zeros(numTrainExamples, T);
for j=1:T
%First, pick the example with max norm
[maxNorm, maxInd] = max(sum(trainXj.^2, 2));
b(maxInd, j) = 1/norm(trainXj(maxInd, :));
Q(:, j) = trainXj(maxInd, :)'/norm(trainXj(maxInd, :));
%Deflate Xj
trainXj = trainXj - trainXj*Q(:, j)*Q(:, j)';
end
%Features are X * Q
newTrainX = trainX*Q;
newTestX = testX*Q;
if norm(newTrainX - subspaceInfo.X.tau) > tol
error('Features using training set do not match those from primal version');
end
if norm(newTestX - getDataFieldValue(testInfo.data, 'X')) > tol
error('Features using training set do not match those from primal version');
end
if norm(b - subspaceInfo.X.b) > tol
error('Dual projection vectors using training set do not match those from primal version');
end
%Now we'll just check the project function by projecting the training
%examples
[subspaceInfo2, trainInfo2] = dualGreedyGSTrain(trainData, params);
[testInfo2, projectionInfo2] = dualGreedyGSProject(trainData, trainData, subspaceInfo2, params);
if norm(getDataFieldValue(trainInfo2.data, 'X') - getDataFieldValue(testInfo2.data, 'X')) > tol
error('Problem with projection function');
end
%Test against craigs code
trainK = trainX*trainX';
testTrainK = testX*trainX';
[p,gsind,gsnorm] = greedyGS(trainK, T);
[newTrainX2] = getProjections(p, trainK);
[newTestX2] = getProjections(p, testTrainK);
if norm(newTrainX - newTrainX2) > tol
error('Features on traning set do not match those of craigs');
end
if norm(newTestX - newTestX2) > tol
error('Features on traning set do not match those of craigs');
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -