Python/Sklearn

[Sklearn] 파이썬 Regularization : Lasso, Ridge, ElasticNet 적용하기

jimmy_AI 2022. 6. 3. 20:18
반응형

파이썬 사이킷런 라쏘, 릿지, 엘라스틱넷 규제 사용 예제

파이썬에서 선형 회귀 등의 머신러닝 모형을 학습할 때,

대표적인 regularization 방법들인 Lasso, Ridge 및 ElasticNet을 적용하는 방법을

간단한 예제를 통하여 정리해보도록 하겠습니다.

 

 

기본 사용법 : 선형회귀에서 Lasso, Ridge 및 ElasticNet 규제 적용

기본적으로, 라쏘 등의 규제 방법들은 선형 회귀 모델의 복잡도에 패널티를 부여합니다.

 

사이킷런의 선형 회귀 모형에 대한 이해가 필요하시다면 아래의 이전 글을 참고하세요.

 

[Sklearn] 파이썬으로 선형 회귀 분석하기 예제 (Linear Regression)

이번 포스팅에서는 파이썬 사이킷런 모듈로 선형 회귀 분석을 진행하는 방법에 대하여 간단히 다루어보도록 하겠습니다. 우선, 데이터셋으로는 kaggle의 Bike Sharing Demand 학습 데이터셋을 사용하

jimmy-ai.tistory.com

 

여기서 다룰 세 가지 규제 모형은 사이킷런의 LinearRegression 함수에서

Lasso는 L1 norm, Ridge는 L2 norm, ElasticNet은 L1 및 L2 norm이 혼합된 패널티

추가로 부여된 형태로 이해해주시면 됩니다.

 

모형을 불러오고 선언 및 학습의 방법은 아래 예시 코드와 같습니다.

from sklearn.linear_model import Lasso, Ridge, ElasticNet
import numpy as np

# 데이터셋 가정
X_train = np.random.random((10, 2))
y_train = np.random.random((10, 1))

# 라쏘, 릿지, 엘라스틱넷 적용 선형 회귀 모형 선언
model_l = Lasso(alpha = 0.1)
model_r = Ridge(alpha = 0.1)
model_e = ElasticNet(alpha = 0.1, l1_ratio = 0.5)

# 선언된 모형 학습
model_l.fit(X_train, y_train)
model_r.fit(X_train, y_train)
model_e.fit(X_train, y_train)

이후 선형 회귀처럼 테스트 데이터셋에 대하여 predict 후 성능 평가를 진행해주시면 됩니다.

 

참고로, 세 규제 모형 모두에서 alpha는 규제의 강도를 의미하며,

높은 숫자일수록 패널티를 크게 부여합니다.

 

또한, 엘라스틱넷에서 l1_ratio로 l1 norm의 비중을 지정할 수 있으며,

나머지 비중은 l2 norm이 반영되게 됩니다.(l1_ratio는 0에서 1 사이만 가능합니다.)

 

반응형

 

다른 모형에서 Regularization 적용 방법 : make_pipeline 사용

만일, 선형 회귀가 아닌 다른 모형에서 Lasso, Ridge 그리고 ElasticNet의 규제를 적용하려면

어떻게 해야할까요?

 

로지스틱 회귀 모형처럼 자체 함수에서 panelty를 지정하는 argument를 제공하는 경우에는

해당 메소드의 기능을 그대로 사용하시면 됩니다.

 

그러나, 자체적으로 regularization을 제공하지 않는 모형인 경우에는

make_pipeline이라는 사이킷런의 특수 기능을 사용하셔야 합니다.

 

예시로, 2차식으로 회귀를 진행하는 다항 회귀 함수인 PolynomialFeatures에

규제를 추가로 적용하는 예제를 살펴보겠습니다.

 

아래 코드로 Lasso 규제를 적용하지 않은 경우와 적용한 경우의 차이를 비교해보세요.

(Ridge 및 ElasticNet도 마찬가지로 진행해주시면 됩니다.)

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Lasso
from sklearn.pipeline import make_pipeline

# 단순한 2차 회귀 모형
model_1 = PolynomialFeatures(2)

# 라쏘 규제가 적용된 2차 회귀 모형
model_2 = make_pipeline(PolynomialFeatures(2), Lasso(alpha = 0.1))

# 이후 취급 방법은 동일
model_1.fit(X_train, y_train)
model_2.fit(X_train, y_train)