123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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
|