본문 바로가기

Lecture ML

머신러닝 강좌 #25] 다항 회귀와 과(대)적합/과소적합 이해

반응형

지금까지 설명한 회귀는 독립변수(feature)와 종속변수(target)의 관계가 일차 방정식 형태로 표현된 회귀였습니다. 하지만 세상의 모든 관계를 직선으로만 표현할 수는 없습니다. 

 

회귀가 독립변수의 단항식이 아닌 2차, 3차 방정식과 같은 다항식으로 표현되는 것을 다항회귀라고 합니다. 한 가지 주의할 것은 다항 회귀를 비선형 회귀로 혼동하기 쉽지만, 다항 회귀는 선형 회귀라는 점입니다. 회귀에서 선형 회귀/비선형 회귀를 나누는 기준은 회귀 계수가 선형/비선형인지에 따른 것이지 독립변수의 선형/비선형 여부와는 무관합니다.

 

아쉽지만 사이킷런은 다항 회귀를 위한 클래스를 명시적으로 제공하지 않습니다. 대신 다항 회귀 역시 선형 회귀이기 때문에 비선형 함수를 선형 모델에 적용시키는 방법을 사용해 구현합니다.

 

사이킷런은 PolynomialFeatures클래스를 통해 피처를 Polynomial(다항식)피처로 변환합니다. PolynomialFeatures클래스는 degree파라미터를 통해 입력 받은 단항식 피처를 degree에 해ㅏㅇ하는 다항식 피처로 변환합니다. 다른 전처리 변환 클래스와 마찬가지로 PolynomialFeatures클래스는 fit(), transform()메서드를 통해 이 같은 변환 작업을 수행합니다.

from sklearn.preprocessing import PolynomialFeatures
import numpy as np

#다항식으로 변환한 단항식 생성, [[0,1],[2,3]]의 2x2행렬 생성
X = np.arange(4).reshape(2, 2)
print('일차 단항식 계수 피처:\n', X)

#degree = 2인 2차 다항식으로 변환하기 위해 PolynmiaFeatures를 이용해 변환
poly = PolynomialFeatures(degree=2)
poly.fit(X)
poly_ftr = poly.transform(X)
print('변환된 2차 다항식 계수:\n', poly_ftr)

[Output]

일차 단항식 계수 피처:
 [[0 1]
 [2 3]]
변환된 2차 다항식 계수:
 [[1. 0. 1. 0. 0. 1.]
 [1. 2. 3. 4. 6. 9.]]

...

..

 

추가..

 

 


편향-분산 트레이드오프(Bias-Variance Trade Off)

 

편향-분산 트레이드오프는 머신러닝이 극복해야 할 가장 중요한 이슈 중의 하나입니다. 앞의 Degree 1과 같은 모델은 매우 단순화된 모델로서 지나치게 한 방향성으로 치우친 경향이 있습니다. 이런 모델을 고편향(high Bias)성을 가졌다고 표현합니다. 반대로 Degree 15와 같은 모델은 학습 데이터 하나 하나의 특성을 반영하면서 매우 복잡한 모델이 되었고 지나치게 높은 변동성을 가지게 되었습니다. 이런 모델을 고분산(High Variance)성을 가졌다고 표현합니다.

 

일반적으로 편향과 분산은 한 쪽이 높으면 한 쪽이 낮아지는 경향이 있습니다. 즉, 편향이 높으면 분산은 낮아지고(과소적합) 반대로 분산이 높으면 편향이 낮아집니다(과적합). 편향이 너무 높으면 전체 오류가 높습니다. 편향을 점점 낮추면 동시에 분산이 높아지고 전체 오류도 낮아지게 됩니다. 편향을 낮추고 분산을 높이면서 전체 오류가 가장 낮아지는 '골디락스'지점을 통과하면서 분산을 지속적으로 높이면 전체 오류 값이 오히려 증가하면서 예측 성능이 저하됩니다.

 

높은 편향/낮은 분산에서 과소적합되기 쉬우며 낮은 편향/높은 분산에서 과적합되기 쉽습니다. 편향과 분산이 서로 트레이드오프를 이루면서 오류 Cost값이 최대로 낮아지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델을 만드는 방법입니다.

반응형