今回はscikit-learn で単回帰分析する方法について解説します。
分析対象は「スプレッドシート(エクセル)とPythonで統計分析(2) 単回帰分析の方法」で行った「1日の最高気温とアイスクリームの販売個数」のデータを使います。
スプレッドシートで単回帰分析を行う方法は「スプレッドシート(エクセルなど)とPythonで統計分析(2) 単回帰分析の方法」を参考にしてください。
データの準備
用意したデータはある店舗における1日の最高気温とアイスクリーム購入数です。
(注)データの数値は架空の数値です。
必要なライブラリの読み込みを行います。
sklearn.linear_model.LinearRegression クラスをあわせて読み込みます。
import numpy as np import pandas as pd import matplotlib.pyplot as plt # sklearn.linear_model.LinearRegression クラスを読み込み from sklearn import linear_model clf = linear_model.LinearRegression()
CSVの読み込みを行います。
ice = pd.read_csv("ice.csv") ice.head(5)
読み込んだデータの一部を「ice.head(5)」で表示しています。
# 説明変数に "最高気温" を利用 X = ice.loc[:, ['最高気温']].as_matrix() # 目的変数に "アイスクリーム販売数" を利用 Y = ice['アイスクリーム販売数'].as_matrix()
# 予測モデルを作成 clf.fit(X, Y)
回帰係数を求めます。
回帰係数とは回帰直線の傾きのことで、この値が求まると散布図に回帰直線を引くことができます。
また、回帰直線を引けるということは、予測ができるようになります。
scikit-learn を使うことで回帰係数も簡単に求めることができます。
# 回帰係数 print(clf.coef_)
結果:[1.76617647]
scikit-learn を使わなかった場合は最小二乗法を使うことになります。
最小二乗法の公式
$$
a = \frac{\frac{1}{n}{\displaystyle\sum_{i=1}^{n}}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle{\frac{1}{n}\sum_{i=1}^{n}}(X_i – \overline{X})^{2}}
= \frac{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})^{2}}
$$
$$
a = \frac{\frac{1}{n}{\displaystyle\sum_{i=1}^{n}}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle{\frac{1}{n}\sum_{i=1}^{n}}(X_i – \overline{X})^{2}}
= \frac{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})(Y_i – \overline{Y})}
{\displaystyle\sum_{i=1}^{n}(X_i – \overline{X})^{2}}
$$
切片を求めます。
# 切片 (誤差) print(clf.intercept_)
結果:-9.75735294117645
決定係数を求めます。
# 決定係数 print(clf.score(X, Y))
結果:0.920300641543021
散布図を描画します。
# 散布図 plt.scatter(X, Y) # 回帰直線 plt.plot(X, clf.predict(X))
コメントを投稿するにはログインしてください。