2017-08-08 46 views
-2

我正在使用sklearn中的模块GaussianProcessesRegression进行简单的高斯回归。但是我试图实现我自己的内核,而不是模块内核提供的内核。高斯过程scikit中的回归学习没有内核梯度评估

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

如何在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) 

我有错误:

`回溯(最近通话最后):...

gp = GaussianProcessRegressor(kernel = kernel1,n_restarts_optimizer = 10,eval_gradient = FALSE) 类型错误:初始化()得到了一个意想不到的关键字参数'eval_gradient '

同样,如果我尝试

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

`类型错误:飞度()得到了一个意想不到的关键字参数' eval_gradient''

显然它没有工作,但我没有任何其他想法。有关如何做到这一点的任何提示?

(我是用我自己的内核,这一事实是不适合此问题)

+0

向我们提供有关您当前正在运行的代码尝试此操作的提示。 –

+0

我重新编辑了,谢谢。 – Doccm

回答

0

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

它解释说,探地雷达可以打电话给你提供一个优化,它可以在调用目标函数时指定eval_gradient

+0

是的,我认为有一种方法可以指定相同的变量也默认优化器。但如果可能的话,我不知道该怎么做。 – Doccm

+0

“意外的关键字参数'eval_gradient'”诊断是准确的,并且与文档匹配。它看起来像你想写一个'优化器'回调并将其传递给GPR。 –