다항회귀

혜쿰·2023년 11월 16일
0
post-thumbnail

다항회귀는 선형회귀와 유사하지만 조금 차이점이 있고 비선형 회귀의 종류중 하나라고 볼 수 있다. 다항회귀에 대해서 알아보자.


다항 회귀에 대해서 자세히 알아보기 전, 비선형 회귀에 대해서 알아보자.

📗 비선형 회귀

  • 일반적인 선형 회귀 모델은 독립 변수와 종속 변수 간의 관계를 직선으로 가정한다. 하지만 현실 데이터는 직선적인 관계로 설명하기 어려운 경우가 많다. 이 때 사용되는 것이 비선형 회귀이다. 말 그대로 선형(직선)이 아닌 데이터를 분석하는 것이라고 생각할 수 있다.
  • 비선형 회귀는 다양한 함수 형태(지수 함수, 로그 함수, 삼각 함수 등)를 사용하여 모델을 구성하여 데이터와의 적합도를 높인다.

📒 다항 회귀

  • 다항 회귀는 선형 회귀와 유사하지만, 독립 변수의 거듭제곱 항을 포함하여 모델을 구성한다.
  • 다항 회귀 모델은 주어진 데이터를 잘 설명하기 위해 일반적인 선형 회귀보다 유연한 곡선 형태를 갖게 된다.
  • 일반적으로 1차항, 2차항, 3차항과 같이 변수의 제곱, 세제곱과 같은 고차항을 사용하여 모델링한다.
    위 사진은 같은 데이터에 대해서 선형 회귀로 분석했을 때와 다항 회귀로 분석했을 때의 차이점을 보여주는 극단적인 예시이다.
    데이터가 직선을 이루지않고 있기 때문에 보이는 것과 같이 선형회귀는 데이터를 잘 설명하는 방법이라고 할 수 없다. 하지만 다항 회귀는 선형회귀에 비해 데이터를 잘 설명하고 있다고 할 수 있다. 무조건 "선형 회귀가 좋다.", "다항 회귀가 좋다." 라는 말은 틀렸다. 데이터에 맞는 분석방법을 선택하는 것이 좋다.

다항식 : y=β0+β1x+β2x2+β3x3+...+βnxn+εy = β_0 + β_1x + β_2x^2 + β_3x^3 + ... + β_nx^n + ε

  • yy : 종속 변수
  • xx : 독립 변수(또는 특성)
  • $ β_0, β_1, β_3, ..., β_n $ : 모델의 계수(coefficients)이며, 각각 상수항, xx의 1차, 2차, ..., nn차 항의 계수이다.
  • nn : 다항식의 차수(degree)
  • εε : 오차 항으로 모델이 설명하지 못하는 잡음을 나타냄.


    이 수식은 xx의 다항식 형태로, xx의 여러 차수를 사용하여 회귀 모델을 구성하는 것을 나타낸다. nn차 다항식이므로 xxnn승까지의 항이 포함된다.
    예를 들어, 2차 다항 회귀의 경우, 위의 수식은 다음과 같이 변형될 수 있다.
    y=β0+β1x+β2x2+εy = β_0 + β_1x + β_2x^2 + ε
    이것은 2차 다항식 모델로, xx의 1차 및 2차 항만을 사용하여 회귀 모델을 표현한다.

다항회귀는 비선형회귀에 포함되는 개념이다.
다항 회귀는 비선형 회귀 중의 하나로, 비선형 관계를 모델링하는 방법 중 하나이다. 비선형 회귀는 선형 회귀와는 달리 종속 변수와 독립 변수 간의 관계가 선형적이지 않은 경우를 다루는 개념이다.
다항 회귀는 선형 회귀의 형태를 그대로 사용하면서, 독립 변수의 거듭제곱 항을 추가하여 모델을 구성한다. 이를 통해 데이터의 비선형적인 패턴을 더 잘 설명할 수 있다. 다항 회귀에서는 일반적으로 독립 변수 xx의 제곱항, 세제곱항과 같은 고차항을 추가하여 모델링한다.

📘 다항 회귀 실습

🔎 코드 예시

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression 
from sklearn.preprocessing import PolynomialFeatures 
x = np.array((1,2,3,4,5))
y = np.array((4,2,1,3,7))

x = x[:, np.newaxis] # 차원 확대

# feature에 항(다항식 특징)을 추가 
poly = PolynomialFeatures(degree=2, include_bias=False)
x2 = poly.fit_transform(x) # 특징행렬을 생성. x를 나타낸 값, x**2 값 (degree에 따라 달라짐)
print(x2)

model2 = LinearRegression().fit(x2, y) 
ypred2 = model2.predict(x2)
print('ypred2 : ',ypred2)

plt.scatter(x, y)
plt.plot(x, ypred2, c='blue')
plt.show()

🔎 코드 리뷰

이 코드는 다항 회귀를 사용하여 주어진 데이터에 대해 회귀 모델을 학습하고 시각화하는 과정을 나타낸다.

먼저, 코드에서는 NumPy 배열을 사용하여 x와 y 데이터를 정의하고 있다. 그리고 x 배열을 2차원 배열로 변환하고 있다. 다음은 PolynomialFeatures를 사용하여 다항식 특징을 추가한다. 이 부분에서 degree=2로 설정하여 2차 다항식으로 변환되는 것을 확인할 수 있다.

그 후에 LinearRegression 모델을 생성하고, fit() 메서드를 사용하여 다항식 특징을 가진 x2와 y 사이의 관계를 학습한다. 학습된 모델을 사용하여 예측을 수행하고, 이를 ypred2에 저장한다.

마지막으로 plt.scatter() 함수를 사용하여 원본 데이터를 점으로 나타내고, plt.plot() 함수를 사용하여 다항 회귀 모델의 예측값을 선으로 나타내어 시각화하고 있다.
이를 실행하면, 원본 데이터 점들과 그에 맞는 회귀 모델의 예측값인 파란색 선이 나타나는 그래프를 확인할 수 있다. 위에 첨부한 사진 중 오른쪽과 같은 결과가 나올 것이다.

0개의 댓글

관련 채용 정보