4

I have an Nx2 input matrix called X. I also have the output values Y which is a vector Nx1. I create some data to test as follows:

Xtest=linspace(x_min,x_max,n);
Ytest=linspace(y_min,y_max,n);

So, matrix Z is of nx2 dimensions and is going to be used as my test points. I use the default tuning of the parameters found in the demo provided with the GPML lib which is as follows:

covfunc = {@covMaterniso, 3}; 
ell = 1/4; sf = 1; 
hyp.cov = log([ell; sf]);
likfunc = @likGauss; 
sn = 0.1;
hyp.lik = log(sn);

and then use the gp function:

[ymu ys2 fmu fs2] = gp(hyp, @infExact, [], covfunc, likfunc, x, y, z);

I expected ymu to be the predicted value for each testing value in z. When I plot this like this:

[L1,L2]=meshgrid(Xtest',Ytest');
[mu,~]=meshgrid(ymu,ymu);
surf(L1,L2,ymu);

I get a strange surface. i.e i get stripes of coloured area rather some Gaussian like structure which is expected. The data in X and Y are real life data. This is what I get from my code

What I would expect: What I would expect

JustCurious
  • 1,848
  • 3
  • 30
  • 57
  • can you upload a picture of the plot that you think is wrong? also, you don't have a mean function, so is your training data standardized to be approx standardized Gaussian? If you didn't, your hyperparameter fitting could be completely messed up. – Yanshuai Cao Jan 23 '14 at 23:01
  • how can i upload a picture here? I think it should work without the mean function since my data are good enough when observed with the eye. – JustCurious Jan 23 '14 at 23:26
  • edit your post, and there's a button for picture, click and upload. – Yanshuai Cao Jan 23 '14 at 23:28
  • if your Y has a large non zero mean, or its scale is large comparing to the initial scale hyperparameter you specified, then optimization of hyperparameter could run into numerical issues. report the learned hyperparameters and I can tell you if it's reasonable. – Yanshuai Cao Jan 23 '14 at 23:30
  • can you see the picture now? – JustCurious Jan 23 '14 at 23:33
  • can you overlay your training data points as well? to see if the fit is actually reasonable. Right now, it looks like your function is not varying in one of the variables. It could be a simple bug or it could be the way your data is actually. – Yanshuai Cao Jan 23 '14 at 23:37
  • I plotted the points as well... – JustCurious Jan 24 '14 at 00:18

1 Answers1

3

You're using it wrong. Your z variable should be given by [L1(:),L2(:)]. Then what you should plot is:

surf(L1,L2,reshape(ymu,size(L1)));
Patrick Mineault
  • 741
  • 5
  • 11