How to make a 2D Gaussian Process using GPML (Matlab) for regression?

一个人想着一个人 提交于 2019-12-19 09:15:46

问题


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.

What I would expect:


回答1:


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)));


来源:https://stackoverflow.com/questions/21320964/how-to-make-a-2d-gaussian-process-using-gpml-matlab-for-regression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!