라쏘 (Lasso) 와 탄성 네트워크 (Elastic Net)

Beginner

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

소개

이 튜토리얼에서는 선형 회귀에 사용되고 좌표 하강법을 통해 구현되는 Lasso 와 Elastic Net 기법에 대해 배웁니다. Lasso 와 Elastic Net 을 사용하여 정규화 경로를 계산하고 matplotlib 를 사용하여 결과를 표시하는 방법을 학습합니다.

VM 팁

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

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

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

데이터셋 로드

이 단계에서는 scikit-learn 라이브러리에서 당뇨병 데이터셋을 로드하고 데이터를 표준화합니다.

from sklearn import datasets

## 당뇨병 데이터셋 로드
X, y = datasets.load_diabetes(return_X_y=True)

## 데이터 표준화
X /= X.std(axis=0)

Lasso 를 이용한 정규화 경로 계산

이 단계에서는 Lasso 기법을 사용하여 정규화 경로를 계산하고 matplotlib 를 사용하여 결과를 표시합니다.

from sklearn.linear_model import lasso_path
import numpy as np
import matplotlib.pyplot as plt

## eps 값 설정
eps = 5e-3

## Lasso 를 이용하여 정규화 경로 계산
alphas_lasso, coefs_lasso, _ = lasso_path(X, y, eps=eps)

## matplotlib 를 사용하여 결과 표시
plt.figure(1)
colors = cycle(["b", "r", "g", "c", "k"])
neg_log_alphas_lasso = -np.log10(alphas_lasso)
for coef_l, c in zip(coefs_lasso, colors):
    l1 = plt.plot(neg_log_alphas_lasso, coef_l, c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("계수")
plt.title("Lasso 경로")
plt.axis("tight")
plt.show()

양수 Lasso 를 이용한 정규화 경로 계산

이 단계에서는 양수 Lasso 기법을 사용하여 정규화 경로를 계산하고 matplotlib 를 사용하여 결과를 표시합니다.

## 양수 Lasso 를 이용하여 정규화 경로 계산
alphas_positive_lasso, coefs_positive_lasso, _ = lasso_path(X, y, eps=eps, positive=True)

## matplotlib 를 사용하여 결과 표시
plt.figure(2)
neg_log_alphas_positive_lasso = -np.log10(alphas_positive_lasso)
for coef_l, coef_pl, c in zip(coefs_lasso, coefs_positive_lasso, colors):
    l1 = plt.plot(neg_log_alphas_lasso, coef_l, c=c)
    l2 = plt.plot(neg_log_alphas_positive_lasso, coef_pl, linestyle="--", c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("계수")
plt.title("Lasso 및 양수 Lasso")
plt.legend((l1[-1], l2[-1]), ("Lasso", "양수 Lasso"), loc="lower left")
plt.axis("tight")
plt.show()

탄성 네트워크를 이용한 정규화 경로 계산

이 단계에서는 탄성 네트워크 (Elastic Net) 기법을 사용하여 정규화 경로를 계산하고 matplotlib 를 사용하여 결과를 표시합니다.

from sklearn.linear_model import enet_path

## 탄성 네트워크를 이용하여 정규화 경로 계산
alphas_enet, coefs_enet, _ = enet_path(X, y, eps=eps, l1_ratio=0.8)

## matplotlib 를 사용하여 결과 표시
plt.figure(3)
neg_log_alphas_enet = -np.log10(alphas_enet)
for coef_e, c in zip(coefs_enet, colors):
    l1 = plt.plot(neg_log_alphas_enet, coef_e, c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("계수")
plt.title("탄성 네트워크 경로")
plt.axis("tight")
plt.show()

양수 탄성 네트워크를 이용한 정규화 경로 계산

이 단계에서는 양수 탄성 네트워크 기법을 사용하여 정규화 경로를 계산하고 matplotlib 를 사용하여 결과를 표시합니다.

## 양수 탄성 네트워크를 이용하여 정규화 경로 계산
alphas_positive_enet, coefs_positive_enet, _ = enet_path(X, y, eps=eps, l1_ratio=0.8, positive=True)

## matplotlib 를 사용하여 결과 표시
plt.figure(4)
neg_log_alphas_positive_enet = -np.log10(alphas_positive_enet)
for coef_e, coef_pe, c in zip(coefs_enet, coefs_positive_enet, colors):
    l1 = plt.plot(neg_log_alphas_enet, coef_e, c=c)
    l2 = plt.plot(neg_log_alphas_positive_enet, coef_pe, linestyle="--", c=c)

plt.xlabel("-Log(alpha)")
plt.ylabel("계수")
plt.title("탄성 네트워크 및 양수 탄성 네트워크")
plt.legend((l1[-1], l2[-1]), ("탄성 네트워크", "양수 탄성 네트워크"), loc="lower left")
plt.axis("tight")
plt.show()

요약

이 튜토리얼에서는 선형 회귀에 사용되는 라쏘 (Lasso) 와 탄성 네트워크 (Elastic Net) 기법에 대해 배웠습니다. 라쏘와 탄성 네트워크를 사용하여 정규화 경로를 계산하는 방법과 matplotlib 를 사용하여 결과를 표시하는 방법을 학습했습니다. 또한 양수 라쏘 (positive Lasso) 와 양수 탄성 네트워크 (positive Elastic Net) 기법을 사용하여 정규화 경로를 계산하는 방법도 배웠습니다.