Это в большей степени вопрос любопытства, но я следую простому учебнику по GPR и обнаружил, что использование случайного начального числа из 42, похоже, нарушает регрессор, но использование любого другого числа вполне подходит.
import numpy as np
from matplotlib import pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
# don't use 42 as the seed, something breaks
np.random.seed(42)
def f(x):
return x * np.sin(x)
# noiseless case
X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T
# observations
y = f(X).ravel()
# mesh input space
x = np.atleast_2d(np.linspace(0, 10, 1000)).T
# instantiate GP model
kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
# fit to data
gp.fit(X, y)
# make prediction on meshed X axis, also asking for MSE
y_pred, sigma = gp.predict(x, return_std=True)
# plot the function, prediction, 95% confidence interval
plt.figure()
plt.plot(x, f(x), 'r:', label=r'$f(x) = x\,\sin(x)$')
plt.plot(X, y, 'r.', markersize=10, label='Observations')
plt.plot(x, y_pred, 'b-', label="Prediction")
plt.fill(np.concatenate([x, x[::-1]]),
np.concatenate([y_pred - 1.9600 * sigma,
(y_pred + 1.9600 * sigma)[::-1]]),
alpha=.5, fc='b', ec="None", label="95% confidence interval")
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.ylim(-10, 20)
plt.legend(loc="upper left")
Это показывает, как предсказанная функция полностью неверна при использовании начального числа 42:
Это показывает, как работает GPR при использовании начального числа с любым другим числом. чем 42:
Мой вопрос: почему это происходит? Я не видел такой ошибки раньше.