暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week3 課題 2周目④ -苦闘記憶-Gradient

今回はcostFunction.mの②『Gradient for logistic regression』に取り組みます。

 

f:id:omoshiroamericanews:20200128162046p:plain

 

Gradientはめちゃくちゃ苦手です。頭の中で図でイメージできないからだと思います。

状況証拠を積み上げてこうじゃないか、みたいな数学的じゃないことに

糸口を求めるしかなかった苦しい記憶があります。。。

 

今も理解できていなくて提出の合格と応用できればそれでいいや、という

割り切り部分になります。

 

まず、問題文です↓

前回見たように『Compute cost for logistic regression』と

『Gradient for logistic regression』に分かれています。

 

f:id:omoshiroamericanews:20200128162207p:plain

今回は、 『Gradient  for logistic regression』部分に取り組みます。

 

このGradientの式はLinear Regressionの時に使用したものと同一に見えるが、

hθxが違うので実際の式は違うと書いてあります。

 

そこでLinear Regresionの時の式と並べて比較してみます↓

 

f:id:omoshiroamericanews:20200128162318p:plain

 

赤枠で囲った部分は確かに完全に同じです。

そして、hθxが違うのもわかります。

 

f:id:omoshiroamericanews:20200128162355p:plain

 

とりあえずWeek2を参考にしよう、あわよくばコピペしようと思って、

Week2のGradientの課題を見ました↓

 

f:id:omoshiroamericanews:20200128162435p:plain

 

X,y,theta,alpha,num_itersを入力するとtheta,J_historyを計算してくれる関数だったなぁ、

と思ってWeek3のCostfunction.mを見ました↓

 

f:id:omoshiroamericanews:20200128162508p:plain

 

X,y,thetaを入力するとJ,gradを計算してくれる関数です。

 

全然関係者が変わってしまいました!

 

表にしてみました↓

f:id:omoshiroamericanews:20200128162630p:plain

入力分はalpha,num_itersが消えてしまいました。。。

計算されることは丸替わりに見えます。。。

 

1つずつ考えてみたいと思います。

 

 

問題文を振り返って↓、Week3にalphaがないのは問題文に書いてある通りなので

だからだと思い込むことにしました。(理由はともかくこれで正解でした)

 

f:id:omoshiroamericanews:20200128162730p:plain

 

計算されることのWeek2のJ_historyは

 

f:id:omoshiroamericanews:20200128162804p:plain

と設定されていました。

 

Week3ではこれは前回の日記でやったJと同じですので、

J_historyとJは同じと判断しました。

 

残る違いはnum_iters とthetaです

num_itersはなんでしょうか、よくわかりませんので飛ばします。

 

計算されることのthetaはWeek2であって、Week3ではありません。

もう一度問題文を見たときに↓、Week2の式は左辺がthetaですけど

右辺がthetaじゃないと思いました。

 

f:id:omoshiroamericanews:20200128162914p:plain

 

 

Videoのスライドを振り返ってWeek3の左辺をみつけました↓

 

f:id:omoshiroamericanews:20200128162938p:plain

 

これを見たときにWeek2の↓と似てるなと思いました

 

f:id:omoshiroamericanews:20200128163014p:plain

 

こういう置き換えなんじゃないかと思いました。

だからWeek2の左辺とWeek3の左辺が違うのでは、と思いました。

 

f:id:omoshiroamericanews:20200128163053p:plainがgladだと思います。

 

そうだとするとWeek2のこの部分↓を参考にできるのではと思いました。

f:id:omoshiroamericanews:20200128163127p:plain

 

つまりhθxを今回のsigmoidにすれば正解になるのでは、と思って

提出したら正解になりました!

 

まだ、num_itersの謎が残っています。

 

f:id:omoshiroamericanews:20200128163251p:plain

num_itersは↑の式では必要で

↓の式では必要なかったということだと思います。

 

f:id:omoshiroamericanews:20200128163315p:plain

 

Week2ではこの時点でJを最小化するthetaが計算できていました。

alphaとnum_iters(試行回数)でJがどんどん小さくなっていく経緯が

J_historyで見えてJが最小になったthetaがわかっていました。

 

今回Week3ではJとgradはcostfunction.mで設定していますが、

これではJの最小値とthetaが計算されていません。

だから予測もできない状態です。

 

だからだと思いますがJとgradの計算があっているかどうか確認できるに

プログラム全体ex2.mに↓の部分があります。

 

f:id:omoshiroamericanews:20200128173953p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

↑はtheta=[0; 0; 0]で計算するとJが0.693、gradが[-0.1000 ; 12.0092 ; -11.2628]に

なるということです。

 

なりました!↓

f:id:omoshiroamericanews:20200128174438p:plain

 

もう1つ確認用の値が用意されています。

 

f:id:omoshiroamericanews:20200128174302p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

↑はtheta=[-24; 0.2; 0.2]で計算するとJが0.218、gradが[0.043 ;2.566 ; 2.647]に

なるということです。

 

なりました!↓

f:id:omoshiroamericanews:20200128174511p:plain

 

とはいえ依然予測できない状態はかわっていないので、

予測の部分は次回取り組みたいと思います。