Я хочу использовать приближение гауссовского процесса для простой одномерной тестовой функции, чтобы проиллюстрировать несколько вещей. Я хочу перебрать несколько разных значений для корреляционной матрицы (поскольку это 1D, это всего лишь одно значение) и показать, какое влияние разные значения оказывают на приближение. Насколько я понимаю, тета является параметром для этого. Поэтому я хочу установить значение тета вручную и не хочу его оптимизации / изменений. Я думал, что постоянное ядро и функция clone_with_theta могут дать мне то, что я хочу, но я не заставил это работать. Вот что у меня есть на данный момент:
import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as ConstantKernel
def f(x):
"""The function to predict."""
return x/2 + ((1/10 + x) * np.sin(5*x - 1))/(1 + x**2 * (np.sin(x - (1/2))**2))
# ----------------------------------------------------------------------
# Data Points
X = np.atleast_2d(np.delete(np.linspace(-1,1, 7),4)).T
y = f(X).ravel()
# Instantiate a Gaussian Process model
kernel = ConstantKernel(constant_value=1, constant_value_bounds='fixed')
theta = np.array([0.5,0.5])
kernel = kernel.clone_with_theta(theta)
gp = GaussianProcessRegressor(kernel=kernel, optimizer=None)
# Fit to data using Maximum Likelihood Estimation of the parameters
gp.fit(X, y)
# Make the prediction on the meshed x-axis (ask for MSE as well)
y_pred, sigma = gp.predict(x, return_std=True)
# Plot
# ...