CourseraにはDiscussion Forumなるものがありまして、
そこにNeural NetworkでLinear Regressionを解こうとした問い合わせがないか
検索してみました。
その中の1つにVideoのレクチャーノートのボーナスにそれについて
触れてあるものがあるとありました。
読んだところ、具体的な変更方法が記載されていて
①num_labels(=output layer)は削除。
ただしThetaやnn_paramsで使われている箇所は1へ変更
②yは47X1を無理やり47X10にすることなく、47X1で
y-a3をすること
③hiden layerでは依然としてnon linearにしておくこと
Sigmoidを使うということかなと思っていたら、
④Sigmoidの代わりにtanh関数を使うこと
tanh関数は導入すると-1から1の間に収まる関数ということです。
(Sigmoidは0-1の間に収まる関数でした)
⑤Backpropagationの中のSigmoid関数のGradientの代わりに↓のtanh関数の
Gradientを使うこと
⑥Feedforwardのoutput layerであるa(3)にはsigmoidもtanhも使わないこと。
⑦JはRegularizationでない部分はLinear RegressionのCostFunctionを使い、
Regularizationの部分はWeek5と同じにすること
とありました。
Errorが出て修正してErrorが出て修正してを繰り返して
プログラムが実行されました↓
やった!できました!
さっそく予測しようと思いましたが、予測する前にX側のデータを
FeatureNormalizeしておこうと思いました。
これは今回のX側のデータのように↑、データの桁数がばらついていると
計算時間が長くなるので、Xのデータを行ごとに平均値を出して、
データ個々-平均値を計算して、標準偏差で割るというものでした。
Week2の課題でアドバイスされていたのでそれにのっとります。
具体的には行ごとの平均値です↓
データ個々-平均値です↓
行ごとの標準偏差です↓
行ごとに割ったものです↓
FeatureNormalizeしてもGradinent Checkingが大丈夫かどうか
念のため確認してみました↓
大丈夫でした!
CostFucntion/Gradientがそろったので最適θをfmincgで計算して予測してみます!
左が予測値で、右が答えだったので大幅なずれです泣
『ついにLinear RegressionでもNeuralNetworkを使えるようになりました!
感動です泣
次回はちょっと前にやっていたコロナ感染者予測にあてはめることを
別の日記でやってみたいと思います。』
というフィナーレを思っていたのですが、延期です。。。
なぜgradient ChekingはOKなのに予測がダメダメなんだろう。
また次回取り組みます。