【統計学】回帰分析と最小二乗法(Python)
今回はPythonで単回帰分析です。調べてみるといろいろやり方があるようです。
データはおなじみの上記書籍のP60にあるJリーグの試合結果のデータを使用します。
statsmodelで単回帰分析
こちらは回帰分析の結果の要約が出ます。
import pandas as pd import statsmodels.api as sm #データ df = pd.DataFrame({ 'score':[67, 84, 80, 60, 68, 62, 51, 47, 49, 50, 57, 43, 56, 46, 42, 32, 44, 38], 'wins':[22, 20, 20, 18, 17, 18, 13, 13, 13, 13, 13, 13, 13, 12, 12, 5, 6, 4] }) #回帰分析 import statsmodels.api as sm y = df["wins"] X = df["score"] mod = sm.OLS(y, sm.add_constant(X)) res = mod.fit() res.summary() #結果を表示
結果はこちら
sklearnで単回帰分析
こちらは散布図に回帰直線が描けます。予測とかもできるので機械学習向けかもしれません。 こちらも参考になります。
import pandas as pd from sklearn.linear_model import LinearRegression #データ df = pd.DataFrame({ 'score':[67, 84, 80, 60, 68, 62, 51, 47, 49, 50, 57, 43, 56, 46, 42, 32, 44, 38], 'wins':[22, 20, 20, 18, 17, 18, 13, 13, 13, 13, 13, 13, 13, 12, 12, 5, 6, 4] }) #回帰分析 mod = LinearRegression(fit_intercept = True) lm = mod.fit(df[["score"]], df[["wins"]]) print(lm) # 回帰係数 print(mod.coef_) #[[ 0.3139177]] # 切片 (誤差) print(mod.intercept_) #[-3.41020408] # 決定係数 print(mod.score(df[["score"]], df[["wins"]])) #0.753611299082
結果をいちいち呼び出さないといけなかったり、結果の出力の方が違ったりなんだかです。