今回はcostFunctionReg.mに取り組みます。
テーマはRegularizationです。
Regularizationは予測があたりすぎのOverfitの状態を解消するための方法でした。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
一番右のOverfitの状態を真ん中のJust rightに戻す手法がRegularizationですね。
一番左のUnderfitの状態を真ん中へ戻せないと思います。
色々実験した結果、そう思っています↓
Week2の課題でRegularizationを使用するとJは小さくなるか? - 暇人日記
では、問題文を読んでいきます。
製品の品質TESTに関する問題です。
2つのTESTを行っている製品がOKかNGだったかを判断するという
問題になっています。
まずdatasetを見ます↓
118個のSampleがあり2つの試験と合否の結果がSetになってます。
Xは1から-1の間をとっています。
これをグラフにするとこうなると説明されています↓
グラフにする方法は前回の課題の試験の合否の方法と同じですね↓
Coursera Machine Learning Week3 課題 2周目① -苦闘記憶- データのグラフ化 - 暇人日記
さて、問題文には今回の品質問題の分布は直線では良い境界線をひくことが
できないと説明されています。
見た目からするとその通りですね。境界線は円が良いように見えます。
直線ではいい境界線が作れないので、曲線にするために
Polynomial(=多項式化)が紹介されています↓
Week2の課題でPolynomial=多項式化するとどうなるか?-前半- - 暇人日記
Polynomial(=多項式化)については↑のリンクでやった内容になりますね。
今回はdegreeを6なので6乗を最高としてXはTEST1/TEST2の2つの要素だったのに
28個の要素まで引き上げています。
境界線を直線ではなく曲線にすることができたので、
Compute for CostFunctionに取り組むます。
問題文です↓
これをRegularlizationがないJの式↓と比べてみると、
この部分が↓変わったことがわかります。
λ/2mは定数なのでこの部分↓が計算できれば完了となります。
この部分はθの2乗を合計すればいいことになります。
今回はFeatureを28個にしているので、
のxが28だからθは28X1のベクトルになります。
このベクトルで各要素を2乗して合計すればいいということですね。
あとはこれをSumで合計すればいいですね。
と思って提出したら間違いでした。
Videoを見返しました。
これですね。
Θの1番最初を削除する必要があるんでした。
↓の入力でθの1番最初が取り出せるので
これを2乗したもの引き算すればOKですね。
提出したら正解になりました!
また正しく計算されるとJ=0.693になると問題文にあるのですが↓
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
その通りの計算結果になりました!
続いてGradientです。
Regularizationに書かれているGradientの式は↓です。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
これをRegularlizationがないGradientの式↓と比べてみると、
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
2行に分かれたこととが
が足されたことが違いです。
とはいえ、1周目のときも今もgradを完全に理解していないので、
ここからはググった答えから逆算して考えたことも多いです。
そして1周目で得た経験から考えていることも多いです。
まずgradですがthetaが28X1のベクトルならgradも28X1と一致するということを
1周目の他のWeekの課題から得ています。
一番最初のθを計算しない=0でカウントすればいい、という考えでいいと思います。
一度場合分けせずに28X1のgradを計算しきってから、
一番最初のgradを0にするという考えでいいと思います。
この部分↑は前回の合格の合否の時の計算式と同じなので、
この部分だけを考えればいいと考えました。
θは28X1のベクトルでgrad(=)も28X1のベクトルのままなので、
(λ/m)X θをそのまま計算すればOKのはずです。
一番最初のθを0にして
theta(1)=0
としたいところですが、
↑の部分にもθが入っているのでよくありません。
こういうイメージです↓
これを実現するためにkeisanyouで28X1のベクトルで最初が0、残りは1を
作ります。これを28X1のthetaとかければ先頭行だけが0になります!
これで正解になりました!
というかググって答えをみた私の解釈が↑です笑
今回はここまでです。また次回頑張ります!