我目前正在尝试在Mathematica中实现高斯过程,并坚持使用对数似然的最大化。我只是尝试在我的loglikelihood函数上使用FindMaximum公式,但这似乎不适用于此函数。
gpdata = {{-1.5, -1.8}, {-1., -1.2}, {-0.75, -0.4}, {-0.4,
0.1}, {-0.25, 0.5}, {0., 0.8}};
kernelfunction[i_, j_, h0_, h1_] :=
h0*h0*Exp[-(gpdata[[i, 1]] - gpdata[[j, 1]])^2/(2*h1^2)] +
KroneckerDelta[i, j]*0.09;
covariancematrix[h0_, h1_] =
ParallelTable[kernelfunction[i, j, h0, h1], {i, 1, 6}, {j, 1, 6}];
loglikelihood[h0_, h1_] := -0.5*
gpdata[[All, 2]].LinearSolve[covariancematrix[h0, h1],
gpdata[[All, 2]], Method -> "Cholesky"] -
0.5*Log[Det[covariancematrix[h0, h1]]] - 3*Log[2*Pi];
FindMaximum[loglikelihood[a, b], {{a, 1}, {b, 1.1}},
MaxIterations -> 500, Method -> "QuasiNewton"]
在对数似然,我通常会得到协方差矩阵的逆乘以gpdata [[All,2]]向量的乘积,但因为协方差矩阵总是正半定的,所以我用这种方式写出来。如果我使用,评估也不会停止 gpdata [[全部,2]]。反向[ covariancematrix [h0,h1]]。gpdata [[All,2]]
有人有想法吗?我实际上正在研究一个更复杂的问题,我有6个参数要优化,但我已经遇到问题2.
答案 0 :(得分:1)
根据我的经验,我发现二阶方法失败的超参数优化比基于梯度的方法更多。我认为这是因为(大多数?)二阶方法依赖于接近当前估计的二次方的函数。
在我的实验中,使用共轭梯度或甚至Powell(无衍生物)共轭方向法已经证明是成功的。对于两个参数的情况,我建议为某些直觉制作超参数曲面的等高线图。