Параметры ядра регрессии гауссовского процесса: как получить их в Scikit-learn?

Я использую экспоненциальное ядро ​​с квадратом или RBF в моей операции регрессии с использованием GaussianProcessRegressor"> GaussianProcessRegressor. из Scikit-learn. Кроме того, я использую внутренний оптимизатор 'fmin_l_bfgs_b' (алгоритм L-BFGS-B) для оптимизации параметров ядра. В моем случае параметрами ядра являются масштаб длины и дисперсия сигнала. Документация относительно log_marginal_likelihood выглядит следующим образом:

введите описание изображения здесь

Я выполнил эту документацию, чтобы напечатать GPML kernel и 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)

Правильный ли мой подход к печати параметров ядра?

Спасибо!


person santobedi    schedule 11.05.2018    source источник


Ответы (1)


Значения, возвращаемые gp.log_marginal_likelihood, указаны в приложенных вами документах, первое значение фактически представляет собой результирующую предельную вероятность переданного параметра в журнале, в вашем случае gp.kernel_.theta, а значения в массиве являются градиентами по отношению к параметрам ядра.

Чтобы фактически получить результирующие параметры ядра после оптимизации. Используйте возвращенное ядро ​​либо с:

gp.kernel_.get_params()

который возвращает словарь, включающий параметры, или вы можете получить их индивидуально, используя:

gp.kernel_.k1

и

gp.kernel_.k2
person Dan Reia    schedule 14.05.2018