我在使用Scikit-learn的GaussianProcessRegressor的回归操作中使用了平方指数内核或RBF . 另外,我使用内部可用的优化器 'fmin_l_bfgs_b'
(L-BFGS-B算法)来优化内核参数 . 在我的例子中,内核参数是长度尺度和信号方差 . 有关 log_marginal_likelihood
的文档如下:
我按照此文档打印 GPML kernel
和 log_marginal_likelihood
. 以下是代码段:
print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
在控制台上打印以下值:
GPML kernel: 31.6**2 * RBF(length_scale=1.94)
Log-marginal-likelihood: (-115.33295413296841, array([ 1.01038168e+02, -2.16465175e-07]))
Here, I could not figure out the values printed at the Log-marginal-likelihood. What are the values inside the array?
我关于回归的代码片段如下:
x_train = np.array([[0,0],[2,2],[3,3]])
y_train = np.array([200,321,417])
xvalues = np.array([0,1,2,3])
yvalues = np.array([0,1,2,3])
a,b = np.meshgrid(xvalues,yvalues)
positions = np.vstack([a.ravel(), b.ravel()])
x_test = (np.array(positions)).T
kernel = C(1.0, (1e-3, 1e3)) * RBF(10)
gp = GaussianProcessRegressor(kernel=kernel, optimizer = 'fmin_l_bfgs_b',alpha = 1.5, n_restarts_optimizer=5)
gp.fit(x_train, y_train)
y_pred_test, sigma = gp.predict(x_test, return_std =True)
Is my approach to printing the kernel parameters correct?
谢谢!
1 回答
gp.log_marginal_likelihood
返回的值在您附加的文档中指示,第一个值实际上是传递参数的结果日志边际似然性,在您的情况下为gp.kernel_.theta
,数组中的值是相对于内核参数的渐变 .实际上在优化后获得生成的内核参数 . 使用返回的内核:
它返回包含参数的字典,或者您可以使用以下方式单独获取它们:
和