単回帰分析をPythonで実装する

スポンサーリンク

ライブラリを読み込む

import pandas as pd #表形式のデータを扱うためのライブラリ
import matplotlib.pyplot as plt #グラフ描画ライブラリ

学習データをダウンロードする

学習データを読み込む

学習データをDataFrameとして読み込みます。

DataFrameは、2次元のデータ構造で、行と列で表現されます。

df=pd.read_csv("sample.csv")

データを中心化する

df_c=df-df.mean()

中心化した入出力データを抽出する

中心化した入力データと出力データを抽出します。

x=df_c["x"] #入力データ
y=df_c["y"] #出力データ

パラメータaを計算する

$$a=\frac{(\displaystyle \sum_{n=1}^{N} x_ny_n)}{(\displaystyle \sum_{n=1}^{N} {x_n}^2)}$$

xx=x*x #xの要素積
xy=x*y #xyの要素積
a=xy.sum()/xx.sum()

実測値と予測値をグラフに描画する

中心化された実測値と予測値のグラフを描画します。

plt.scatter(x, y, label="y") #実測値xyの散布図をプロット
plt.plot(x, a*x, label="y_hat", color="red") #予測値xyの折れ線グラフを描画
plt.legend() #凡例の表示

中心化された予測値を元のスケールに戻す式

中心化された予測値に平均値yを足すと、元のスケールに戻ります。

$$y-\bar{y}=a(x-\bar{x})$$

$$y=a(x-\bar{x})+\bar{y}$$

予測値を計算する関数を作成する

def predict(x, xm, ym):
  xc=x-xm
  y_hat=a*xc+ym
  return y_hat

入力データxからyを予測する

入力データに55を与えると、110000と予測されました。

predict(55, df["x"].mean(), df["y"].mean()) #入力データxからyを予測

コメント

タイトルとURLをコピーしました