python - 高斯过程回归的内核参数:如何在 Scikit-learn 中获取它们?
问题描述
我使用Scikit-learn 的GaussianProcessRegressor在回归操作中使用平方指数核或RBF 。此外,我使用内部可用的优化器(L-BFGS-B 算法)来优化内核参数。在我的例子中,内核参数是长度尺度和信号方差。有关的文档如下:'fmin_l_bfgs_b'
log_marginal_likelihood
我按照此文档打印了GPML kernel
and 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]))
在这里,我无法弄清楚在对数边际似然处打印的值。数组中的值是什么?
我关于回归的代码片段如下:
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)
我打印内核参数的方法是否正确?
谢谢!
解决方案
返回的值gp.log_marginal_likelihood
在您附加的文档中指示,第一个值实际上是传递参数的结果对数边际可能性,在您的情况下gp.kernel_.theta
,数组中的值是相对于内核参数的梯度。
实际得到优化后的内核参数。使用返回的内核:
gp.kernel_.get_params()
它返回一个包含参数的字典,或者您可以使用以下方法单独获取它们:
gp.kernel_.k1
和
gp.kernel_.k2
推荐阅读
- python - 在检测到某些东西时运行某个代码 python
- swift - 使用泛型组合 2 个独立的几乎相同的函数
- string - 不是通过多项式滚动计算字符串 O(n) 的哈希值,其中 n 是字符串大小?
- docker - docker-compose 在运行入口点后保持容器运行
- arrays - 如何在 ruby 中加入两个表哈希
- macos - 将 Cocoa 实用程序应用程序拆分为辅助二进制文件 + 主应用程序二进制文件的利弊?
- android - 如何像图像中一样为 BottomNavigationBar 设置动画?
- java - 如何获取 ArrayList 的内容以在 JavaFX GUI 中显示
- pine-script - Tradingview 的 RSI 失败 Swing Pine 脚本问题
- node.js - npm start 不起作用。我什么都试过了。我很困惑