俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

ep4-2:単純な直線で近似する。( 「実践 機械学習システム」に学ぶ。)

オライリージャパン社の「実践 機械学習システム」に取り組んでいます。

今回は、「単純な直線で近似する」を学びます。

では、順に取り組んでいきます。

 1.まずは、誤差を計算する関数を定義する。

#誤差を定義する。

def error(f,x,y):

    return sp.sum(((f(x)-y))**2)

実際のデータ(y)とモデルが予想した値(f(x))のユークリッド平方距離を合計して誤差とします。(2乗和誤差)

2.近似モデルのパラメータを取得する。

#直線で近似してみる。

fp1, residuals, rank, sv, rcond = sp.polyfit(x,y,1,full=True)



print("Model parameters: %s" % fp1)

print(residuals)
Model parameters: [ 2.56140278 1009.17153379]
[3.18104549e+08]
 
polyfit関数は、近似したモデルのパラメータを fp1 で返します。
引数のxは入力、yは出力、1はxとyの多項式の次元(次元が1なので直線)を表します。
また、full=True を指定することで、近似プロセスの情報を得ることができます。今回、注目したのは、近似誤差を表す residuals (3.18104549e+08)になります。
モデルパラメータ―のfp1の数字は、近似関数が以下であることを表します。
 f(x)= 2.56140278 * x + 1009.17153379
 
 

3.モデルパラメータ(fp1)からモデル関数をを作る。

#poly1d()を用いることで、モデルパラメータからモデル関数を作れます。

f1 = sp.poly1d(fp1)
#1.で定義した誤差関数で誤差を求める。 print(error(f1,x,y))
318104548.81995213

poly1d()関数に、モデルパラメータfp1を渡すことで、モデル関数f1を定義します。

先ほど、1.で定義した誤差関数で誤差を求めると、先ほどの residuals と同じ値を得ることができました。 

 4.モデルの直線を散布図上に描画する。

#前回の実測値の散布図を描画してみる。
plt
.scatter(x,y) plt.title("Web traffic over the last month") plt.xlabel("Time") plt.ylabel("Hits/hour") plt.xticks([w*7*24 for w in range(10)],['week %i'%w for w in range(10)]) plt.autoscale(tight=True) plt.grid()

#プロット用に"x値"を生成
fx = sp.linspace(0,x[-1],1000) 

#f1()を使って、訓練データから学習したモデルを描画してみる。
plt.plot(fx,f1(fx),linewidth=4,c='red') plt.legend(["d=%i" % f1.order], loc="upper left")
plt.show()
 

f:id:kanriyou_h004:20190626234053p:plain

 

はじめの4週(Week0~Week3)は、なんとなくあってそうですが、最終週は明らかに違っています。

 

今回は、単純な直線で近似するモデルを作成しました。

単純なモデルでは、実測値を表すモデルとしては適切とはいいきれません。

誤差の「318104548.81995213」も、これだけではよいのか悪いのか判断できません。

しかしながら、この単純なモデルを基準として、新しく作ったモデルの誤差を比較することで、より良いモデルかどうか判断することができるようになります。

そして、またそのモデルを基準として、さらに良いモデルを判断していくという作業を繰り返していく作業ができます。

次回からは、だんだんと複雑なモデルに取り組んでいきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com