这是我第一次尝试编写协方差函数。我有以下数值,
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);
总之,务必仔细阅读错误消息和文档,尤其是输入参数的预期格式。
子问题
要为x_
的特定值计算K
(你在提到的公式中为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;