지원 벡터 회귀 (SVR)

Beginner

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

소개

이 실습에서는 Support Vector Regression (SVR) 을 사용하여 1 차원 데이터 세트에 선형, 다항식 및 Radial Basis Function (RBF) 커널을 사용하여 모델을 적합시킵니다. Python 의 scikit-learn 라이브러리를 사용하여 SVR 을 수행합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

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

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

샘플 데이터 생성

먼저, 0 과 5 사이의 40 개의 랜덤 값으로 구성된 샘플 데이터 세트를 생성합니다. 그런 다음 각 값의 사인 함수를 계산하고 매 5 번째 값에 약간의 노이즈를 추가합니다.

import numpy as np

## 샘플 데이터 생성
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

## 대상에 노이즈 추가
y[::5] += 3 * (0.5 - np.random.rand(8))

회귀 모델 적합

다음으로, 선형, 다항식 및 RBF 커널을 사용하여 샘플 데이터 세트에 SVR 모델을 적합시킵니다. 각 모델의 하이퍼파라미터를 설정하고 샘플 데이터 세트에서 학습시킵니다.

from sklearn.svm import SVR

## 회귀 모델 적합
svr_rbf = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1)
svr_lin = SVR(kernel="linear", C=100, gamma="auto")
svr_poly = SVR(kernel="poly", C=100, gamma="auto", degree=3, epsilon=0.1, coef0=1)

svrs = [svr_rbf, svr_lin, svr_poly]

for svr in svrs:
    svr.fit(X, y)

결과 시각화

마지막으로, 샘플 데이터 세트와 비교하여 SVR 모델의 결과를 시각화합니다. 지원 벡터와 다른 학습 데이터도 함께 플롯합니다.

import matplotlib.pyplot as plt

## 결과 확인
lw = 2

kernel_label = ["RBF", "Linear", "Polynomial"]
model_color = ["m", "c", "g"]

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10), sharey=True)

for ix, svr in enumerate(svrs):
    axes[ix].plot(
        X,
        svr.predict(X),
        color=model_color[ix],
        lw=lw,
        label="{} 모델".format(kernel_label[ix]),
    )
    axes[ix].scatter(
        X[svr.support_],
        y[svr.support_],
        facecolor="none",
        edgecolor=model_color[ix],
        s=50,
        label="{} 지원 벡터".format(kernel_label[ix]),
    )
    axes[ix].scatter(
        X[np.setdiff1d(np.arange(len(X)), svr.support_)],
        y[np.setdiff1d(np.arange(len(X)), svr.support_)],
        facecolor="none",
        edgecolor="k",
        s=50,
        label="다른 학습 데이터",
    )
    axes[ix].legend(
        loc="upper center",
        bbox_to_anchor=(0.5, 1.1),
        ncol=1,
        fancybox=True,
        shadow=True,
    )

fig.text(0.5, 0.04, "데이터", ha="center", va="center")
fig.text(0.06, 0.5, "대상", ha="center", va="center", rotation="vertical")
fig.suptitle("지원 벡터 회귀", fontsize=14)
plt.show()

요약

이 실험에서 우리는 선형, 다항식 및 RBF 커널을 사용하여 1 차원 데이터 세트에 모델을 적합시키는 방법을 Support Vector Regression(SVR) 을 통해 배웠습니다. 샘플 데이터를 생성하고 scikit-learn 을 사용하여 회귀 모델을 적합시키고 결과를 시각화했습니다.