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 ()
모델 계수를 인쇄하여 적합 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에서 다항식 회귀를 수행하는 방법