这是我第一次尝试编写协方差函数。我有以下价值观,
x = [-1.50 -1.0 -.75 -.40 -.25 0.00];
sf = 1.27;
ell = 1;
sn = 0.3;
我编写的 matlab 代码为:
K = sf^2*exp(-0.5*(squareform(pdist(x)).^2)/ell^2)+(sn)^2*eye(Ntr,Ntr);
其中
sf
是信号标准差,ell
是特征长度尺度,sn
是噪声标准差,Ntr
是训练输入数据的长度x
。
但这没有给我任何结果。我的编码有错误吗?
如果
x_ = 0.2
那么我们如何计算:
a)
K_ =[k(x_,x1) k(x_,x2)..........k(x_,xn)]
和
b)
K__ = k(x_,x_)
使用matlab?
我收到以下错误消息:
Error using +
Matrix dimensions must agree.
Error in untitled3 (line 7)
K = sf^2*exp(-0.5*(squareform(pdist(x)).^2)/ell^2)+(sn)^2*eye(Ntr,Ntr);
表明您的矩阵尺寸不一致。如果您单独评估代码的各个部分,您会注意到
pdist(x)
返回一个 1x0
向量。在 pdist
的文档中解释了 x
的预期格式:
X 的行对应于观测值,列对应于 变量
因此,您应该计算
pdist(x)
的转置,而不是计算 x
,即 pdist(x.')
:
K = sf^2*exp(-0.5*(squareform(pdist(x.')).^2)/ell^2)+(sn)^2*eye(Ntr,Ntr);
作为结论,请务必仔细阅读错误消息和文档,尤其是输入参数的预期格式。
子问题
要计算
K
特定值的x_
(您提到的公式中的x'
),您几乎可以将给定的公式转换为MATLAB:
K_ = sf^2*exp(-0.5*(x-x_).^2/ell^2)+(sn)^2*(x == x_);
要计算
K__
,您可以使用上面的公式并设置x = x_
,或者您可以将公式简化为:
K__ = sf^2+sn^2;