regress_gp
"linear")"rbf")"linear", Sp)"rbf", theta)"rbf", theta, g)"rbf", theta, g, alpha)Regression using Gaussian Processes.
[Yfit, Yint, m, K] = regress_gp (X,
Y, Xfit) will estimate a linear Gaussian Process model m
in the form Y = X' * m, where X is an
matrix with observations in dimensional space
and Y is an column vector as the dependent variable. The
information about errors of the predictions (interpolation/extrapolation) is
given by the covarianve matrix K.
By default, the linear model defines the prior covariance of m as
Sp = 100 * eye (size (X, 2) + 1). A custom prior
covariance matrix can be passed as Sp, which must be a
positive definite matrix. The model is evaluated for input Xfit, which
must have the same columns as X, and the estimates are returned in
Yfit along with the estimated variation in Yint.
Yint(:,1) contains the upper boundary estimate and
Yint(:,1) contains the upper boundary estimate with respect to
Yfit.
[Yfit, Yint, Ysd, K] = regress_gp (X,
Y, Xfit, will estimate a Gaussian Process model
with a Radial Basis Function (RBF) kernel with default parameters
"rbf")theta = 5, which corresponds to the characteristic lengthscale,
and g = 0.01, which corresponds to the nugget effect, and
alpha = 0.05 which defines the confidence level for the
estimated intervals returned in Yint. The function also returns the
predictive covariance matrix in Ysd. For multidimensional predictors
X the function will automatically normalize each column to a zero mean
and a standard deviation to one.
Run demo regress_gp to see examples.
See also: regress, regression_ftest, regression_ttest
Source Code: regress_gp
## Linear fitting of 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
Xfit = linspace (-2, 2, 10)';
## Fit regression model
[Yfit, Yint, m] = regress_gp (X, Y, Xfit);
## Plot fitted data
plot (X, Y, "xk", Xfit, Yfit, "r-", Xfit, Yint, "b-");
title ("Gaussian process regression with linear kernel");
|
## Linear fitting of 2D Data
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
[x1, x2] = meshgrid (linspace (-1, 1, 10));
Xfit = [x1(:), x2(:)];
## Fit regression model
[Ypred, Yint, Ysd] = regress_gp (X, Y, Xfit);
Ypred = reshape (Ypred, 10, 10);
YintU = reshape (Yint(:,1), 10, 10);
YintL = reshape (Yint(:,2), 10, 10);
## Plot fitted data
plot3 (X(:,1), X(:,2), Y, ".k", "markersize", 16);
hold on;
h = mesh (x1, x2, Ypred, zeros (10, 10));
set (h, "facecolor", "none", "edgecolor", "yellow");
h = mesh (x1, x2, YintU, ones (10, 10));
set (h, "facecolor", "none", "edgecolor", "cyan");
h = mesh (x1, x2, YintL, ones (10, 10));
set (h, "facecolor", "none", "edgecolor", "cyan");
hold off
axis tight
view (75, 25)
title ("Gaussian process regression with linear kernel");
|
## Projection over basis function with linear kernel
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
Xfit = linspace (-1, 1, 100)';
pxi = [sqrt(abs(Xfit)), Xfit, Xfit.^2, Xfit.^3];
## Define a prior covariance assuming that the sqrt component is not present
Sp = 100 * eye (size (px, 2) + 1);
Sp(2,2) = 1; # We don't believe the sqrt(abs(X)) is present
## Fit regression model
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, Sp);
## Plot fitted data
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("Linear kernel over basis function with prior covariance");
|
## Projection over basis function with linear kernel
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
Xfit = linspace (-1, 1, 100)';
pxi = [sqrt(abs(Xfit)), Xfit, Xfit.^2, Xfit.^3];
## Fit regression model without any assumption on prior covariance
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi);
## Plot fitted data
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("Linear kernel over basis function without prior covariance");
|
## Projection over basis function with rbf kernel
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
Xfit = linspace (-1, 1, 100)';
pxi = [sqrt(abs(Xfit)), Xfit, Xfit.^2, Xfit.^3];
## Fit regression model with RBF kernel (standard parameters)
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, "rbf");
## Plot fitted data
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("RBF kernel over basis function with standard parameters");
text (-0.5, 4, "theta = 5\n g = 0.01");
|
## Projection over basis function with rbf kernel
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
Xfit = linspace (-1, 1, 100)';
pxi = [sqrt(abs(Xfit)), Xfit, Xfit.^2, Xfit.^3];
## Fit regression model with RBF kernel with different parameters
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, "rbf", 10, 0.01);
## Plot fitted data
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("GP regression with RBF kernel and non default parameters");
text (-0.5, 4, "theta = 10\n g = 0.01");
## Fit regression model with RBF kernel with different parameters
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, "rbf", 50, 0.01);
## Plot fitted data
figure
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("GP regression with RBF kernel and non default parameters");
text (-0.5, 4, "theta = 50\n g = 0.01");
## Fit regression model with RBF kernel with different parameters
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, "rbf", 50, 0.001);
## Plot fitted data
figure
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("GP regression with RBF kernel and non default parameters");
text (-0.5, 4, "theta = 50\n g = 0.001");
## Fit regression model with RBF kernel with different parameters
[Yfit, Yint, Ysd] = regress_gp (px, Y, pxi, "rbf", 50, 0.05);
## Plot fitted data
figure
plot (X, Y, "xk;Data;", Xfit, Yfit, "r-;Estimation;", ...
Xfit, polyval (pp, Xfit), "g-;True;");
axis tight
axis manual
hold on
plot (Xfit, Yint(:,1), "m-;Upper bound;", Xfit, Yint(:,2), "b-;Lower bound;");
hold off
title ("GP regression with RBF kernel and non default parameters");
text (-0.5, 4, "theta = 50\n g = 0.05");
|
## RBF fitting on noiseless 1D Data
x = [0:2*pi/7:2*pi]';
y = 5 * sin (x);
## Predictive grid of 500 equally spaced locations
xi = [-0.5:(2*pi+1)/499:2*pi+0.5]';
## Fit regression model with RBF kernel
[Yfit, Yint, Ysd] = regress_gp (x, y, xi, "rbf");
## Plot fitted data
r = mvnrnd (Yfit, diag (Ysd)', 50);
plot (xi, r', "c-");
hold on
plot (xi, Yfit, "r-", xi, Yint, "b-");
plot (x, y, ".k", "markersize", 20)
plot (xi, 5 * sin (xi), "-y");
xlim ([-0.5,2*pi+0.5]);
ylim ([-10,10]);
hold off
title ("GP regression with RBF kernel on noiseless 1D data");
text (-0.5, 4, "theta = 5\n g = 0.01");
|
## RBF fitting on noisy 1D Data
x = [0:2*pi/7:2*pi]';
x = [x; x];
y = 5 * sin (x) + randn (size (x));
## Predictive grid of 500 equally spaced locations
xi = [-0.5:(2*pi+1)/499:2*pi+0.5]';
## Fit regression model with RBF kernel
[Yfit, Yint, Ysd] = regress_gp (x, y, xi, "rbf");
## Plot fitted data
r = mvnrnd (Yfit, diag (Ysd)', 50);
plot (xi, r', "c-");
hold on
plot (xi, Yfit, "r-", xi, Yint, "b-");
plot (x, y, ".k", "markersize", 20)
plot (xi, 5 * sin (xi), "-y");
xlim ([-0.5,2*pi+0.5]);
ylim ([-10,10]);
hold off
title ("GP regression with RBF kernel on noisy 1D data");
text (-0.5, 4, "theta = 5\n g = 0.01");
|