Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 구현하는 다항식 회귀(Polynomial Regression) 완벽 가이드

다항식 회귀란 무엇인가?

다항식 회귀(Polynomial Regression)는 선형 회귀의 한 형태로, 독립 변수 x와 종속 변수 y 사이의 관계를 n차 다항식으로 모델링하는 기법입니다. 일반적인 선형 회귀가 직선으로 데이터를 표현하는 것과 달리, 다항식 회귀는 곡선을 활용할 수 있어 비선형 패턴을 가진 데이터에도 적합하게 피팅(fitting)할 수 있습니다.

다항식 회귀는 x 값과 그에 대응하는 y의 조건부 평균 E(y | x) 사이의 비선형 관계를 모델링하며, 온도와 압력처럼 직선적 관계로 설명하기 어려운 실제 데이터 분석에 널리 사용됩니다.

Python 구현 예제

1. 라이브러리 임포트 및 데이터 준비

먼저 필요한 라이브러리를 불러오고 CSV 파일로부터 데이터셋을 읽어옵니다. 이후 데이터를 독립 변수(X)와 종속 변수(y)로 분리합니다.

# 필요한 라이브러리 임포트
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 데이터셋 불러오기
datas = pd.read_csv('data.csv')
datas

# 데이터셋을 두 개의 구성 요소로 분리
X = datas.iloc[:, 1:2].values
y = datas.iloc[:, 2].values

2. 선형 회귀 모델 학습

비교를 위해 먼저 단순 선형 회귀 모델을 데이터에 피팅합니다.

# 선형 회귀를 데이터셋에 피팅
from sklearn.linear_model import LinearRegression
lin = LinearRegression()
lin.fit(X, y)

3. 다항식 회귀 모델 학습

PolynomialFeatures를 사용해 입력 특성을 다항식 특성으로 변환한 후, 변환된 특성에 선형 회귀를 적용합니다. 여기서는 4차(degree=4) 다항식을 사용했습니다.

# 다항식 회귀를 데이터셋에 피팅
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree = 4)
X_poly = poly.fit_transform(X)
poly.fit(X_poly, y)
lin2 = LinearRegression()
lin2.fit(X_poly, y)

4. 결과 시각화

산점도와 함께 두 모델의 예측 결과를 시각화하여 차이를 확인할 수 있습니다.

# 선형 회귀 결과 시각화
plt.scatter(X, y, color = 'blue')
plt.plot(X, lin.predict(X), color = 'red')
plt.title('Linear Regression')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.show()

# 다항식 회귀 결과 시각화
plt.scatter(X, y, color = 'blue')
plt.plot(X, lin2.predict(poly.fit_transform(X)), color = 'red')
plt.title('Polynomial Regression')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.show()

선형 회귀의 경우 빨간색 직선이 데이터의 곡선 패턴을 따라가지 못하지만, 다항식 회귀는 곡선 형태로 데이터에 더 잘 맞는 것을 확인할 수 있습니다.

5. 새로운 값 예측

학습된 두 모델을 사용하여 새로운 입력값(예: 110.0)에 대한 예측을 수행합니다.

# 선형 회귀로 새로운 결과 예측
lin.predict(110.0)

# 다항식 회귀로 새로운 결과 예측
lin2.predict(poly.fit_transform(110.0))

마무리

다항식 회귀는 비선형 관계를 가진 데이터를 모델링할 때 강력한 도구입니다. 다만 차수(degree)를 지나치게 높이면 과대적합(overfitting)이 발생할 수 있으므로, 교차 검증 등을 통해 적절한 차수를 선택하는 것이 중요합니다. 위 예제처럼 scikit-learn의 PolynomialFeaturesLinearRegression을 조합하면 손쉽게 다항식 회귀 모델을 구축할 수 있습니다.