Примечание
Перейти к концу для загрузки полного кода примера. или запустить этот пример в вашем браузере через JupyterLite или Binder
Подгонка кривой с помощью регрессии Байесовского гребня
Вычисляет регрессию Байесовского гребня синусоид.
См. Регрессию Байесовского гребня для получения дополнительной информации о регрессоре.
В общем случае, при подгонке кривой с помощью полинома с помощью регрессии Байесовского гребня, выбор начальных значений параметров регуляризации (альфа, лямбда) может быть важным. Это связано с тем, что параметры регуляризации определяются итерационным процессом, зависящим от начальных значений.
В этом примере синусоида аппроксимируется полиномом с использованием различных пар начальных значений.
При старте с значениями по умолчанию (alpha_init = 1.90, lambda_init = 1.), смещение полученной кривой велико, а дисперсия мала. Таким образом, lambda_init следует выбрать относительно малым (1.e-3), чтобы уменьшить смещение.
Также, оценив логарифмическую маргинальную вероятность (L) этих моделей, мы можем определить, какая из них лучше. Можно заключить, что модель с большей L более вероятна.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Генерация синусоидальных данных с шумом
import numpy as np
def func(x):
return np.sin(2 * np.pi * x)
size = 25
rng = np.random.RandomState(1234)
x_train = rng.uniform(0.0, 1.0, size)
y_train = func(x_train) + rng.normal(scale=0.1, size=size)
x_test = np.linspace(0.0, 1.0, 100)
Подгонка по кубическому полиному
from sklearn.linear_model import BayesianRidge n_order = 3 X_train = np.vander(x_train, n_order + 1, increasing=True) X_test = np.vander(x_test, n_order + 1, increasing=True) reg = BayesianRidge(tol=1e-6, fit_intercept=False, compute_score=True)
Построение истинных и предсказанных кривых с логарифмической маргинальной вероятностью (L)
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
for i, ax in enumerate(axes):
# Bayesian ridge regression with different initial value pairs
if i == 0:
init = [1 / np.var(y_train), 1.0] # Default values
elif i == 1:
init = [1.0, 1e-3]
reg.set_params(alpha_init=init[0], lambda_init=init[1])
reg.fit(X_train, y_train)
ymean, ystd = reg.predict(X_test, return_std=True)
ax.plot(x_test, func(x_test), color="blue", label="sin($2\\pi x$)")
ax.scatter(x_train, y_train, s=50, alpha=0.5, label="observation")
ax.plot(x_test, ymean, color="red", label="predict mean")
ax.fill_between(
x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="predict std"
)
ax.set_ylim(-1.3, 1.3)
ax.legend()
title = "$\\alpha$_init$={:.2f},\\ \\lambda$_init$={}$".format(init[0], init[1])
if i == 0:
title += " (Default)"
ax.set_title(title, fontsize=12)
text = "$\\alpha={:.1f}$\n$\\lambda={:.3f}$\n$L={:.1f}$".format(
reg.alpha_, reg.lambda_, reg.scores_[-1]
)
ax.text(0.05, -1.0, text, fontsize=12)
plt.tight_layout()
plt.show()

Общее время выполнения скрипта: (0 минут 0,306 секунд)
Связанные примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/linear_model/plot_bayesian_ridge_curvefit.html