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() 

Python의 다항식 회귀선

모델 계수를 인쇄하여 적합 다항식 회귀 방정식을 얻을 수 있습니다.

 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% 가 예측 변수에 의해 설명될 수 있음을 의미합니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다