Python에서 다항식 회귀를 수행하는 방법
회귀 분석은 하나 이상의 설명 변수와 반응 변수 간의 관계를 수량화하는 데 사용됩니다.
가장 일반적인 유형의 회귀 분석은 단순 선형 회귀 로, 예측 변수와 반응 변수가 선형 관계를 가질 때 사용됩니다.
그러나 예측 변수와 반응 변수 간의 관계가 비선형인 경우도 있습니다.
예를 들어, 실제 관계는 2차일 수 있습니다.
또는 3차일 수도 있습니다.
이러한 경우 변수 간의 비선형 관계를 설명할 수 있는 다항식 회귀를 사용하는 것이 좋습니다.
이 튜토리얼에서는 Python에서 다항식 회귀를 수행하는 방법을 설명합니다.
예: Python의 다항식 회귀
Python에 다음과 같은 예측 변수(x)와 응답 변수(y)가 있다고 가정합니다.
x = [2, 3, 4, 5, 6, 7, 7, 8, 9, 11, 12] y = [18, 16, 15, 17, 20, 23, 25, 28, 31, 30, 29]
이 데이터의 간단한 산점도를 생성하면 x와 y 사이의 관계가 분명히 선형이 아니라는 것을 알 수 있습니다.
import matplotlib.pyplot as plt #create scatterplot plt.scatter(x, y)
따라서 이 데이터에 선형 회귀 모델을 적용하는 것은 의미가 없습니다. 대신, numpy.polyfit() 함수를 사용하여 3차 다항식 회귀 모델을 맞추려고 시도할 수 있습니다.
import numpy as np #polynomial fit with degree = 3 model = np.poly1d(np.polyfit(x, y, 3)) #add fitted polynomial line to scatterplot polyline = np.linspace(1, 12, 50) plt.scatter(x, y) plt.plot(polyline, model(polyline)) plt.show()
모델 계수를 인쇄하여 적합 다항식 회귀 방정식을 얻을 수 있습니다.
print(model) poly1d([ -0.10889554, 2.25592957, -11.83877127, 33.62640038])
적합 다항식 회귀 방정식은 다음과 같습니다.
y = -0.109x 3 + 2.256x 2 – 11.839x + 33.626
이 방정식은 주어진 설명 변수 값에 대해 응답 변수의 기대 값을 찾는 데 사용할 수 있습니다.
예를 들어 x = 4라고 가정합니다. 응답 변수 y의 예상 값은 다음과 같습니다.
y = -0.109(4) 3 + 2.256(4) 2 – 11.839(4) + 33.626= 15.39 .
예측 변수로 설명할 수 있는 응답 변수의 분산 비율인 모델의 R-제곱을 얻기 위해 짧은 함수를 작성할 수도 있습니다.
#define function to calculate r-squared def polyfit(x, y, degree): results = {} coeffs = numpy.polyfit(x, y, degree) p = numpy.poly1d(coeffs) #calculate r-squared yhat = p(x) ybar = numpy.sum(y)/len(y) ssreg = numpy.sum((yhat-ybar)**2) sstot = numpy.sum((y - ybar)**2) results['r_squared'] = ssreg / sstot return results #find r-squared of polynomial model with degree = 3 polyfit(x, y, 3) {'r_squared': 0.9841113454245183}
이 예에서 모델의 R 제곱은 0.9841 입니다.
이는 반응 변수 변동의 98.41% 가 예측 변수에 의해 설명될 수 있음을 의미합니다.