nmse = 0.042
-
-
Save caub/9462102 to your computer and use it in GitHub Desktop.
| %% Kernel Recursive Least Square demo on Santa-fe laser series | |
| % using krls resources on this page http://web.mit.edu/~wingated/www/resources.html | |
| %% load data and prepare inputs | |
| ydat = [urlread('http://www-psych.stanford.edu/~andreas/Time-Series/SantaFe/A.dat') urlread('http://www-psych.stanford.edu/~andreas/Time-Series/SantaFe/A.cont')]; | |
| y = textscan(ydat,'%f'); | |
| y=y{1}(1:1100)/256; | |
| % y = (sin((1:115)*pi/5)+0.05*randn(1,115))'; | |
| % set an auto-regressive matrix for the inputs | |
| X = zeros(length(y), 40); | |
| for i=1:size(X,2) | |
| X(:,i) = [ repmat(NaN, i, 1); y(1:end-i)]; | |
| end | |
| %% kernel-rls regression | |
| %parameters | |
| % - here we test them directly, normally we must allocate room for | |
| % cross-validation in order to find optimal paramaters in a grid. | |
| % Once the best parameters are assessed they can evaluated on the | |
| % training+validation set | |
| kernel_func = @rbf4nn; % the Gaussian kernel | |
| kparam = 0.9; % the variance of the Gaussian | |
| ald_thresh = 0.01; % the linear dependence threshold | |
| n = 40; % uto-regressive window size | |
| ltest = 100; | |
| Ytest = y(end-ltest+1:end); | |
| X_ = X(n+1:end-ltest, 1:n); | |
| Y_ = y(n+1:end-ltest); | |
| %we could try to train with missing values, starting at 2 instead of n+1 | |
| ltraining = size(X_,1); | |
| lvalidation= 0; | |
| kp = krls_init( kernel_func, kparam, ald_thresh, X_(1,:)', Y_(1) ); | |
| for i = 2:ltraining | |
| kp = krls( kp, X_(i,:)', Y_(i) ); | |
| end; | |
| v = [Y_(ltraining) X_(ltraining, 1:n-1)]; | |
| prediction = zeros(ltest, 1); | |
| for j=1:ltest | |
| prediction(j) = krls_query( kp, v' ); | |
| v = [prediction(j) v(1:n-1)]; | |
| end | |
| testNMSE = 1-goodnessOfFit(Ytest, prediction, 'NMSE') | |
| %plot(1:length(Y_),Y_,'b-',1:length(Y_),r.f,'r--') | |
| %figure,plot(1:length(Yvalidation),Yvalidation,'b-',1:length(Yvalidation),r_.f,'r--') | |
| %figure | |
| plot(1:length(Ytest),Ytest,'b-',1:length(Ytest),prediction,'r--') | |
| %% reinforce training | |
| % detailled p:28 of http://webee.technion.ac.il/people/rmeir/Publications/KrlsReport.pdf | |
| ireinforce = 10; | |
| nmses = repmat(testNMSE,1,ireinforce); | |
| predictions = repmat(prediction,1,ireinforce); | |
| for i=2:ireinforce | |
| % make new inputs, by injecting the fitted values | |
| fitted = zeros(ltraining,1); | |
| for j = i:ltraining | |
| fitted(j)=krls_query( kp, X_(j,:)' ); | |
| end | |
| X_(2:end,2:end) = X_(1:end-1,1:end-1); | |
| X_(i:end,1) = fitted(1:end-i+1); | |
| for j = i:ltraining | |
| kp = krls( kp, X_(j,:)', Y_(j) ); | |
| end; | |
| v = [Y_(ltraining) X_(ltraining, 1:n-1)]; | |
| prediction = zeros(ltest, 1); | |
| for j=1:ltest | |
| prediction(j) = krls_query( kp, v' ); | |
| v = [prediction(j) v(1:n-1)]; | |
| end | |
| nmses(i) = 1-goodnessOfFit(Ytest, prediction, 'NMSE'); | |
| predictions(:,i) = prediction; | |
| %plot(1:length(Ytest),Ytest,'b-',1:length(Ytest),predictions,'r--') | |
| end | |
| %% plot best reinforcement | |
| [minNMSE, iNMSE] = min(nmse); | |
| figure | |
| plot(1:length(Ytest),Ytest,'b-',1:length(Ytest),predictions(:,iNMSE),'r--') | |
| fprintf('nmse= %f', minNMSE); |
Hi sadly no, I've no backup of the data
Hello Cyril,
I hope you are doing well.
So I am still looking at the KRLS algorithm, and I have few questions if you can help me.
So you wrote above that the nmse = 0.042, but I am not getting that value for the "testNMSE". Shouldn't they be the same?
Also, for the last of the code entitled "plot best reinforcement", I am getting the error "Unrecognized function or variable 'nmse'." However, I got the same plot you got.
Can you please help me with those two inquiries? And is there any way that I can cite your work here?
I would really appreciate your help!
Thank you
I don't remember at all about this (it's 10 years old), done with matlab I think, I can see nmses is defined, but not nmse, that's strange, try testing out, replace nmse by nmses or something
Thank you for your response.
Actually I tried to rewrite the code line-by-line to understand what is happening at each line. And finally, I was able to achieve the results you got. However, I am not sure why the “KRLS paper” was able to achieve a lower error (NMSE = 0.026)
me too, that's the best I could achieve

Hello Cyril,
I am trying to access the data, but I believe the link is not working. Do you have any idea how I can access the data?