ボンジニアの備忘録

凡人エンジニア、通称ボンジニアによる備忘録です。勉強した内容を書いていきます。ジャンル問わずです!間違っていたら指摘をお願いします!

機械学習の勉強

機械学習の勉強のメモをしておきます!

最小二乗法というと下記のような式が出てきますよね!

{ \displaystyle
    J(w) = \frac{1}{2m} \sum_{i=1}^m (h_w(x^{(i)}) - y^{(i)})^{2}
}

これはある(x,y)という点と予測している式h_w(x)との差の合計を出している式(誤差関数)です。 例えば、(1,5)という点がある場合にモデル式h_w(1)の値と実測値5の値の 差を取る形になります。それを全ての点で行う形です。

まずは簡単な方程式を考えます。

{ \displaystyle
    h_w(x) = w_0 + w_1 x
}

{ \displaystyle
    w_0 = 0
}の時を考えてみる。

式が下記のようになります。
{ \displaystyle
    h_w(x) = w_1 x
}

ではこの時のh_w(w)J(w)を見ていきましょう! 下記の点が観測されたとします。(m=3)
(x^{(1)},y^{(1)})=(1,1)
(x^{(2)},y^{(2)})=(2,2)
(x^{(3)},y^{(3)})=(3,3)
f:id:yujikawa11:20160605182605p:plain

(1) w_1=1の時

h_w(x)=x
{ \displaystyle
    J(w) = \frac{1}{6} \sum_{i=1}^3 (x^{(i)} - y^{(i)})^{2}
}
f:id:yujikawa11:20160605182608p:plain

こちらは当然すべて一致しているわけですから、J(w)=0

(2)w_1=0.5の時

h_w(x)=0.5xとなります。
{ \displaystyle
    J(w) = \frac{1}{6} \sum_{i=1}^3 (0.5x^{(i)} - y^{(i)})^{2}
}
f:id:yujikawa11:20160605182611p:plain

今度は観測値と予測のモデルに誤差が生じていますね!ちょっとJ(w)を計算してみましょう! { \displaystyle
    J(w) = \frac{1}{6} \sum_{i=1}^3 (0.5x^{(i)} - y^{(i)})^{2}=\frac{1}{6}\{(0.5x^{(1)} - y^{(1)})^{2}+(0.5x^{(2)} - y^{(2)})^{2}+(0.5x^{(3)} - y^{(3)})^{2}\}
}
{ \displaystyle
    J(w) = \frac{1}{6}\{(0.5\times1 - 1)^{2}+(0.5\times2 - 2)^{2}+(0.5\times3 - 3)^{2}\} =0.58
}

上記のような形でいろんなw_1を入れてみるとJ(w)は下記のようなグラフになります。
f:id:yujikawa11:20160605182614p:plain

最小二乗法というのはJ(w)のグラフの最小値を求めることになります。上図からもわかるように w_1 = 1の時が誤差が最小となりますので、予測モデルのパラメータはw_0=0w_1=1です。 予測モデルは下記になります。
h_w(x)=x

なんとなーくやりたいことのイメージがついたような気がします。 でも本当にやりたいのは
{ \displaystyle
    h_w(x) = w_0 + w_1 x
}
と定めたのちにそれぞれの係数を求めることですよね。
どうやって求めるかというと最急降下法という方法があります。 簡単に言うと適当なw_1 = w_nをとって、J(w_n)の傾きを求めます。 傾きが0でない場合は、w_1を傾きで引いて更新して同じことを繰り返します。 更新がなくなったら終了です。(もしくは変化しなくなったら)