Попробуйте прокомментировать строку fig = ...
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()
Часто полезно посмотреть на фактические оптимизированные значения гиперпараметров вашей модели - в этом случае дисперсия шума, дисперсия ядра и шкала длины ядра:
class ... value
GPR/kern/lengthscales Parameter ... 3.7149993613788737
GPR/kern/variance Parameter ... 2.0572871322469534e-06
GPR/likelihood/variance Parameter ... 1.5461369937869296
Таким образом, ГП объясняет все как шум (в этом случай, фактическое значение шкал длины довольно произвольно, и это крошечная дисперсия ядра, которая важна). (Если вы используете предикат_y вместо предиката_f, вы должны получить доверительный интервал, охватывающий большинство наблюдений.) «RBF» (я предпочитаю квадрат экспоненциальный - каждое стационарное ядро описывает радиальные базисные функции ...) ядро делает очень строгие предположения относительно гладкости функции в ваших предыдущих (а также это использует только максимальные оценки вероятности точки для гиперпараметров), и поэтому в этом смысле не так много гибкости - и как только вы объяснили все данные, GP в некотором смысле «говорит» что нет сигнала, поэтому вы получаете предварительный ответ - который имеет нулевое среднее значение. Это немного помогает?