Python で 3 次回帰を実行する方法
3 次回帰は、変数間の関係が非線形である場合に、予測変数と応答変数の間の関係を定量化するために使用できる回帰の一種です。
このチュートリアルでは、Python で 3 次回帰を実行する方法を説明します。
例: Python での 3 次回帰
2 つの変数 (x と y) を含む次のパンダ データフレームがあるとします。
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
このデータの単純な散布図を作成すると、2 つの変数間の関係が非線形であることがわかります。
import matplotlib. pyplot as plt
#create scatterplot
plt. scatter (df. x , df. y )
x の値が増加すると、y はある点まで増加し、その後減少し、その後再び増加します。
プロット内に 2 つの「曲線」があるこのパターンは、2 つの変数間の三次関係を示しています。
これは、3 次回帰モデルが 2 つの変数間の関係を定量化するための適切な候補であることを意味します。
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 次回帰モデルが 2 つの変数間の関係を適切に定量化していることがわかります。
追加リソース
次のチュートリアルでは、Python で他の一般的なタスクを実行する方法について説明します。
Python で単純な線形回帰を実行する方法
Python で二次回帰を実行する方法
Python で多項式回帰を実行する方法