Problem with function handle for Basis function in fitrgp

8 vues (au cours des 30 derniers jours)
Stefan Hövel
Stefan Hövel le 27 Jan 2020
Commenté : Adam Danz le 21 Nov 2020
I like to use a custom Basis function for fitrgp.
beta0 = [1.5,2.0];
hfcn = @(X) (beta0(1).*(X).^beta0(2));
This should be a powerMean-function.
If I call:
gprMdl1 = fitrgp(x,y,'BasisFunction',hfcn,'Beta',beta0)
with dummy-data from:
load(fullfile(matlabroot,'examples','stats','gprdata2.mat'))
I get
gprMdl1.Beta = 0.0019
Why is gprMdl1.Beta not 1x2 like beta0? Is it posible to optimize custom parameters in Basis function (like beta0)?
  2 commentaires
Adam Danz
Adam Danz le 28 Jan 2020
"Why is gprMdl1.Beta not 1x2 like beta0?"
That basis function will return as many values as provided in the input X. X is multiplied by 1 value (beta0(1)) and added to one value (beta0(2)). So if X is only 1 value, the output should only be one value. If x is 1x5, the output will be 1x5; if x is 3x4, so is the output.
Adam Danz
Adam Danz le 21 Nov 2020
>gprMdl1.Beta is not 3x1, there is still only one beta. Could you help me check this?
Check this out.....
% Your function
beta0 = [1;2;3];
hfcn = @(X) ([ones(size(X,1),1),X,X.^2]*beta0);
% Test some inputs-outputs
hfcn(1)
ans = 6
hfcn([1;2;3])
ans = 3×1
6 17 34

Connectez-vous pour commenter.

Réponse acceptée

Ridwan Alam
Ridwan Alam le 28 Jan 2020
Modifié(e) : Ridwan Alam le 28 Jan 2020
load(fullfile(matlabroot,'examples','stats','gprdata2.mat'))
In this case, your x is n x 1;
hfcn returns H, which has size n x 1; i.e. p = 1;
So if you want to provide 'Beta' to fitrgp(), it should be of size p x 1, i.e 1 x 1.
fitrgp() is only using your beta0(1) as Adam mentioned in the comment.
  4 commentaires
Stefan Hövel
Stefan Hövel le 28 Jan 2020
Okay, now I get it. Beta can be interpreted as a weight on the Basis function H. I would like fitrgp to find the optimal values for beta0 within hfcn. For the KernelFunction it is posible see Example: Fit GPR Model Using Custom Kernel Function:
kfcn = @(XN,XM,theta) (exp(theta(2))^2)*exp(-(pdist2(XN,XM).^2)/(2*exp(theta(1))^2));
Here fitrgp optimizes the theta-values (see KernelInformation). I suppose it is not posible for Basis function.
Thanks a lot!
Ridwan Alam
Ridwan Alam le 28 Jan 2020
Sure. Glad to help.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by