見出し画像

Pythonで単回帰分析

(1)単回帰分析を行なう

今回は単回帰分析と図の作成をしたいと思います。以前、scipyのstatsを用いたので、今回はsklearnで行なってみます。

(2)使うデータ

いつもどおりirisデータです。

(3)実際に計算してみる。

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

df = pd.read_csv('iris.csv')

#変数を指定。[]が2つあるのは、sklearnとPandasの関係性のため。
X = df[['sepal.length']]
Y = df[['petal.length']]

 #単回帰分析 reg = LinearRegression().fit(X, Y)

#係数と回帰式を確認
print('回帰係数: %.3f' %reg.coef_)
print('切片: %.3f' %reg.intercept_)
print('回帰直線: y = %.3fx %.3f' % (reg.coef_ , reg.intercept_))

#決定係数を確認
R2 = reg.score(X, Y)
print('決定係数 R2: %.3f' %R2)

#予測結果をdfに追加
df['pred'] = reg.predict(X)

#図にしてみます。
plt.xticks(np.arange(0, 11, 1))
plt.xlim(0, 10)
plt.yticks(np.arange(0, 11, 1))
plt.ylim(0, 10)

plt.xlabel('がくの長さ')
plt.ylabel('花弁の長さ')

plt.scatter(df['sepal.length'], df['petal.length'])
plt.plot(df['sepal.length'], df['pred'], color='orange')
plt.show()

出来上がりの図はこちらです。

以下、解説です。

■6~8行目

#変数を指定。[]が2つあるのは、sklearnとPandasの関係性のため。
X = df[['sepal.length']]
Y = df[['petal.length']]

sklearnはnumpyの配列を想定しているようで、Pandasのコラムを指定するだけだとエラーになります。[]を2つ書くことで、コラムをnumpyの配列っぽくしてくれます。

■9~10行目

 #単回帰分析 
reg = LinearRegression().fit(X, Y)

回帰分析はこの1行で終わりです。簡単!

■12~16行目

#係数と回帰式を確認
print('回帰係数: %.3f' %reg.coef_)
print('切片: %.3f' %reg.intercept_)
print('回帰直線: y = %.3fx %.3f' % (reg.coef_ , reg.intercept_))
#決定係数を確認
R2 = reg.score(X, Y)
print('決定係数 R2: %.3f' %R2)

回帰係数と切片を確認します。その後、回帰式を算出します。また決定係数R2も併せて出力します。
各変数の意味は以下のとおりです。

  • coef_:回帰係数

  • intercept_:切片

  • score:決定係数R2

(4)まとめ

Excelよりは手間がかかりますが、簡単ですね。
またsklearn_pandasというパッケージも開発されているようです。このパッケージを使えば、6~8行目は[]1つで良くなるかもしれません。

(5)参考

sklearn.linear_model.LinearRegressionについてはここです。
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html