高斯过程回归的内核参数:如何在 Scikit-learn 中获取它们?

san*_*edi 3 python regression scikit-learn hyperparameters

我使用Scikit-learn 的GaussianProcessRegressor在我的回归操作中使用平方指数核或RBF。另外,我使用内部可用的优化器(L-BFGS-B 算法)来优化 Kernel 参数。在我的例子中,内核参数是长度尺度和信号方差。有关的文档如下:'fmin_l_bfgs_b'log_marginal_likelihood

在此处输入图片说明

我按照此文档打印GPML kernellog_marginal_likelihood. 以下是代码片段:

print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
       gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)

在控制台打印以下值:

    GPML kernel: 31.6**2 * RBF(length_scale=1.94)
Log-marginal-likelihood: (-115.33295413296841, array([ 1.01038168e+02, -2.16465175e-07]))
Run Code Online (Sandbox Code Playgroud)

在这里,我无法弄清楚以对数边际似然打印的值。数组中的值是什么?

我关于回归的代码片段如下:

print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
       gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)

我打印内核参数的方法正确吗?

谢谢!

Dan*_*eia 8

返回的值gp.log_marginal_likelihood在您附加的文档中指出,第一个值实际上是传递参数的结果对数边际似然,在您的情况下gp.kernel_.theta,数组中的值是相对于内核参数的梯度。

实际获得优化后的内核参数。将返回的内核用于:

gp.kernel_.get_params()
Run Code Online (Sandbox Code Playgroud)

它返回一个包含参数的字典,或者您可以使用以下方法单独获取它们:

gp.kernel_.k1
Run Code Online (Sandbox Code Playgroud)

gp.kernel_.k2
Run Code Online (Sandbox Code Playgroud)