今回はcostFunction.mの②『Gradient for logistic regression』に取り組みます。
Gradientはめちゃくちゃ苦手です。頭の中で図でイメージできないからだと思います。
状況証拠を積み上げてこうじゃないか、みたいな数学的じゃないことに
糸口を求めるしかなかった苦しい記憶があります。。。
今も理解できていなくて提出の合格と応用できればそれでいいや、という
割り切り部分になります。
まず、問題文です↓
前回見たように『Compute cost for logistic regression』と
『Gradient for logistic regression』に分かれています。
今回は、 『Gradient for logistic regression』部分に取り組みます。
このGradientの式はLinear Regressionの時に使用したものと同一に見えるが、
hθxが違うので実際の式は違うと書いてあります。
そこでLinear Regresionの時の式と並べて比較してみます↓
赤枠で囲った部分は確かに完全に同じです。
そして、hθxが違うのもわかります。
とりあえずWeek2を参考にしよう、あわよくばコピペしようと思って、
Week2のGradientの課題を見ました↓
X,y,theta,alpha,num_itersを入力するとtheta,J_historyを計算してくれる関数だったなぁ、
と思ってWeek3のCostfunction.mを見ました↓
X,y,thetaを入力するとJ,gradを計算してくれる関数です。
全然関係者が変わってしまいました!
表にしてみました↓
入力分はalpha,num_itersが消えてしまいました。。。
計算されることは丸替わりに見えます。。。
1つずつ考えてみたいと思います。
問題文を振り返って↓、Week3にalphaがないのは問題文に書いてある通りなので
だからだと思い込むことにしました。(理由はともかくこれで正解でした)
計算されることのWeek2のJ_historyは
と設定されていました。
Week3ではこれは前回の日記でやったJと同じですので、
J_historyとJは同じと判断しました。
残る違いはnum_iters とthetaです
num_itersはなんでしょうか、よくわかりませんので飛ばします。
計算されることのthetaはWeek2であって、Week3ではありません。
もう一度問題文を見たときに↓、Week2の式は左辺がthetaですけど
右辺がthetaじゃないと思いました。
Videoのスライドを振り返ってWeek3の左辺をみつけました↓
これを見たときにWeek2の↓と似てるなと思いました
こういう置き換えなんじゃないかと思いました。
だからWeek2の左辺とWeek3の左辺が違うのでは、と思いました。
がgladだと思います。
そうだとするとWeek2のこの部分↓を参考にできるのではと思いました。
つまりhθxを今回のsigmoidにすれば正解になるのでは、と思って
提出したら正解になりました!
まだ、num_itersの謎が残っています。
num_itersは↑の式では必要で
↓の式では必要なかったということだと思います。
Week2ではこの時点でJを最小化するthetaが計算できていました。
alphaとnum_iters(試行回数)でJがどんどん小さくなっていく経緯が
J_historyで見えてJが最小になったthetaがわかっていました。
今回Week3ではJとgradはcostfunction.mで設定していますが、
これではJの最小値とthetaが計算されていません。
だから予測もできない状態です。
だからだと思いますがJとgradの計算があっているかどうか確認できるに
プログラム全体ex2.mに↓の部分があります。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
↑はtheta=[0; 0; 0]で計算するとJが0.693、gradが[-0.1000 ; 12.0092 ; -11.2628]に
なるということです。
なりました!↓
もう1つ確認用の値が用意されています。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
↑はtheta=[-24; 0.2; 0.2]で計算するとJが0.218、gradが[0.043 ;2.566 ; 2.647]に
なるということです。
なりました!↓
とはいえ依然予測できない状態はかわっていないので、
予測の部分は次回取り組みたいと思います。