과거 데이터를 이용해서 미래의 값을 예측하는 선형 회귀를 공부해 보았다.
머신러닝 - 선형 회귀(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 문제로 모델이 학습 데이터에 너무 맞춰져서 새로운 데이터에 일반화가 어려워지는 현상을 말한다. 따라서 적절한 차수를 선택해야 이 문제를 해소 할 수 있다.
그리고 차수를 이용해서 복잡한 식을 통해 임의의 곡선형 데이터를 만들었기 때문에 모델에 대한 신뢰도에 문제가 발생할 수 있다.
'Bigdata' 카테고리의 다른 글
FFNN - 순방향 신경망(feedforward neural network) (0) | 2024.08.11 |
---|---|
OpenAI 등, 문서 요약, Text Summarization API 사이트들 (4) | 2024.08.11 |
허깅페이스(huggingface) - transformers등 기본 모델 위치 (0) | 2024.06.10 |
머신러닝 - K-최근접 이웃 회귀(KNN Regression) 알고리즘 특징과 코드 (0) | 2024.06.08 |
머신러닝 - 결정계수와 과대/과소적합 (0) | 2024.06.08 |