В Python я пытался погрузиться в библиотеку GPy для оценки моделей гауссовского процесса, когда вначале я столкнулся с камнем преткновения при простом построении графиков.
Для моих данных я сгенерировал простую синусоидальную волну с квадратом скорости роста, добавленным на полпути, и GPy успешно оценила исходную модель.
Генерация данных:
## Generating data for regression
# First, regular sine wave + normal noise
x = np.linspace(0,40, num=300)
noise1 = np.random.normal(0,0.3,300)
y = np.sin(x) + noise1
# Second, an upward trending starting midway, with its own noise as well
temp = x[150:]
noise2 = 0.004*temp**2 + np.random.normal(0,0.1,150)
y[150:] = y[150:] + noise2
plt.plot(x, y)
Исходная модель:
## Pre-processing
X = np.expand_dims(x, axis=1)
Y = np.expand_dims(y, axis=1)
## Model
kernel = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)
model1 = GPy.models.GPRegression(X, Y, kernel)
## Plotting
fig = model1.plot()
GPy.plotting.show(fig, filename='basic_gp_regression_notebook')
* +1012 *
Однако эта модель неверно указана, поскольку данные были созданы только с использованием sin (X) и X ^ 2, а не только X, поэтому я создаю следующую модель:
X_all = np.hstack((np.sin(X), np.square(X)))
model2 = GPy.models.GPRegression(X_all, Y, kernel)
fig = model2.plot()
GPy.plotting.show(fig, filename='basic_correct_gp_regression_notebook')
Однако теперь я получаю ошибки при печати,
Invalid value of type 'builtins.str' received for the 'size' property of scatter.marker Received value: '5'
Я предполагаю, что это потому, что график не знает, чтобы использовать «X» в качестве оси X, поскольку были указаны только sin (X) и X ^ 2.
Как я мог это исправить?