如何解决如何在 MATLAB 中使用 GPML 工具箱创建加权复合协方差函数?
我正在尝试创建一个复合协方差函数来为我的数据建模。具体来说,我想创建一个在 @covSEard
和 @covrQard
之间加权的内核。例如:我想赋予 @covSEard
30% 的权重和 @covrQard
70% 的权重,例如 0.3*@covSEard + 0.7*@covrQard
我尝试了以下选项。
选项 1 - 使用 @covSum
和 @covProd
功能
input_dimensions = 4; % number of input dimensions
seed = 1234; % seed for reproducibility
rng(seed);
X = rand(100,input_dimensions); % sample input data generation
y = rand(100,1); % sample output data generation
addpath(genpath(PATH_TO_GPML_TOOLBox)); % adding gpml toolBox to the path
meanFunc = {@meanZero}; % using a zero mean
meanHyp = {[]}; % zero mean has no hyper parameters
kernel_weight = 0.3; % weight of covSEard kernel,0.7 will be the weight for covrQard kernel
% defining the covariance function as a weighted sum of covSEard & covrQard
covFunc = {'covSum',{{'covProd',{'covConst','covSEard'}},{'covProd','covrQard'}}}};
% variables to define the hyperparameters for the above kernel
sf=2; L=rand(input_dimensions,1); al=2;
% Covariance function for a constant function. The covariance function is parameterized as:
% k(x,z) = sf^2
%
% The scalar hyperparameter is:
% hyp = [ log(sf) ]
covHyp = {log([sqrt(kernel_weight); L; sf; sqrt(1-kernel_weight); L; sf; al])};
likFunc = {@likGauss}; % Using a gaussian likelihood
likHyp = {-1}; % Likelihood hyper parameter initialization
infMethod= @infGaussLik; % Using Gaussian inference
iters = -300; % Number of iterations for Bayesian Optimization
% Defining the hyper parameter struct
hyp.lik = cell2mat(likHyp(1));
hyp.cov = cell2mat(covHyp(1));
hyp.mean = cell2mat(meanHyp(1));
% Defining mean,covariance and likelihood functions
mF = meanFunc{1,1}; cF=covFunc; lF=likFunc{1,1};
hyp2vfe = minimize(hyp,@gp,iters,infMethod,mF,cF,lF,X,y); % Optimization of hyperparameters / Training
[nll,~] = gp(hyp2vfe,y); % Negative Log Likelihood calculation
在这里,我尝试使用 @covConst
内核,它只有信号方差超参数,我强迫它等于权重(例如:@covSEard
和 0.7 为 0.3在这种情况下为 @covrQard
。
然而,当我尝试优化上述内核的超参数时,甚至权重(实际上是 @covConst
内核的超参数)也被修改。
选项 2 - 使用 @covSum
功能并根据权重将每个内核重复 n 次
例如,如果我想分别为 @covSEard
和 @covrQard
赋予 1:2 的权重,我会执行以下操作
替换上面代码中的以下几行
covFunc = {'covSum','covrQard'}}}};
与covfunc = {'covSum',{'covSEard','covrQard','covrQard'}};
&
covHyp = {log([sqrt(kernel_weight); L; sf; sqrt(1-kernel_weight); L; sf; al])};
与covHyp = {log([L; sf; L; sf; al; L; sf; al])};
然而,在这种情况下,超参数的数量会线性增加,而且我不确定这是否是正确的做事方式。
我想知道在 GPML 中创建这种协方差函数的正确方法是什么。请提出建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。