프로젝트/코드프레소 체험단

파이썬으로 구현하는 머신러닝 : 회귀분석 - 사이킷런 활용한 릿지 규제 실습

KimCookieYa 2022. 1. 17. 23:58

머신러닝에서는 과대적합(overfitting)을 줄이면서, 일반성을 가지는 모델을 생성하는 것이 중요함

이를 위해 사용되는 규제 기법에는 릿지(ridge) 회귀, 라쏘(lasso) 회귀 기법 등이 있음

 

릿지 회귀(Ridge Regression)

 - 회귀계수의 제곱 값에 페널티를 부여하는 방식

 - 회귀 계수 값의 크기를 감소시켜 과적합을 개선하는 방식

 - L2 규제라고도 함

 - 모델러에 의해 지정된 alpha 값을 통해서 페널티를 조정할 수 있음

 

<적용 프로세스>
 1) alpha 값 정의
 2) Ridge(alpha) 클래스 객체 생성
 3) fit(X, y) 을 통해 학습 데이터 연결 및 규제 학습 수행
 4) predict(X) 통해 학습된 모델의 예측 수행
 5) score(X, y) 통해 R^2 값 확인(모델의 성능 지표 계산)

 

'''
-------- [최종 출력 결과] --------
Training-datasset R2 : 0.748
Test-datasset R2 : 0.708
Ridge Regression Coefficients :
RM          3.6
CHAS        3.3
RAD         0.3
ZN          0.1
INDUS       0.1
AGE         0.0
TAX        -0.0
B           0.0
CRIM       -0.1
LSTAT      -0.6
PTRATIO    -0.8
DIS        -1.3
NOX       -15.7
dtype: float64
----------------------------------
'''
# 필요한 라이브러리 로딩
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
# 릿지 회귀 모델 적용을 위해 Ridge 로딩
from sklearn.linear_model import Ridge

# 데이터셋 로딩
boston = load_boston()

# 데이터셋 분할
# random_state 값은 강의와 동일하게 지정하세요.
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.3, random_state=12)

# 규제를 위한 alpha 값 초기화
# 학습시에는  alpha 값을 바꾸가면서 테스트해보시고,
# 최종 코드 제출시에는 0.1 로 지정후 제출하세요.
alpha = 0.1

# Rigde 클래스 객체 생성
ridge = Ridge(alpha=alpha)

# 규제 학습 수행
ridge.fit(x_train, y_train)

# 모델을 통한 예측
ridge_pred = ridge.predict(x_test)

# 학습된 모델에 대한 R^2 계산
r2_train = ridge.score(x_train, y_train)
r2_test = ridge.score(x_test, y_test)
print('Training-datasset R2 : {0:.3f}'.format(r2_train))
print('Test-datasset R2 : {0:.3f}'.format(r2_test))

# 컬럼별 회귀계수 저장한 Series 객체 생성 및 출력              
ridge_coef_table = pd.Series(data=np.round(ridge.coef_, 1), index=boston.feature_names)
print('Ridge Regression Coefficients :')
print(ridge_coef_table.sort_values(ascending=False))

# 막대그래프 시각화 
plt.figure(figsize=(10,5))
ridge_coef_table.plot(kind='bar')
plt.ylim(-12, 5)
plt.show()

릿지 규제 실습 결과