function results = simulateIncrementalLearning ( labeledData, unlabeledData, testData, b_efficientUpdates, idxToAdd ) % Copyright (c) by Alexander Freytag, 2013-11-13. if ( (nargin < 4) || isempty (b_efficientUpdates) ) b_efficientUpdates = true; end if ( (nargin < 5) || isempty (idxToAdd) ) idxToAdd = 1:length(unlabeledData.y); end labeled_X = labeledData.X; labeled_y = labeledData.y; unlabeled_X = unlabeledData.X; unlabeled_y = unlabeledData.y; test_X = testData.X; test_y = testData.y; % output ARRscore = zeros ( 1+length(unlabeled_y ) ,1 ); times = zeros ( 1+length(unlabeled_y ) ,1 ); %% (2.1) initially train the model % settings gpnoise = 0.1; cov = {'covmin'}; loghyper = []; K = feval(cov{:},loghyper, labeled_X'); timeStamp_trainStart = tic; model = learn_multiclass_gp(K, labeled_y', gpnoise); times(1) = toc(timeStamp_trainStart); %% (2.2) test initial model %copute similarities to test samples Ks = feval(cov{:},loghyper, labeled_X', test_X'); [~, pred_labels] = test_multiclass_gp(model, Ks); % multi-class accuracy: 1/(# classes) \sum accuracy_per_class numCorrect = norm(double(pred_labels == test_y'), 1); testSize = double(size(test_y,1)); ARRscore(1) = double(numCorrect)/double(testSize); %% (3) perform incremental updates for i_idxAdd = 1:length(unlabeled_y) %%%%%%%%%%%%%% %% update %%%%%%%%%%%%%% % get new sample to add xNew = unlabeled_X( :, idxToAdd(i_idxAdd) ); % simulate asking of user yNew = unlabeled_y ( idxToAdd(i_idxAdd) ); if ( b_efficientUpdates ) % compute kernel values kss = feval(cov{:},loghyper, xNew'); ksNewSample = feval(cov{:},loghyper, labeled_X', xNew'); timeStamp_updateStart = tic; model = update_multiclass_gp(model, kss, ksNewSample, yNew); times(i_idxAdd+1) = toc(timeStamp_updateStart); labeled_X = [ labeled_X, xNew]; else kss = feval(cov{:},loghyper, xNew'); ksNewSample = feval(cov{:},loghyper, labeled_X', xNew'); K = [K, ksNewSample;ksNewSample',kss]; labeled_X = [ labeled_X, xNew]; labeled_y = [ labeled_y; yNew]; timeStamp_updateStart = tic; model = learn_multiclass_gp(K, labeled_y', gpnoise); times(i_idxAdd+1) = toc(timeStamp_updateStart); end %%%%%%%%%%%%% %% test %%%%%%%%%%%%% Ks = [Ks; feval(cov{:},loghyper, xNew', test_X')]; [~, pred_labels] = test_multiclass_gp(model, Ks); % multi-class accuracy: 1/(# classes) \sum accuracy_per_class numCorrect = norm(double(pred_labels == test_y'), 1); testSize = double(size(test_y,1)); ARRscore(i_idxAdd+1) = double(numCorrect)/double(testSize); end results.ARR = ARRscore; results.times = times; end