暇人日記

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

Coursera Machine Learning Week4 課題 2周目⑤ -苦闘記憶-  One vsALL③

今回も前回に引き続きoneVsAll.mに取り組みます。

f:id:omoshiroamericanews:20200226220631p:plain

前回はK=1のときの最適thetaを取り出せたので401X1のthetaは取り出せたのですが、

目標としている401X10は取り出せませんでした。

 

401X10を取り出すためにはループシュミレーション取り出しが必要になったので

まとめたのがこちらの日記です↓

 

https://www.courseradaisuki.com/entry/2020/03/09/103205

 

 

今回取り出したいのは401X10のベクトルなので、ベクトル取り出しの(ii)追加パターンでやってみます。

 

f:id:omoshiroamericanews:20200308110734p:plain

f:id:omoshiroamericanews:20200308110848p:plain

 

を利用する形で↓のようにしてみました。

f:id:omoshiroamericanews:20200308112831p:plain

 

まずnum_labels = 2で実験してみて401X2のベクトルができるかどうか

見てみます。

 

残念です。できませんでした↓

f:id:omoshiroamericanews:20200308113217p:plain

この値は何だろうと思ってみてみたところ、

K=1のときのthetaの1番目と2番目か

K=1のときのthetaの1番目とK=2のときのthetaの2番目かですね。

 

f:id:omoshiroamericanews:20200308113917p:plain


いずれにせよ、うまくいきませんでした。

 

どちらかというと(I)上書きパターンで401X10ですべてが0の要素の空ベクトルを作って↓

f:id:omoshiroamericanews:20200308114609p:plain


 K=1のときの最適theta 401X1を1行目に上書き

 K=2のときの最適theta 401X1を2行目に上書き

という↓のようなイメージを

f:id:omoshiroamericanews:20200308114829p:plain

 10行目までやるほうがうまくいくのでは、と思いつきました。

 

まずはK=2までのパターンでうまくいくかどうか実験してみます。

 

小実験です。

f:id:omoshiroamericanews:20200308115149p:plain

 こういう風にあったら、K=1のときに1行目だけを変更したいです。

 

f:id:omoshiroamericanews:20200308115237p:plain

 

1行目だけ取り出す式の形は↓です。

f:id:omoshiroamericanews:20200308115326p:plain

 

なのでA(:、c)のようにすれば、CのときにC行目が上書きされるはずです。

(Kとcが入り乱れてすみません)

 

というわけで↓のようにプログラミングしました↓

 

f:id:omoshiroamericanews:20200308115607p:plain

 

結果です↓

 

f:id:omoshiroamericanews:20200308115526p:plain

うまくいきました!

 

ということはK=10までできるはずです!

 

f:id:omoshiroamericanews:20200308120847p:plain

できました!

 

ということは↓の日記で書いた

Coursera Machine Learning Week4 課題 2週目④ -苦闘記憶- One vsALL② - 暇人日記

 

f:id:omoshiroamericanews:20200308172144p:plain

ができそうです。

 

狙い通り作成できた401X10の最適thetaを利用します。

X(5000X401のベクトル)にこの最適thetaをかけると

5000X10のベクトルができるはずです!

各行は1、2,3,4,5,6,7,8,9、0の確率なので一番大きいものが

予測される数字になります。

 

うーん、イメージと違うものが出てきました。。。

全部0から1の間にいてほしかったのですが。。。

f:id:omoshiroamericanews:20200308121302p:plain

 

あっ!sigmoid関数入れるの忘れていました!

入れました↓

イメージ通り0と1の間です。

 

f:id:omoshiroamericanews:20200308121554p:plain

そしてyの実sampleをみてるので最初の方は『10』とわかっていたので、

予測値も正解といえると思います!

 

f:id:omoshiroamericanews:20200227223109p:plain

今回はここまでです。また次回頑張ります!