How to use the gaussian process regression function in matlab 2015b ?
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Regis
am 15 Nov. 2015
Beantwortet: Gautam Pendse
am 19 Nov. 2015
I'm trying to reproduce the picture at the end of the documentation: http://www.mathworks.com/help/stats/gaussian-process-regression-models.html the one on the left.
However, I cant quite do it.
This is what I have so far:
fun = @(x) x.*sin(x);
xx = linspace(0,10,100)';
yy = fun(xx);
nd = 5;
xd = linspace(1,9,nd)';
yd = fun(xd);
gp = fitrgp(xd,yd,'KernelFunction','squaredexponential');
figure(1); clf
plot(xx,yy, 'g-')
hold on
plot(xx,predict(gp,xx), 'r-')
However this doesn't work. It looks like the beta parameter is set at a constant and you can change the basis function used. But, why use Gaussian Processes if you have to provide it with the function you're trying to emulate? I'm trying to use GPs to model simulation data and the process that generate them can't be written as a nice function (basis function).
0 Kommentare
Akzeptierte Antwort
Gautam Pendse
am 18 Nov. 2015
Hi Regis,
Here's how you can reproduce the doc example:
% True curve.
fun = @(x) x.*sin(x);
xx = linspace(0,10,100)';
yy = fun(xx);
% Example points (from doc). You can do xd = linspace(1,9,nd)' as well
% but you will get a different fit.
xd = [1,3,5,6,7,8]';
yd = fun(xd);
% Fit a GP model. Initialize 'Sigma' to a small value. A GP estimates
% its parameters by maximizing the marginal log likelihood. Depending
% on the data, the marginal log likelihood can have multiple local
% optima corresponding to different interpretations of the data.
% Initializing 'Sigma' to a small value discourages the high noise
% variance interpretation of the data.
gp = fitrgp(xd,yd,'KernelFunction','squaredexponential','sigma',0.1,'verbose',1);
% Plot.
figure(1); clf
plot(xx,yy, 'r-.')
hold on;
[ypred,~,yint] = predict(gp,xx);
plot(xx,ypred, 'g-');
plot(xx,yint(:,1),'k-');
plot(xx,yint(:,2),'m-');
plot(xd,yd,'ro');
legend('f(x) = x.*sin(x)','GPR predictions','Lower 95% interval','Upper 95% interval','Observations','Location','Best');
Hope this helps,
Gautam
Weitere Antworten (1)
Gautam Pendse
am 19 Nov. 2015
Replace xd and yd by something like this:
xd = linspace(0,10,20)';
yd = fun(xd) + 1*randn(20,1);
Rest of the code remains the same.
Gautam
0 Kommentare
Siehe auch
Kategorien
Mehr zu Gaussian Process Regression finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!