본문 바로가기
Bigdata

머신러닝 - 다항 회귀(Polynomial Regression) 알고리즘 특징과 코드

by 올엠 2024. 8. 11.
반응형

과거 데이터를 이용해서 미래의 값을 예측하는 선형 회귀를 공부해 보았다.

머신러닝 - 선형 회귀(Linear regression) 알고리즘 특징과 코드 (asecurity.dev)

이제 그럼 선형 회귀의 일반적인 문제점인 과소적합에 대해서 알아보자. 선형 회귀는 직선을 그리기 때문에, 특정 값은 과도하게 작은 문제가 있다. 즉 작은 값이 0이 되는 문제가 발생한다. 위 예제에서도 아무리 과거라고 해도 아파트 가격이 0원일리는 없을 것이다.

이러한 문제를 해결 할 수 있도록 제공하는 것이 다항 회귀이다.

다항회귀는 아래 그림과 같이 곡선을 가지도록 하여, 특정 예측 이하의 값이 나타나지 않도록 하여 보다 적합한 예측을 할 수 있도록 도와준다.

다항 회귀는 선형 회귀에 PolynomialFeatures 를 추가하여 다항식의 차수(degree)를 높여서 데이터를 통해 곡선 형태의 데이터를 얻게 된다. 즉 데이터를 통해서 가장 알맞은

곡선을 얻게 된다.

코드는 다음과 같다.
 
학습 데이터가 기존에는 완전한 선형 데이터이기 때문에, 기존 선형 회귀 데이터와 조금은 다른 데이터를 넣어준다.
import numpy as np

import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression

from sklearn.preprocessing import PolynomialFeatures

from sklearn.metrics import mean_squared_error



# 데이터 생성

years = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009]

apt_prices = [300000, 330000, 340000, 350000, 340000, 350000, 380000, 390000, 420000, 450000]  # 아파트 크기를 150으로 가정

그리고 다항 회귀 차수를 입력하고, 이를 통해 다항 회귀 선형 모델을 학습하도록 하자.

# 데이터 변환
years = np.array(years).reshape(-1, 1)
apt_prices = np.array(apt_prices)

# 다항 회귀 모델 생성 및 학습
degree = 2  # 다항식 차수
poly = PolynomialFeatures(degree=degree)
X_poly = poly.fit_transform(years)


# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_poly, apt_prices)

 

학습이 완료되면, 2022년과 2023년 사이 데이터를 학습해보도록 하자.

# 모델 예측

years_predict = np.arange(2022,2023).reshape(-1, 1)

X_poly_predict = poly.transform(years_predict)

predicted_prices = model.predict(X_poly_predict)

print(predicted_prices)

# 평가

y_pred = model.predict(X_poly)

mse = mean_squared_error(apt_prices, y_pred)

print('Mean Squared Error:', mse)

학습 결과를 보면 기존에 선형 회귀시 예측값이 540,000 이였는데, 지금은 973,333으로 상당히 높아진 것을 알 수 있다.

이 문제는 다항 회귀에서 자주 나타나는 문제로 과적합 오류가 발생할 수 있다.

과적합이란, Overfitting 문제로 모델이 학습 데이터에 너무 맞춰져서 새로운 데이터에 일반화가 어려워지는 현상을 말한다. 따라서 적절한 차수를 선택해야 이 문제를 해소 할 수 있다.

그리고 차수를 이용해서 복잡한 식을 통해 임의의 곡선형 데이터를 만들었기 때문에 모델에 대한 신뢰도에 문제가 발생할 수 있다.

 

 

 

 

 

반응형