반응형

우리는 로지스틱 회귀를 공부할 때, 머신러닝을 통해 획득한 모델이 오버피팅 또는 언더피팅이 되지 않도록 하기 위해 사용되는 기법인 정규화에 대해 살펴본 적이 있습니다. 물론 기억이 가물가물 하겠지요~ 아래의 링크를 살포시 눌러 기억을 되살리고 옵니다~

 

☞ 로지스틱 회귀 살펴보러 가기

 

 

회귀 분석에서도 정규화를 적용하여 회귀 모델을 계산하게 되면 최적의 모델을 구하는데 도움이 됩니다.

 

정규화를 적용하여 회귀 분석을 수행하는 방법은 아래와 같이 3가지가 있습니다.

 

  • 리지 회귀(Ridge Regression)
    • L2 정규화 적용 모델
  • 라쏘(LASSO; Least Absolute Shrinkage and Selection Operator)
    • L2 정규화 보다 약한 모델
  • Elastic Net
    • L2와 LASSO를 조합한 모델

 

위 3가지 정규화 방법에 따라 회귀 모델을 구하기 위해 사용되는 비용함수 J(w)는 다음과 같습니다.

 

리지 회귀를 위한 비용함수

 

                      

 

 

라쏘를 위한 비용함수

 

                      

 

 

Elastic Net을 위한 비용함수

 

                   

 

 

바로 직전 포스팅의 skl_ra.py에 필요한 모듈을 추가하고 lr = LinearRegression() 부분 다음에 아래 코드와 같이 Ridge(), LASSO(), ElasticNet() 을 추가합니다.

 

skl_ra1.py

 

 

먼저 위 코드와 같이 skl_ra1.py에서 lr = Ridge() 부분만 주석을 해제하고 나머지 호출 부분은 주석 처리해줍니다.

 

 

>>> lr = Ridge(alpha=1.0)

 

Ridge()의 인자 alpha는 위에서 보인 수식의 λ와 비슷한 역할을 합니다. 이 값을 1.0으로 설정합니다.

 

 

>>> lr = ElasticNet(alpha=1.0, l1_ratio=0.5)

 

ElasticNet()인자 l1_ratio는 Elastic Net을 위한 cost function 식에서 λ2 의 비율을 뜻합니다. 이 값을 1.0으로 설정하면 LASSO와 동일한 효과를 갖습니다.

 

 

이 코드에 바로 앞 포스팅에서 적용한 MSE, 결정 계수를 계산해주는 코드를 추가하여 실행하면 다음과 같은 결과가 나옵니다.

 

MSE - 트레이닝 데이터: 20.14, 테스트 데이터: 27.76
R2 - 트레이닝 데이터: 0.76, 테스트 데이터: 0.67


 

 

주석을 순차적으로 변경하여 코드를 수행하여 결과를 정리하면 다음과 같습니다.

 

LinearRegression 적용

MSE - 트레이닝 데이터: 19.96, 테스트 데이터: 27.20
R2 - 트레이닝 데이터: 0.76, 테스트 데이터: 0.67

 

Ridge 적용

MSE - 트레이닝 데이터: 20.14, 테스트 데이터: 27.76
R2 - 트레이닝 데이터: 0.76, 테스트 데이터: 0.67

 

LASSO 적용

MSE - 트레이닝 데이터: 24.72, 테스트 데이터: 32.35
R2 - 트레이닝 데이터: 0.71, 테스트 데이터: 0.61

 

Elastic Net 적용

MSE - 트레이닝 데이터: 24.38, 테스트 데이터: 31.87
R2 - 트레이닝 데이터: 0.71, 테스트 데이터: 0.62

 

 

리지 회귀, 라쏘 기법에서 인자로 입력되는 alpha의 값을 적절하게 조절하여 회귀 모델의 적합도를 향상 시킬 수 있습니다. 

 


반응형

+ Recent posts