Я использую sklearn для подгонки гауссовского процесса к данным.
В этом сокращенном примере я использую простые шумовые синусоидальные данные с ядром RBF
import numpy as np
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel
X = np.random.uniform(-3.,3.,(200,1))
Y = np.sin(X) + np.random.randn(200,1)*0.05
kernel = RBF(length_scale=1)
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
gp.fit(X,Y)
x = np.linspace(-3, 3, 100)
y_pred, sigma = gp.predict(x.reshape(-1, 1), return_std=True)
plt.scatter(X,Y, c='r')
plt.plot(x, y_pred)
Это приводит к очень негладкому подогнанному прогнозу для относительно простой шумовой кривой с синусоидой. Это, похоже, имеет место независимо от значений параметра RBF length_scale
или n_restarts_optimizer
![gp](https://imgur.com/kIE9hOT)
Из документации RBF sklearn, GP с этим ядром в качестве ковариационной функции имеют среднеквадратичные производные всех порядков и поэтому очень гладкие. Какие-нибудь идеи, почему среднее предсказание здесь так негладко?
edit: вставка изображения не работает: вот график вывода https://imgur.com/kIE9hOT