regress_gp
Linear scalar regression using gaussian processes.
It estimates the model y = x’*m for x R^D and y in R.
The information about errors of the predictions (interpolation/extrapolation) is given
by the covarianve matrix K. If D==1 the inputs must be column vectors,
if D>1 then x is n-by-D, with n the number of data points. Sp defines
the prior covariance of m, it should be a (D+1)-by-(D+1) positive definite matrix,
if it is empty, the default is Sp = 100*eye(size(x,2)+1).
If xi inputs are provided, the model is evaluated and returned in yi. The estimation of the variation of yi are given in dy.
Run demo regress_gp to see an examples.
The function is a direc implementation of the formulae in pages 11-12 of Gaussian Processes for Machine Learning. Carl Edward Rasmussen and Christopher K. I. Williams. The MIT Press, 2006. ISBN 0-262-18253-X. available online at http://gaussianprocess.org/gpml/.
See also: regress
Source Code: regress_gp
## 1D Data
rand ("seed", 125);
x = 2 * rand (5, 1) - 1;
randn ("seed", 25);
y = 2 * x - 1 + 0.3 * randn (5, 1);
## Points for interpolation/extrapolation
xi = linspace (-2, 2, 10)';
[m, K, yi, dy] = regress_gp (x, y, [], xi);
plot (x, y, "xk", xi, yi, "r-", xi, bsxfun (@plus, yi, [-dy +dy]), "b-");
|
## 2D DataData
rand ("seed", 135);
x = 2 * rand (4, 2) - 1;;
randn ("seed", 35);
y = 2 * x(:,1) - 3 * x(:,2) - 1 + 1 * randn (4, 1);
## Mesh for interpolation/extrapolation
[xi, yi] = meshgrid (linspace (-1, 1, 10));
[m, K, zi, dz] = regress_gp (x, y, [], [xi(:), yi(:)]);
zi = reshape (zi, 10, 10);
dz = reshape (dz, 10, 10);
plot3 (x(:,1), x(:,2), y, ".g", "markersize", 8);
hold on;
h = mesh (xi, yi, zi, zeros (10, 10));
set (h, "facecolor", "none");
h = mesh (xi, yi, zi + dz, ones (10, 10));
set (h, "facecolor", "none");
h = mesh (xi, yi, zi - dz, ones (10, 10));
set (h, "facecolor", "none");
hold off
axis tight
view (80, 25)
|
## Projection over basis function
pp = [2, 2, 0.3, 1];
n = 10;
rand ("seed", 145);
x = 2 * rand (n, 1) - 1;
randn ("seed", 45);
y = polyval (pp, x) + 0.3 * randn (n, 1);
## Powers
px = [sqrt(abs(x)), x, x.^2, x.^3];
## Points for interpolation/extrapolation
xi = linspace (-1, 1, 100)';
pxi = [sqrt(abs(xi)), xi, xi.^2, xi.^3];
Sp = 100 * eye (size (px, 2) + 1);
Sp(2,2) = 1; # We don't believe the sqrt is present
[m, K, yi, dy] = regress_gp (px, y, Sp, pxi);
disp (m)
plot (x, y, "xk;Data;", xi, yi, "r-;Estimation;", ...
xi, polyval (pp, xi), "g-;True;");
axis tight
axis manual
hold on
plot (xi, bsxfun (@plus, yi, [-dy, +dy]), "b-");
hold off
1.133330
0.027267
1.244692
1.650627
-0.239160
|