우리는 로지스틱 회귀를 공부할 때, 머신러닝을 통해 획득한 모델이 오버피팅 또는 언더피팅이 되지 않도록 하기 위해 사용되는 기법인 정규화에 대해 살펴본 적이 있습니다. 물론 기억이 가물가물 하겠지요~ 아래의 링크를 살포시 눌러 기억을 되살리고 옵니다~
회귀 분석에서도 정규화를 적용하여 회귀 모델을 계산하게 되면 최적의 모델을 구하는데 도움이 됩니다.
정규화를 적용하여 회귀 분석을 수행하는 방법은 아래와 같이 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편] 회귀 분석 - 정규화 기법을 이용한 회귀 모델|작성자 옥수별
'책 리뷰 > Python Machine Learning' 카테고리의 다른 글
[29편] 회귀 분석 - 의사결정 트리 회귀와 랜덤 포레스트 회귀 (0) | 2017.12.14 |
---|---|
[28편] 회귀 분석 - 다항 회귀(Polynomial Regression) (0) | 2017.12.14 |
[26편] 회귀 분석 - 회귀 모델의 적합도 측정 (0) | 2017.12.14 |
[25편] 회귀 분석 - RANSAC (0) | 2017.12.14 |
[24편] 회귀 분석 - 최소제곱법 기반 회귀 모델 구현하기 (0) | 2017.12.14 |