如何在 MATLAB 中使用 GPML 工具箱创建加权复合协方差函数?

如何解决如何在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?