선형 모델과 교차 검증

Beginner

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

소개

이 실습에서는 선형 모델과 교차 검증을 사용합니다. 당뇨병 데이터셋을 사용하고 GridSearchCV 를 통해 Lasso 회귀에 대한 최적의 alpha 값을 찾을 것입니다. 그런 다음 오류를 플롯하고 LassoCV 를 사용하여 alpha 선택에 얼마나 신뢰할 수 있는지 확인할 것입니다.

VM 팁

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

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

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

데이터셋 로드 및 준비

먼저 당뇨병 데이터셋을 로드하고 준비합니다. 이 연습에서는 처음 150 개 샘플만 사용합니다.

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets

X, y = datasets.load_diabetes(return_X_y=True)
X = X[:150]
y = y[:150]

GridSearchCV 적용

다음으로, Lasso 회귀에 대한 최적의 alpha 값을 찾기 위해 GridSearchCV 를 적용합니다. 10^-4 에서 10^-0.5 까지의 alpha 값 범위를 사용하고 그 사이에 30 개의 값을 포함합니다. 교차 검증에는 5 개의 폴드를 사용합니다.

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV

lasso = Lasso(random_state=0, max_iter=10000)
alphas = np.logspace(-4, -0.5, 30)

tuned_parameters = [{"alpha": alphas}]
n_folds = 5

clf = GridSearchCV(lasso, tuned_parameters, cv=n_folds, refit=False)
clf.fit(X, y)

오차 플롯

이제 최적의 alpha 값을 확인하기 위해 오차를 플롯합니다. 평균 테스트 점수와 점수의 표준 오차를 플롯합니다.

scores = clf.cv_results_["mean_test_score"]
scores_std = clf.cv_results_["std_test_score"]

plt.figure().set_size_inches(8, 6)
plt.semilogx(alphas, scores)

std_error = scores_std / np.sqrt(n_folds)

plt.semilogx(alphas, scores + std_error, "b--")
plt.semilogx(alphas, scores - std_error, "b--")

plt.fill_between(alphas, scores + std_error, scores - std_error, alpha=0.2)

plt.ylabel("CV 점수 ± 표준 오차")
plt.xlabel("alpha")
plt.axhline(np.max(scores), linestyle="--", color=".5")
plt.xlim([alphas[0], alphas[-1]])

alpha 선택 확인을 위한 LassoCV 사용

마지막으로, alpha 선택에 얼마나 신뢰할 수 있는지 확인하기 위해 LassoCV 를 사용합니다. 3 개의 폴드를 가진 KFold 를 사용합니다.

from sklearn.linear_model import LassoCV
from sklearn.model_selection import KFold

lasso_cv = LassoCV(alphas=alphas, random_state=0, max_iter=10000)
k_fold = KFold(3)

print("보너스 질문에 대한 답변:", "alpha 선택에 얼마나 신뢰할 수 있나요?")
print()
print("데이터의 서로 다른 하위 집합에서 일반화 점수를 극대화하는 alpha 매개변수:")
for k, (train, test) in enumerate(k_fold.split(X, y)):
    lasso_cv.fit(X[train], y[train])
    print(
        "[폴드 {0}] alpha: {1:.5f}, 점수: {2:.5f}".format(
            k, lasso_cv.alpha_, lasso_cv.score(X[test], y[test])
        )
    )

print()
print("답변: 서로 다른 데이터 하위 집합에 대해 다른 alpha 값을 얻었고, 게다가 이러한 alpha 값에 대한 점수가 상당히 다르기 때문에 매우 신뢰할 수 없습니다.")

요약

이 실험에서 선형 모델과 함께 교차 검증을 사용하는 방법을 배웠습니다. GridSearchCV 를 사용하여 Lasso 회귀에 대한 최적의 alpha 값을 찾았고, 오차를 플롯하여 선택을 시각화했습니다. 또한 LassoCV 를 사용하여 alpha 선택을 확인했습니다.