본문 바로가기
Machine Learning

선형 회귀모형 (릿지)

by Nowkeeh Ahc

 저차원 데이터 세트에서는 모형이 매우 단순하므로 과잉적합을 걱정할 필요가 없지만, 독립변수가 많은 고차원 데이터 세트에서는 모형이 점점 복잡해져 과잉적합 될 가능성이 높다. 이러한 경우, 모형의 복잡도는 가중치(계수)의 크기를 제한함으로써 제어할 수 있는데, 이러한 제약을 규제 (Regularization)라고 한다. 릿지 (Ridge) 회귀모형은 규제항을 사용함으로써 표준 회귀모형이 잠재적으로 가질 수 있는 모형의 복잡도나 과잉적합을 줄여준다.

 릿지 회귀모형에서 사용하는 규제 방식을 L2 규제라고 하며, 다음과 같은 규제항이 비용함수에 추가된다. 

 릿지 회귀 모형의 규제항은 계수들의 제곱합의 영향을 통제하기 위한 값을 결정하는데, 이러한 제약 조건은 기울기의 절댓값(즉, 독립변수의 영향력)을 작게 만들어 전체적으로 독립변수의 영향력을 최소한으로 만들 수 있다. 아래 그림에서 릿지 회귀 모형은 가 높아질수록 계수는 0에 가까워져 모형은 단순화되고, 가 작아질수록 반대로 계수가 커져 표준 선형 회귀 모형과 같아진다. 릿지 회귀의 장점은 원래의 선형 회귀 모형보다 비용을 더 들이지 않고, 매우 효율적으로 계산된다는 것이다.

[그래프 1] 'a' 에 따른 릿지 모형의 학습 결과 

 

연습

 

1) 모형 학습 및 예측

 릿지 선형 회귀모형을 생성하여 학습용 데이터를 모형에 학습시키고, 평가용 데이터를 이용해 실제 예측을 수행해 본다.

#1. 모듈 및 함수 불러오기
from sklearn.linear_model import Ridge

#2. 모형 학습 및 예측
Rr=Ridge(random_state=0).fit(X_train, Y_train)
Y_pred = Rr.predict(X_test)

print(‘평가용 데이터 세트에 대한 예측값\n’, Y_pred)

▶ 릿지 회귀모형이 구현되어 있는 sklearn.linear_model 모듈의 Ridge( ) 함수를 임포트한다.

▶ 릿지 회귀모형 객체를 생성하고, 여기에 fit( ) 함수를 적용하여 모형을 학습시킨다. Ridge( ) 함수의 주요 인자는 alpha이다. alpha는 모형의 규제 강도를 결정하는 인자인데, 기본 설정 값인 1로 지정하였다. 함수의 인자를 아무것도 설정하지 않을 경우 자동으로 기본 설정 값이 적용된다. 그다음 predict( ) 함수를 사용해 모형 객체가 예측한 값을 Y_pred라는 객체에 할당하였다.

Ridge( ) 함수에 대한 자세한 설명은 아래 URL에서 확인할 수 있다.

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html

 

2) 모형 평가

 결정계수와 RMSE를 사용하여 모형의 성능을 평가해보자. 

 

• 결정계수 평가

print(‘학습용 데이터 세트 결정계수: {:.3f}’.format(Rr.score(X_train, Y_train)))
print(‘평가용 데이터 세트 결정계수: {:.3f}’.format(Rr.score(X_test, Y_test)))

 

RMSE 평가

rmse= sqrt(mean_squared_error(Y_test, Y_pred))
print(‘RMSE: {:.3f}’.format(rmse))

 

3) 절편 및 가중치 출력

print(‘절편: ‘, np.round(Rr.intercept_, 3))
print(‘가중치: ‘, np.round(Rr.coef_, 3))

▶ coef_속성의 값은 여러 개이므로 format( ) 함수를 이용하여 반올림해 출력할 경우에는 배열의 값 하나하나의 위치를 지정해줘야 하는 번거로운 작업이 필요하다. 따라서 여기서는 round( ) 함수를 이용하여 결과값을 소수 셋째 자리에서 반올림하여 출력한다.


This post was written based on what I read and studied the book below.

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791195511747

댓글