Scikit-Learn Lasso 회귀 분석

Beginner

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

소개

이 실험은 Scikit-learn 의 Lasso 회귀 알고리즘을 밀집 데이터와 희소 데이터에 적용하는 방법을 보여줍니다. Lasso 알고리즘은 회귀 계수에 페널티를 추가하는 선형 회귀 방법입니다. 이 페널티는 모델이 희소 계수를 생성하도록 장려합니다. Lasso 알고리즘은 특징의 수가 샘플 수에 비해 많은 상황에서 유용합니다.

VM 팁

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

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

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

라이브러리 가져오기

필요한 라이브러리를 가져오는 것으로 시작합니다. Scikit-learn, NumPy, SciPy 가 필요합니다.

from time import time
from scipy import sparse
from scipy import linalg
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso

밀집 데이터 생성

다음으로 Lasso 회귀에 사용할 밀집 데이터를 생성합니다. Scikit-learn 의 make_regression 함수를 사용하여 200 개의 샘플과 5000 개의 특징을 가진 데이터를 생성합니다.

X, y = make_regression(n_samples=200, n_features=5000, random_state=0)

밀집 데이터에 Lasso 학습

이제 밀집 데이터와 희소 데이터에 각각 하나씩, 두 개의 Lasso 회귀 모델을 학습시킵니다. alpha 매개변수를 1 로 설정하고 최대 반복 횟수를 1000 으로 설정합니다.

alpha = 1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)

밀집 데이터에 Lasso 적용

Scikit-learn 의 fit 함수를 사용하여 밀집 데이터에 Lasso 회귀 모델을 적용합니다. 또한, 적용 시간을 측정하고 각 Lasso 모델의 시간을 출력합니다.

t0 = time()
sparse_lasso.fit(X_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(X, y)
print(f"Dense Lasso done in {(time() - t0):.3f}s")

밀집 Lasso 와 희소 Lasso 계수 비교

밀집 Lasso 모델과 희소 Lasso 모델의 계수를 비교하여 동일한 결과를 생성하는지 확인합니다. 계수 간 차이의 유클리드 노름을 계산합니다.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

희소 데이터 생성

다음으로, Lasso 회귀에 사용할 희소 데이터를 생성합니다. 이전 단계에서 밀집 데이터를 복사하고, 값이 2.5 미만인 모든 값을 0 으로 바꿉니다. 또한, 희소 데이터를 Scipy 의 Compressed Sparse Column 형식으로 변환합니다.

Xs = X.copy()
Xs[Xs < 2.5] = 0.0
Xs_sp = sparse.coo_matrix(Xs)
Xs_sp = Xs_sp.tocsc()

희소 데이터에 대한 Lasso 학습

이제 밀집 데이터와 희소 데이터 각각에 대해 Lasso 회귀 모델을 두 개 학습합니다. alpha 매개변수를 0.1 로, 최대 반복 횟수를 10000 으로 설정합니다.

alpha = 0.1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)

희소 데이터에 Lasso 적용

Scikit-learn 의 fit 함수를 사용하여 희소 데이터에 Lasso 회귀 모델을 적용합니다. 또한, 적용 시간을 측정하고 각 Lasso 모델의 시간을 출력합니다.

t0 = time()
sparse_lasso.fit(Xs_sp, y)
print(f"Sparse Lasso done in {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(Xs, y)
print(f"Dense Lasso done in  {(time() - t0):.3f}s")

밀집 Lasso 와 희소 Lasso 계수 비교

밀집 Lasso 모델과 희소 Lasso 모델의 계수를 비교하여 동일한 결과를 생성하는지 확인합니다. 계수 간 차이의 유클리드 노름을 계산합니다.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance between coefficients : {coeff_diff:.2e}")

요약

이 실험에서 Scikit-learn 의 Lasso 회귀 알고리즘을 밀집 데이터와 희소 데이터에 적용하는 방법을 보여주었습니다. Lasso 알고리즘이 밀집 데이터와 희소 데이터에 대해 동일한 결과를 제공하며, 희소 데이터의 경우 알고리즘이 더 빠르다는 것을 보여주었습니다.