Python에서 3차 회귀를 수행하는 방법


3차 회귀는 변수 간의 관계가 비선형일 때 예측 변수와 반응 변수 간의 관계를 수량화하는 데 사용할 수 있는 회귀 유형입니다.

이 튜토리얼에서는 Python에서 3차 회귀를 수행하는 방법을 설명합니다.

예: Python의 3차 회귀

두 개의 변수(x 및 y)를 포함하는 다음 pandas DataFrame이 있다고 가정합니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' x ': [6, 9, 12, 16, 22, 28, 33, 40, 47, 51, 55, 60],
                   ' y ': [14, 28, 50, 64, 67, 57, 55, 57, 68, 74, 88, 110]})

#view DataFrame
print (df)

     xy
0 6 14
1 9 28
2 12 50
3 16 64
4 22 67
5 28 57
6 33 55
7 40 57
8 47 68
9 51 74
10 55 88
11 60 110

이 데이터의 간단한 산점도를 만들면 두 변수 간의 관계가 비선형임을 알 수 있습니다.

 import matplotlib. pyplot as plt

#create scatterplot
plt. scatter (df. x , df. y ) 

x 값이 증가하면 y는 특정 지점까지 증가한 다음 감소하고 다시 증가합니다.

플롯에 두 개의 “곡선”이 있는 이 패턴은 두 변수 간의 3차 관계를 나타냅니다.

이는 3차 회귀 모델이 두 변수 간의 관계를 정량화하는 데 적합한 후보라는 것을 의미합니다.

3차 회귀를 수행하기 위해 numpy.polyfit() 함수 를 사용하여 3차 다항식 회귀 모델을 맞출 수 있습니다.

 import numpy as np

#fit cubic regression model
model = np. poly1d (np. polyfit (df. x , df. y , 3))

#add fitted cubic regression line to scatterplot
polyline = np. linspace (1, 60, 50)
plt. scatter (df. x , df. y )
plt. plot (polyline, model(polyline))

#add axis labels
plt. xlabel (' x ')
plt. ylabel (' y ')

#displayplot
plt. show () 

Python의 3차 회귀

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

 print (model)

          3 2
0.003302x - 0.3214x + 9.832x - 32.01

적합 3차 회귀 방정식은 다음과 같습니다.

y = 0.003302(x) 3 – 0.3214(x) 2 + 9.832x – 30.01

이 방정식을 사용하여 x 값을 기반으로 y의 기대값을 계산할 수 있습니다.

예를 들어 x가 30이면 y의 예상 값은 64.844입니다.

y = 0.003302(30) 3 – 0.3214(30) 2 + 9.832(30) – 30.01 = 64.844

예측 변수로 설명할 수 있는 응답 변수의 분산 비율인 모델의 R-제곱을 얻기 위해 짧은 함수를 작성할 수도 있습니다.

 #define function to calculate r-squared
def polyfit(x, y, degree):
    results = {}
    coeffs = np. polyfit (x, y, degree)
    p = np. poly1d (coeffs)
    #calculate r-squared
    yhat = p(x)
    ybar = np. sum (y)/len(y)
    ssreg = np. sum ((yhat-ybar) ** 2)
    sstot = np. sum ((y - ybar) ** 2)
    results[' r_squared '] = ssreg / sstot

    return results

#find r-squared of polynomial model with degree = 3
polyfit(df. x , df. y , 3)

{'r_squared': 0.9632469890057967}

이 예에서 모델의 R 제곱은 0.9632 입니다.

이는 반응 변수 변동의 96.32%가 예측 변수에 의해 설명될 수 있음을 의미합니다.

이 값이 너무 높기 때문에 3차 회귀 모델이 두 변수 간의 관계를 잘 정량화하고 있음을 알 수 있습니다.

관련 항목: 좋은 R 제곱 값이란 무엇입니까?

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Python에서 단순 선형 회귀를 수행하는 방법
Python에서 2차 회귀를 수행하는 방법
Python에서 다항식 회귀를 수행하는 방법

의견을 추가하다

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