Lasso 회귀 모델 선택

Beginner

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

소개

이 실습에서는 Lasso 회귀 모델에 대한 최적의 하이퍼파라미터 alpha 를 선택하는 방법을 배웁니다. 두 가지 접근 방식이 논의될 것입니다: (1) 훈련 데이터 세트와 일부 정보 기준만을 사용하여 최적의 alpha 값을 선택하고, (2) 교차 검증을 사용하여 최적의 하이퍼파라미터를 선택하는 것입니다. 이 예제에서는 당뇨병 데이터 세트를 사용합니다.

VM 팁

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

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

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

데이터셋

먼저, sklearn.datasetsload_diabetes 함수를 사용하여 당뇨병 데이터셋을 로드합니다. 이 데이터셋은 10 개의 기저 변수 (나이, 성별, 체질량 지수, 평균 혈압, 그리고 6 가지 혈청 측정값) 와 기저 상태 이후 1 년 후 질병 진행 정도의 정량적 측정값으로 구성됩니다.

from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True)
X.head()

랜덤 특징 추가

Lasso 모델이 수행하는 특징 선택을 더 잘 보여주기 위해 원본 데이터에 몇 가지 랜덤 특징을 추가합니다. 랜덤 특징은 numpyRandomState 함수를 사용하여 생성됩니다.

import numpy as np
import pandas as pd

rng = np.random.RandomState(42)
n_random_features = 14
X_random = pd.DataFrame(
    rng.randn(X.shape[0], n_random_features),
    columns=[f"random_{i:02d}" for i in range(n_random_features)],
)
X = pd.concat([X, X_random], axis=1)
X[X.columns[::3]].head()

정보 기준을 통한 Lasso 선택

sklearn.linear_modelLassoLarsIC 함수를 사용하여 Akaike 정보 기준 (AIC) 또는 Bayes 정보 기준 (BIC) 을 사용하여 정규화 매개변수 alpha 의 최적 값을 선택하는 Lasso 추정기를 제공합니다. 먼저 AIC 기준으로 Lasso 모델을 맞출 것입니다.

import time
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LassoLarsIC
from sklearn.pipeline import make_pipeline

start_time = time.time()
lasso_lars_ic = make_pipeline(StandardScaler(), LassoLarsIC(criterion="aic")).fit(X, y)
fit_time = time.time() - start_time

결과 저장 및 최적 alpha 확인

fit 과정에서 사용된 각 alpha 값에 대한 AIC 지표를 저장합니다. 그런 다음 BIC 기준을 사용하여 동일한 분석을 수행합니다. 마지막으로 AIC 와 BIC 가 최소가 되는 alpha 값을 확인합니다.

results = pd.DataFrame(
    {
        "alphas": lasso_lars_ic[-1].alphas_,
        "AIC criterion": lasso_lars_ic[-1].criterion_,
    }
).set_index("alphas")
alpha_aic = lasso_lars_ic[-1].alpha_

lasso_lars_ic.set_params(lassolarsic__criterion="bic").fit(X, y)
results["BIC criterion"] = lasso_lars_ic[-1].criterion_
alpha_bic = lasso_lars_ic[-1].alpha_

def highlight_min(x):
    x_min = x.min()
    return ["font-weight: bold" if v == x_min else "" for v in x]

results.style.apply(highlight_min)

AIC 및 BIC 값 플롯

마지막으로, 서로 다른 alpha 값에 대한 AIC 및 BIC 값을 플롯합니다. 플롯의 수직선은 각 기준에 대해 선택된 alpha 값에 해당합니다. 선택된 alpha 는 AIC 또는 BIC 기준의 최소값에 해당합니다.

ax = results.plot()
ax.vlines(
    alpha_aic,
    results["AIC criterion"].min(),
    results["AIC criterion"].max(),
    label="alpha: AIC estimate",
    linestyles="--",
    color="tab:blue",
)
ax.vlines(
    alpha_bic,
    results["BIC criterion"].min(),
    results["BIC criterion"].max(),
    label="alpha: BIC estimate",
    linestyle="--",
    color="tab:orange",
)
ax.set_xlabel(r"$\alpha$")
ax.set_ylabel("criterion")
ax.set_xscale("log")
ax.legend()
_ = ax.set_title(
    f"Information-criterion for model selection (training time {fit_time:.2f}s)"
)

교차 검증을 통한 Lasso 선택

두 가지 다른 추정기를 사용하여 통합된 교차 검증으로 최적의 하이퍼파라미터 alpha 를 선택합니다: LassoCVLassoLarsCV. 두 알고리즘 모두 20-폴드 교차 검증 전략을 사용합니다.

좌표 하강법을 이용한 Lasso

LassoCV를 사용하여 하이퍼파라미터 튜닝을 수행합니다.

from sklearn.linear_model import LassoCV

start_time = time.time()
model = make_pipeline(StandardScaler(), LassoCV(cv=20)).fit(X, y)
fit_time = time.time() - start_time

최소 각도 회귀를 이용한 Lasso

LassoLarsCV를 사용하여 하이퍼파라미터 튜닝을 수행합니다.

from sklearn.linear_model import LassoLarsCV

start_time = time.time()
model = make_pipeline(StandardScaler(), LassoLarsCV(cv=20)).fit(X, y)
fit_time = time.time() - start_time

교차 검증 접근 방식 요약

두 알고리즘 모두 거의 동일한 결과를 제공합니다. Lars 는 경로의 각 변곡점에 대해서만 해결 경로를 계산합니다. 따라서 변곡점이 적을 경우, 즉 특징이나 샘플이 적을 경우 매우 효율적입니다. 반대로, 좌표 하강법은 사전에 지정된 그리드 (여기서는 기본값을 사용) 에서 경로 점을 계산합니다. 따라서 그리드 점의 수가 경로의 변곡점 수보다 적을 경우 더 효율적입니다. 이러한 전략은 특징의 수가 매우 많고 각 교차 검증 폴드에서 충분한 샘플이 선택될 수 있는 경우에 유용할 수 있습니다. 수치 오차 측면에서, 상관 관계가 높은 변수의 경우 Lars 는 더 많은 오류를 축적할 것이고, 좌표 하강법 알고리즘은 그리드에서 경로를 샘플링할 것입니다.

요약

이 실습에서는 Lasso 회귀 모델에 대한 최적의 하이퍼파라미터 alpha 를 선택하는 방법을 배웠습니다. 두 가지 접근 방식을 논의했습니다: (1) 훈련 세트와 일부 정보 기준만을 사용하여 alpha 의 최적값을 선택하는 방법, 그리고 (2) 교차 검증을 사용하여 최적의 하이퍼파라미터를 선택하는 방법입니다. 이 예제에서는 당뇨병 데이터 세트를 사용했습니다. 두 가지 접근 방식 모두 유사하게 작동할 수 있지만, 샘플 내 하이퍼파라미터 선택은 계산 성능 측면에서 효과가 있습니다. 그러나 특징의 수에 비해 샘플의 수가 충분히 많을 때만 사용할 수 있습니다. 교차 검증을 통한 하이퍼파라미터 최적화는 다양한 환경에서 안전한 전략입니다.