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 的高斯过程进行 2D 输入、1D 输出回归?
使用scikit-learn的高斯过程回归时如何使用点的经纬度?