内核定制问题firgp

38视图(30天)
Miguel Angel Hombrados Herrera
编辑: Gautam Pendse 2015年11月18日
我试着使用fitrgp定制内核(局部周期3参数)。但我得到下一个错误:“所需的柯列斯基因素无法计算的预测。当调用fitrgp,试着改变初始值的“KernelParameters”和“σ”。也可以考虑将“标准化”设置为true,增加的价值‘SigmaLowerBound’。”Otherwise I takes ages to compute. I defined my kernel (product of 2 kernels) as one function kernel (kfcn) and defined the 3 parameters array theta. I have to say I dont have the same problem when I run fitrgp (custom kernel ) with squared exponential oreither periodic function.

答案(1)

Gautam Pendse
Gautam Pendse 2015年11月9日
编辑:Gautam Pendse 2015年11月18日
你好,米格尔,
你看到的错误报道当格拉姆矩阵接近奇异和噪声方差收敛于0。你能把你的代码核函数评价?
增加“SigmaLowerBound”调用fitrgp应该帮助。这是一个定制的内核示例使用一个平方指数ARD和的平方的总和指数内核。代码复制/粘贴到一个m文件,然后发布。
函数testcustomkernel ()
% %示例数据
rng (0,“旋风”);
N = 100;
X = linspace (0, 1, N) ';
X = [X, X ^ 2];
y = 1 + X *[1, 2] +罪(20 * X * [1, 2]) + 0.2 * randn (N, 1);
D =大小(X, 2);
% % _unconstrained_内核参数的初始值
%注意“易于理解”参数如sigmaL和sigmaF
%转换为无约束参数θ。看到
% mykernel下面的描述这些参数和
%连接顺序。
sigmaL10 = 0.1 * 1 (D, 1);
sigmaL20 = 0.1;
sigmaF10 = 1;
sigmaF20 = 1;
theta0 =[日志(sigmaL10);日志(sigmaL20);日志(sigmaF10);日志(sigmaF20)];
% %适应模型使用自定义内核函数
% mykernel定义在这个文件是两个内核的总和
%函数——一个平方指数和一个平方指数。
%初始值theta0必须提供在使用一个定制的内核
%的功能。
探地雷达= fitrgp (X, y,“kernelfunction”@mykernel,“kernelparameters”theta0,“详细”,1)
% %情节预测
情节(y,“r”);
持有;
图(预测(gpr X),“b”)
% %显示内核参数
gpr.KernelInformation
gpr.KernelInformation.KernelParameterNames
%的估计参数。
thetaHat = gpr.KernelInformation.KernelParameters
% %内核参数转换成一种容易理解的形式
%将内核参数转换为长度尺度和信号
%标准差。
params = exp (thetaHat);
sigmaL1 = params (1: D, 1);
sigmaL2 = params (D + 1, - 1);
sigmaF1 = params (D + 2, 1);
sigmaF2 = params (D + 3, 1);
结束
函数KMN = mykernel (XM, XNθ)
% mykernel——计算平方指数和的平方的总和指数。
% KMN = mykernel (XM, XNθ)M-by-D矩阵XM,一个N-by-D矩阵
% XN和计算m×n的矩阵KMN内核等产品s manbetx 845
% KMN (i, j)是内核积XM(我:)和XN (j:)。θ是
%的R-by-1无约束参数向量的内核。
%
%让θ=[日志(sigmaL1);日志(sigmaL2);日志(sigmaF1);日志(sigmaF2)]
%
%,
%
% sigmaL1 = D-by-1向量的长度尺度的平方指数。
% sigmaL2平方指数=标量长度尺度。
% sigmaF1 =标量信号标准差的平方指数。
% sigmaF2 =标量信号标准偏差的平方指数。
% 1。d .假设XN, XM有相同数量的列。
D =大小(XM, 2);
% 2。θ转换成sigmaL1、sigmaL2 sigmaF1 sigmaF2。
params = exp(θ);
sigmaL1 = params (1: D, 1);
sigmaL2 = params (D + 1, - 1);
sigmaF1 = params (D + 2, 1);
sigmaF2 = params (D + 3, 1);
% 3。创建贡献由于平方指数。
KMN = pdist2 (XM (: 1) / sigmaL1 (1) XN (: 1) / sigmaL1 (1)) ^ 2;
r = 2: D
KMN = KMN + pdist2 (XM (:, r) / sigmaL1 (r), XN (:, r) / sigmaL1 (r)) ^ 2;
结束
KMN = (sigmaF1 ^ 2) * exp (-0.5 * KMN);
% 4。由于平方指数增加的贡献。
KMN = KMN + (sigmaF2 ^ 2) * exp (-0.5 * (pdist2 (XM / sigmaL2 XN / sigmaL2)。^ 2));
结束
Gautam

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!