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

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 次回帰モデルが 2 つの変数間の関係を適切に定量化していることがわかります。

関連:適切な R 二乗値とは何ですか?

追加リソース

次のチュートリアルでは、Python で他の一般的なタスクを実行する方法について説明します。

Python で単純な線形回帰を実行する方法
Python で二次回帰を実行する方法
Python で多項式回帰を実行する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です