暇人日記

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

Coursera Machine Learning Week5 課題 2周目⑤ Costfunction ループ無し

CostFunctionをループ無しで解くことにトライしてみます。

f:id:omoshiroamericanews:20200503151426p:plain

 

 

これはK=1のとき、K=2のとき、・・・、K=10のときと

ループさせていたのをループさせずに解くということです。

 

ループありではOutput Layerが5000X10で、

ある意味わざわざK=1のときの予測を1行取り出して

実SampleもK=1のときを変換して、5000X1と5000X1を突き合わせていました。

 

絵で書くと↓のようなイメージです。

 

f:id:omoshiroamericanews:20200424204854p:plain

Output Layerは5000X10でK=1のとき、K=2のとき・・・、K=10のときは

全てデータとして持っているので、実Sampleを5000X10で表現できれば

実Sample y かける Output Layerの式↓にもっていけます。

 

f:id:omoshiroamericanews:20200424210743p:plain

 

絵にすると↓になります。

f:id:omoshiroamericanews:20200424211436p:plain

こうすると5000X10同士の突き合わせができます。

 

ということは実Sampleを5000X1を5000X10に変えたいということになります。

 そして、1,2,3,4,56,7,8,9,10すべてを1に変えたいということになります。

 

実験をしたいと思います。

今までは↓のように1こだけ変えていました。

 

f:id:omoshiroamericanews:20200424113254p:plain

 

ググってみると、↓の方法があることがわかりました。

 

f:id:omoshiroamericanews:20200424212035p:plain

 

 

 

ということで

実Sampleを5000X1を5000X10に変えれるということになります。

 そして、1,2,3,4,56,7,8,9,10すべてを1に変えれるということになります。

 

データを保持するために

y_Vec = (1:num_labels)==y

とすれば実Sample;5000X10が手に入るので

Output Layer5000X10との突き合わせが可能です。

 

どう突き合わせるかというと↓のLogistic RegressionのCostFunctionを式をみると、

f:id:omoshiroamericanews:20200424210743p:plain

実Sampleの5000X10と予測=Output Layerの5000X10をかけることになります。

 

 

何故かけるかはWeek3のLogistic RegressionのCostFunctionの理由と同じです。

 

f:id:omoshiroamericanews:20200430114303p:plain

 

f:id:omoshiroamericanews:20200430114457p:plain


は0と1の間にしか数字をとらないことと、yは0か1なことを

うまく利用しています。詳しくはこちら↓をご覧ください

 

Coursera Machine Learning Week3 課題 2周目③ -苦闘記憶- Compute Cost for CostFunction - 暇人日記

 

 

ということで各要素ごとに突き合わせたい=かけたいので、『.』の出番です。

 

 

 

f:id:omoshiroamericanews:20200424212702p:plain

f:id:omoshiroamericanews:20200424212718p:plain


これで前回の日記と同じくJが0.2876になりました!

 

今回はここまでです。次回はRegularizedに挑みます!