강력한 선형 모델 추정

Beginner

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

소개

이 실습에서는 scikit-learn 의 RANSAC 알고리즘을 사용하여 결함 있는 데이터에 선형 모델을 강건하게 적합하는 방법을 보여줍니다. 일반적인 선형 회귀 분석기는 이상치에 민감하며, 적합된 직선은 데이터의 실제 기저 관계에서 쉽게 벗어날 수 있습니다. RANSAC 회귀 분석기는 자동으로 데이터를 내부 데이터 포인트 (inliers) 와 외부 데이터 포인트 (outliers) 로 분류하고, 적합된 직선은 식별된 내부 데이터 포인트에 의해서만 결정됩니다. scikit-learn 의 make_regression 데이터셋을 사용하여 이상치가 있는 랜덤 데이터를 생성하고, 이 데이터에 선형 모델과 RANSAC 회귀 분석기를 모두 적합해 보겠습니다.

VM 팁

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

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

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

라이브러리 가져오기 및 데이터 생성

필요한 라이브러리를 가져오고 make_regression 데이터셋을 사용하여 랜덤 데이터를 생성하고 데이터에 이상치를 추가합니다.

import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets

## 데이터 생성
n_samples = 1000
n_outliers = 50

X, y, coef = datasets.make_regression(
    n_samples=n_samples,
    n_features=1,
    n_informative=1,
    noise=10,
    coef=True,
    random_state=0,
)

## 이상치 데이터 추가
np.random.seed(0)
X[:n_outliers] = 3 + 0.5 * np.random.normal(size=(n_outliers, 1))
y[:n_outliers] = -3 + 10 * np.random.normal(size=n_outliers)

선형 모델 적합

scikit-learn 의 LinearRegression 클래스를 사용하여 데이터에 선형 모델을 적합합니다.

## 모든 데이터를 사용하여 직선 적합
lr = linear_model.LinearRegression()
lr.fit(X, y)

RANSAC 회귀 분석기 적합

scikit-learn 의 RANSACRegressor 클래스를 사용하여 데이터에 RANSAC 회귀 분석기를 적합합니다.

## RANSAC 알고리즘으로 강건하게 선형 모델 적합
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)

추정된 모델의 데이터 예측

선형 모델과 RANSAC 회귀 분석기의 데이터를 예측하고 결과를 비교합니다.

## 추정된 모델의 데이터 예측
line_X = np.arange(X.min(), X.max())[:, np.newaxis]
line_y = lr.predict(line_X)
line_y_ransac = ransac.predict(line_X)

추정된 계수 비교

실제 모델, 선형 모델, RANSAC 회귀 분석기의 추정된 계수를 비교합니다.

## 추정된 계수 비교
print("추정된 계수 (실제, 선형 회귀, RANSAC):")
print(coef, lr.coef_, ransac.estimator_.coef_)

결과 시각화

선형 모델과 RANSAC 회귀 분석기의 데이터와 적합된 직선을 플롯합니다.

## 결과 시각화
lw = 2
plt.scatter(
    X[inlier_mask], y[inlier_mask], color="yellowgreen", marker=".", label="내재값"
)
plt.scatter(
    X[outlier_mask], y[outlier_mask], color="gold", marker=".", label="이상치"
)
plt.plot(line_X, line_y, color="navy", linewidth=lw, label="선형 회귀 분석기")
plt.plot(
    line_X,
    line_y_ransac,
    color="cornflowerblue",
    linewidth=lw,
    label="RANSAC 회귀 분석기",
)
plt.legend(loc="lower right")
plt.xlabel("입력")
plt.ylabel("응답")
plt.show()

요약

이 실험에서는 scikit-learn 의 RANSAC 알고리즘을 사용하여 오류가 있는 데이터에 선형 모델을 강건하게 적합하는 방법을 보여주었습니다. make_regression 데이터셋을 사용하여 랜덤 데이터를 생성하고, 데이터에 이상치를 추가한 후, 선형 모델과 RANSAC 회귀 분석기를 데이터에 적합시켰습니다. 두 모델의 데이터를 예측하고, 추정된 계수를 비교하고, 결과를 시각화했습니다. RANSAC 회귀 분석기는 자동으로 데이터를 내재값과 이상치로 분류하고, 적합된 직선은 식별된 내재값에 의해서만 결정되므로, 이상치가 있는 데이터에 모델을 적합시키는 더 강건한 방법입니다.