Я реализовал функцию в R для оценки параметров гауссовского процесса основной функции c sin. К сожалению, проект должен быть выполнен в Python, и я пытался воспроизвести поведение hetGP библиотеки R в python, используя SKlearn, но мне трудно сопоставить первое с последующим.
My понимание процессов Гаусса все еще ограничено, и я начинающий со sklearn, поэтому я был бы очень признателен за помощь в этом.
Мой код R:
library(hetGP)
set.seed(123)
nvar <- 2
n <- 400
r <- 1
f <- function(x) sin(sum(x))
true_C <- matrix(1/8 * (3 + 2 * cos(2) - cos(4)), nrow = 2, ncol = 2)
design <- matrix(runif(nvar*n), ncol = nvar)
response <- apply(design, 1, f)
model <- mleHomGP(design, response, lower = rep(1e-4, nvar), upper = rep(1,nvar))
Позже в коде, Я использую model$Ki
и model$theta
model$theta: 0.9396363 0.9669170
dim(model$ki): 400 400
Мой Python код до сих пор:
import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF
n = 400
n_var = 2
real_c = np.full((2, 2), 1 / 8 * (3 + 2 * np.cos(2) - np.cos(4)))
design = np.random.uniform(size=n * n_var).reshape(-1, 2)
test = np.random.uniform(size=n * n_var).reshape(-1, 2)
response = np.apply_along_axis(lambda x: np.sin(np.sum(x)), 1, design)
kernel = RBF(length_scale=(1, 1))
gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10,
optimizer="fmin_l_bfgs_b").fit(design, response)
gpr.predict(test, return_std=True)
theta = gpr.kernel_.get_params()["length_scale"]
#theta = gpr.kernel_.theta
k_inv = gpr._K_inv
theta = [1.78106558 1.80083585]