2017-08-08 44 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。 –