暇人日記

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

Week2の課題(家の値段)をNeural Networkで解いてみる-前半-

Neural NetworkでWeek2の家の値段の課題を解くことにトライしてみます。

 

課題は家の面積と部屋数から値段を予測することでした↓

f:id:omoshiroamericanews:20200704151135p:plain

 

Week5のNeural NetworkのプログラミングはLogistic Regressionで

0,1の分類解決用でしたが、今回の家の値段の課題はLinear Regressionのため、

プログラミングの式を変えなければならないはずです。

 

そしてLayerも考える必要があります。

Week5では手書きの数字の候補1つ1つに400の基データがあったので、

↓のような構造でした。

f:id:omoshiroamericanews:20200704152529p:plain

 

①今回は家の値段にはサイズと部屋数の2つです。

↑の図で「400」が「2」になります。

 

②5000のデータ数でしたが、Week2の課題は47でした。

↑の図で「5000」が「47」になります。

 

③outputが10でした。これは0-9の数字の10パターンの数字だったので、

 10にしていました。今回は値段なんで1にしてみます。

 合っているかどうかは精度で確認する考えで進めます。

 

 

構造としては一度こういう形で考えてみます↓

f:id:omoshiroamericanews:20200704153559p:plain

 

プログラミング上はこうですね↓

f:id:omoshiroamericanews:20200704220514p:plain

 

Week2のデータをDLして↓ 

f:id:omoshiroamericanews:20200704214946p:plain

 

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)

としました。

 

f:id:omoshiroamericanews:20200704220132p:plain

f:id:omoshiroamericanews:20200704220106p:plain

狙い通りになっています。

 

 

これを25X3と26X1のTheta1とTheta2にreshapeします。

 

f:id:omoshiroamericanews:20200704220841p:plain

 

見事にできました!↓

f:id:omoshiroamericanews:20200704220905p:plain

f:id:omoshiroamericanews:20200704220920p:plain

 

これでFeedForwardができます。

 

Week5ではLogistic RegressionだったのでSigmoid関数を使っていました↓

 

f:id:omoshiroamericanews:20200704222619p:plain

 

今回はLinear RegressionなのでSigmoidを外します。

 

次にBackpropagationです。

鍵の1つがこの部分です↓

f:id:omoshiroamericanews:20200704223251p:plain

これはSigmoid関数の微分だったと思います。

 

今回はFeedForwardでもSigmoidを外しましたので、

この部分が変わるはずです。

 

あんまりよくわからなくて試行錯誤した結果、

f:id:omoshiroamericanews:20200704224641p:plain

この微分だと思って、↓のようにしてみましたらうまくいきました .

 

f:id:omoshiroamericanews:20200704224803p:plain

 

とりあえずErrorなくgradは計算されて

 

f:id:omoshiroamericanews:20200704224846p:plain

f:id:omoshiroamericanews:20200704224927p:plain

 

この値が合っているかどうかGradinent Checkingの結果が↓です。

 

f:id:omoshiroamericanews:20200704225249p:plain

 

見事に合ってました!

 

ただ、なんで

f:id:omoshiroamericanews:20200704230109p:plain =f:id:omoshiroamericanews:20200704224641p:plain

と考えたらうまくいったかは不明です。。。

 

何はともあれ黄金パターンの

①予測式-->②Cost Function-->③Gradient-->④最適θ-->⑤予測

のうち①-③が完了したことになります。

 

なので④⑤に取り組みます。

 

Week5の式をパクッてfmincgで最適θを出して

f:id:omoshiroamericanews:20200704230821p:plain

X * thetaで予測値を出して,yと並べました↓

 

f:id:omoshiroamericanews:20200704230722p:plain

ボロボロです笑

 

何か間違いがあります。

 

また次回頑張ります!