ライブラリを読み込む
import pandas as pd #表形式のデータを扱うためのライブラリ
import matplotlib.pyplot as plt #グラフ描画ライブラリ
学習データをダウンロードする
学習データを読み込む
学習データをDataFrameとして読み込みます。
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を予測
コメント