scikit learn 中的高斯处理回归,无需内核梯度评估

Posted

技术标签:

【中文标题】scikit learn 中的高斯处理回归,无需内核梯度评估【英文标题】:Gaussian processes regression in scikit learn without kernel gradient evaluation 【发布时间】:2018-01-15 09:32:29 【问题描述】:

我正在使用 sklearn 中的模块 GaussianProcessesRegression 进行简单的高斯回归。但是我正在尝试实现自己的内核,而不是模块内核提供的内核。

我在优化超参数时遇到问题(可能是我错误地实现了内核梯度并且我没有看到错误)。所以我的问题是:

如何在优化期间不评估内核梯度的情况下运行 GaussianProcessesRegression 模块的方法 `fit'(超参数优化发生的地方)?

从文档来看,应该可以通过设置变量 `eval_gradient=False' 但实际上我不能用这个变量调用任何方法。

这是我正在使用的代码的一个想法:

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
import kernels as my_kernel

kernel1 = 1.0*my_kernel.RBF_D(length_scale=np.linspace(1,10,10), length_scale_bounds=(1e-3, 100.0))

gp = GaussianProcessRegressor(kernel=kernel1, n_restarts_optimizer=10)
gp.fit(Xtrain,Ytrain)
hyperp = = gp.kernel_.get_params()
y_gp,y_train_std=gp.predict(Xtrain,return_std=True)

如果我尝试打电话

gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=0,eval_gradient=False)

我有错误:

` Traceback(最近一次调用最后一次):...

gp = GaussianProcessRegressor(kernel=kernel1, n_restarts_optimizer=10,eval_gradient=False) TypeError: init() 得到了一个意外的关键字参数 'eval_gradient' '

同样,如果我尝试

gp.fit(Xtrain, Ytrain, eval_gradient=False)

` TypeError: fit() got an unexpected keyword argument 'eval_gradient' '

很明显它不起作用,但我没有任何其他想法。有关如何执行此操作的任何提示?

(我使用自己的内核与这个问题无关)

【问题讨论】:

向我们提供有关您当前正在运行什么代码来尝试此操作的提示。 我重新编辑了,谢谢。 【参考方案1】:

你提到了“文档”,http://scikit-learn.org/stable/modules/generated/sklearn.gaussian_process.GaussianProcessRegressor.html

说明GPR可以调用你提供的优化器,在调用目标函数时可以指定eval_gradient

【讨论】:

是的,我假设因此有一种方法可以为默认优化器指定相同的变量。但如果可能的话,我不知道该怎么做。 “unexpected keyword argument 'eval_gradient'”诊断准确,与文档相符。看起来您想编写一个 optimizer 回调并将其传递给 GPR。

以上是关于scikit learn 中的高斯处理回归,无需内核梯度评估的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中的多输出高斯过程回归

如何使用 scikit-learn 进行高斯/多项式回归?

如何正确使用 scikit-learn 的高斯过程进行 2D 输入、1D 输出回归?

使用scikit-learn的高斯过程回归时如何使用点的经纬度?

高斯过程回归器 scikit learn 无法识别“eval_MSE=True”

使用 Scikit-Learn 在 Python 中绘制多项式回归