[27편] 회귀 분석 - 정규화 기법을 이용한 회귀 모델
우리는 로지스틱 회귀를 공부할 때, 머신러닝을 통해 획득한 모델이 오버피팅 또는 언더피팅이 되지 않도록 하기 위해 사용되는 기법인 정규화에 대해 살펴본 적이 있습니다. 물론 기억이 가물가물 하겠지요~ 아래의 링크를 살포시 눌러 기억을 되살리고 옵니다~
회귀 분석에서도 정규화를 적용하여 회귀 모델을 계산하게 되면 최적의 모델을 구하는데 도움이 됩니다.
정규화를 적용하여 회귀 분석을 수행하는 방법은 아래와 같이 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의 값을 적절하게 조절하여 회귀 모델의 적합도를 향상 시킬 수 있습니다.
[출처] [27편] 회귀 분석 - 정규화 기법을 이용한 회귀 모델|작성자 옥수별