회귀 ( Regression ) - 다항 회귀와 과(대)적합 / 과소적합 이해

반응형

앞서 설명한 회귀는 단순히

y = w0 + w1x1 + w2x2 + w3*x3 …. + wn * xn 과 같이 독립변수(feature)와 종속변수(target)의 관계가 일차 방정식 형태로 표현된 회귀였습니다. 하지만 세상의 모든 관계를 직선으로만 표현할 수는 없습니다.

 

회귀가 독립변수의 단항식이 아닌 2차, 3차 방정식과 같은 다항식으로 표현되는 것을 다항(polynomial)회귀라고 합니다. 즉 , 다항 회귀는 y = w0 + w1x1 + w2x2 + w3x1x2 + w4x12** 과 같이 표현될 수 있습니다.

 

주의할 점으로 다항 회귀를 비선형 회귀로 혼동하기 쉽지만, 다항 회귀는 선형 회귀라는 점을 기억해야 합니다.

회귀에서 선형 / 비선형 의 선형성을 결정하는 것은 회귀 계수입니다. 독립 변수의 선형 / 비선형 여부와는 무관합니다.

 

출처 - javatpoint

 

위의 그림을 보면 데이터 세트에 대해서 선형 회귀 직선형으로 표현한 것보다 다항 회귀 곡선형으로 표현한 것이 더 예측 성능이 높다는 것을 알 수 있습니다.

 

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

 

사이킷런의 PolynomialFeatures 클래스를 통해 피처를 Polynomial (다항식) 피처로 변환합니다.

PolynomialFeatures 클래스는 degree 파라미터를 통해 입력 받은 단항식 피처를 degree에 해당하는 다항식 피처로 변환합니다.

다른 전처리 변환 클래스와 마찬가지로 PolynomialFeatures 클래스는 fit(), transform() 메서드를 통해 이 같은 변환 작업을 수행합니다.

 

출력 결과를 보면 단항 계수 피처들이 다항 계수 피처로 변환된 것을 확인할 수 있습니다.

이렇게 변환된 Polynomial 피처에 선형 회귀를 적용해 다항 회귀를 구현합니다.

y = 1 + 2x1 + 3x1**2 + 4x2**3 로 설정하고 이를 위한 함수 Polynomial_func()을 만들었습니다.

sklearn의 Pipeline 을 활용하여 인라인으로 polynomial 과 linear regression 적용.

단항 계수 피처들을 3차 다항 계수로 변환합니다.

 

출력 내용을 보면 일차 단항식 계수 피처는 2개였지만, 3차 다항식 Polynomial 변환 이후에는 다항식 계수 피처가 10개로 늘어납니다.

이 피처 데이터 세트에 LinearRegression을 통해 3차 다항 회귀 형태의 다항 회귀를 적용하면 회귀 계수가 10개로 늘어납니다.

 

10개의 회귀 계수 [0. 0.18 0.18 0.36 0.54 0.72 0.72 1.08 1.62 2.34] 가 도출됐으며

원래 다항식의 계수값들과 차이가 있지만 다항 회귀로 근사하고 있음을 알 수 있습니다.

 

사이킷런의 Pipeline 객체를 이용해 한 번에 다항 회귀를 구현하는 것이 코드를 더 명료하게 작성하는 방법입니다.

 

다항 회귀를 통한 과소적합 및 과적합 이해 - Overfitting , Underfitting

다항 회귀는 피처의 직선적 관계가 아닌 복잡한 다항 관계를 모델링 할 수 있습니다.

다항식의 차수가 높아질수록 매우 복잡한 피처 간의 관계까지 모델링이 가능합니다.

 

하지만 다항식의 차수(degree)를 높일수록 학습 데이터에만 너무 맞춘 학습이 이루어지기 때문에 과적합의 문제가 발생합니다.

 

따라서 좋은 예측 모델은 Degree 1 과 같이 학습 데이터의 패턴을 지나치게 단순화한 과소적합 모델도 아니고 Degree 15와 같이 모든 학습 데이터의 패턴을 하나하나 감안한 지나치게 복잡한 과적합 모델도 아닌,

학습 데이터의 패턴을 잘 반영하면서도 복잡하지 않은 균형 잡힌(Balanced) 모델을 의미합니다.

 

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

차수 Degree = 1 → 매우 단순화된 모델 → 고편향(High Bias) = 지나치게 한 방향으로 치우침

차수 Degree = 15 → 매우 복잡한 모델 → 고분산(high Variance) = 높은 변동성

 

과적합(Overfitting) → 분산이 높고 편향이 낮음.

과소적합(Underfitting) → 분산이 낮고 편향이 높음.

출처 - 구글 귀퉁이 서재 블로그

 

 

위 그림은 편향과 분산의 관계에 따른 전체 오류 값(Total Error)의 변화를 잘 보여준다. 출처 - google

 

편향과 분산이 적절히 트레이드-오프를 이루면서 오류 Cost 값이 최대로 낮아지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델을 만드는 방법입니다.

반응형