Huber 회귀와 Ridge 회귀 비교

Beginner

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

소개

이 실습에서는 강력한 이상치가 포함된 데이터셋에서 HuberRegressor 와 Ridge 두 가지 회귀 모델의 성능을 비교합니다. 가상 데이터셋을 생성하고 강력한 이상치를 추가한 후 두 모델을 데이터셋에 적합시킵니다. 결과를 시각화하고 모델의 성능을 비교합니다.

VM 팁

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

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

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

필요한 라이브러리 가져오기

데이터 조작 및 시각화를 위해 numpy 와 matplotlib, 그리고 회귀 모델링을 위해 scikit-learn 의 HuberRegressor 와 Ridge 를 포함한 필요한 라이브러리를 가져옵니다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import HuberRegressor, Ridge

가상 데이터 생성

이제 scikit-learn 의 make_regression 함수를 사용하여 가상 데이터셋을 생성합니다. 샘플 수는 20 개, 특징은 1 개, 난수 시드는 0 으로 설정합니다. 또한 데이터셋에 약간의 노이즈를 추가합니다.

rng = np.random.RandomState(0)
X, y = make_regression(
    n_samples=20, n_features=1, random_state=0, noise=4.0, bias=100.0
)

데이터셋에 강력한 이상치 추가

데이터셋에 네 개의 강력한 이상치를 추가합니다. 정규 분포를 사용하여 이러한 이상치에 대한 랜덤 값을 생성합니다. 그런 다음 이러한 이상치를 데이터셋에 추가합니다.

X_outliers = rng.normal(0, 0.5, size=(4, 1))
y_outliers = rng.normal(0, 2.0, size=4)
X_outliers[:2, :] += X.max() + X.mean() / 4.0
X_outliers[2:, :] += X.min() - X.mean() / 4.0
y_outliers[:2] += y.min() - y.mean() / 4.0
y_outliers[2:] += y.max() + y.mean() / 4.0
X = np.vstack((X, X_outliers))
y = np.concatenate((y, y_outliers))

데이터셋 시각화

이제 matplotlib 를 사용하여 데이터셋을 시각화합니다. X 값과 y 값을 플롯하여 표현합니다.

plt.plot(X, y, "b.")
plt.title("강력한 이상치가 포함된 데이터셋")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Huber 회귀 분석 적용

이제 HuberRegressor 를 데이터셋에 적용합니다. epsilon 값의 범위에 걸쳐 모델을 적합시켜 epsilon 값이 증가함에 따라 결정 함수가 Ridge 회귀의 결정 함수에 접근하는 방식을 보여줍니다.

## epsilon 값의 범위 정의
epsilon_values = [1, 1.5, 1.75, 1.9]

## 플롯을 위한 x 값 정의
x = np.linspace(X.min(), X.max(), 7)

## 플롯을 위한 색상 정의
colors = ["r-", "b-", "y-", "m-"]

## 일련의 epsilon 값에 대해 huber 회귀 분석 적용
for k, epsilon in enumerate(epsilon_values):
    huber = HuberRegressor(alpha=0.0, epsilon=epsilon)
    huber.fit(X, y)
    coef_ = huber.coef_ * x + huber.intercept_
    plt.plot(x, coef_, colors[k], label="huber 손실, %s" % epsilon)

## 플롯에 범례 추가
plt.legend(loc=0)

## 플롯 표시
plt.title("다양한 epsilon 값을 갖는 HuberRegressor")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

Ridge 회귀 분석 적용

이제 데이터셋에 Ridge 회귀 분석을 적용하고 HuberRegressor 와의 성능을 비교합니다.

## huber 회귀 분석과 비교하기 위해 ridge 회귀 분석 적용
ridge = Ridge(alpha=0.0, random_state=0)
ridge.fit(X, y)
coef_ridge = ridge.coef_
coef_ = ridge.coef_ * x + ridge.intercept_
plt.plot(x, coef_, "g-", label="ridge regression")

## 플롯에 범례 추가
plt.legend(loc=0)

## 플롯 표시
plt.title("HuberRegressor 와 Ridge 의 비교")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

요약

이 실험에서는 강력한 이상치가 포함된 데이터셋에서 두 개의 회귀 모델, HuberRegressor 와 Ridge 의 성능을 비교했습니다. 가상 데이터셋을 생성하고 강력한 이상치를 추가한 후 두 모델을 데이터셋에 적합시켰습니다. 결과를 시각화하고 모델의 성능을 비교했습니다. HuberRegressor 는 Ridge 회귀 분석보다 이상치의 영향을 덜 받았으며, epsilon 값이 증가함에 따라 HuberRegressor 의 결정 함수가 Ridge 회귀 분석의 결정 함수에 가까워지는 것을 관찰했습니다.