Neural NetworkでWeek2の家の値段の課題を解くことにトライしてみます。
課題は家の面積と部屋数から値段を予測することでした↓
Week5のNeural NetworkのプログラミングはLogistic Regressionで
0,1の分類解決用でしたが、今回の家の値段の課題はLinear Regressionのため、
プログラミングの式を変えなければならないはずです。
そしてLayerも考える必要があります。
Week5では手書きの数字の候補1つ1つに400の基データがあったので、
↓のような構造でした。
①今回は家の値段にはサイズと部屋数の2つです。
↑の図で「400」が「2」になります。
②5000のデータ数でしたが、Week2の課題は47でした。
↑の図で「5000」が「47」になります。
③outputが10でした。これは0-9の数字の10パターンの数字だったので、
10にしていました。今回は値段なんで1にしてみます。
合っているかどうかは精度で確認する考えで進めます。
構造としては一度こういう形で考えてみます↓
プログラミング上はこうですね↓
Week2のデータをDLして↓
Theta1とTheta2の形を設定しに行きます。
Theta1が3X25=5でTheta2が26X1なので75+26=101ですね。
nn_paramsが1X101になる必要があります。
size(X,2)*hidden_layer_size +(hidden_layer_size +1)*num_labels
で3X25+26X1=101を表現しました。
ランダムの数字を入れるために、
nn_params=rand(1,size(X,2)*hidden_layer_size +(hidden_layer_size +1)*num_labels)
としました。
狙い通りになっています。
これを25X3と26X1のTheta1とTheta2にreshapeします。
見事にできました!↓
これでFeedForwardができます。
Week5ではLogistic RegressionだったのでSigmoid関数を使っていました↓
今回はLinear RegressionなのでSigmoidを外します。
次にBackpropagationです。
鍵の1つがこの部分です↓
これはSigmoid関数の微分だったと思います。
今回はFeedForwardでもSigmoidを外しましたので、
この部分が変わるはずです。
あんまりよくわからなくて試行錯誤した結果、
この微分だと思って、↓のようにしてみましたらうまくいきました .
とりあえずErrorなくgradは計算されて
この値が合っているかどうかGradinent Checkingの結果が↓です。
見事に合ってました!
ただ、なんで
=
と考えたらうまくいったかは不明です。。。
何はともあれ黄金パターンの
①予測式-->②Cost Function-->③Gradient-->④最適θ-->⑤予測
のうち①-③が完了したことになります。
なので④⑤に取り組みます。
Week5の式をパクッてfmincgで最適θを出して
X * thetaで予測値を出して,yと並べました↓
ボロボロです笑
何か間違いがあります。
また次回頑張ります!