베이지안 릿지 회귀를 이용한 곡선 맞춤

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 베이지안 릿지 회귀를 사용하여 사인파 데이터에 다항식 곡선을 맞추는 방법을 보여줍니다. 잡음이 있는 사인파 데이터를 생성하고, 3 차 다항식을 사용하여 데이터에 맞춥니다. 또한, 실제 곡선과 예측된 곡선을 함께 플롯하고, 이러한 모델들의 로그 주변 가능도 (L) 를 통해 어떤 모델이 더 나은지 판단합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 Jupyter Notebook을 연습에 사용할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

잡음이 있는 사인파 데이터 생성

잡음이 있는 사인파 데이터를 생성하는 것으로 시작합니다.

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)

3 차 다항식으로 데이터 맞추기

데이터를 3 차 다항식으로 맞춥니다.

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) 와 함께 실제 및 예측 곡선 플롯

로그 주변 가능도 (L) 와 함께 실제 및 예측 곡선을 플롯합니다.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(8, 4))
for i, ax in enumerate(axes):
    ## 서로 다른 초기값 쌍을 사용한 베이지안 릿지 회귀
    if i == 0:
        init = [1 / np.var(y_train), 1.0]  ## 기본값
    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="관측값")
    ax.plot(x_test, ymean, color="red", label="예측 평균")
    ax.fill_between(
        x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="예측 표준편차"
    )
    ax.set_ylim(-1.3, 1.3)
    ax.legend()
    title = "$\\alpha$_init$={:.2f},\\ \\lambda$_init$={}$".format(init[0], init[1])
    if i == 0:
        title += " (기본값)"
    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()

요약

베이지안 릿지 회귀는 데이터를 다항식 곡선에 맞추는 데 사용할 수 있는 강력한 곡선 맞춤 기술입니다. 정규화 매개변수의 초기값을 반복하여 주어진 데이터에 가장 적합한 결과를 찾을 수 있습니다.