今回も前回に引き続きoneVsAll.mに取り組みます。
前回はK=1のときの最適thetaを取り出せたので401X1のthetaは取り出せたのですが、
目標としている401X10は取り出せませんでした。
401X10を取り出すためにはループシュミレーション取り出しが必要になったので
まとめたのがこちらの日記です↓
https://www.courseradaisuki.com/entry/2020/03/09/103205
今回取り出したいのは401X10のベクトルなので、ベクトル取り出しの(ii)追加パターンでやってみます。
を利用する形で↓のようにしてみました。
まずnum_labels = 2で実験してみて401X2のベクトルができるかどうか
見てみます。
残念です。できませんでした↓
この値は何だろうと思ってみてみたところ、
K=1のときのthetaの1番目と2番目か
K=1のときのthetaの1番目とK=2のときのthetaの2番目かですね。
いずれにせよ、うまくいきませんでした。
どちらかというと(I)上書きパターンで401X10ですべてが0の要素の空ベクトルを作って↓
K=1のときの最適theta 401X1を1行目に上書き
K=2のときの最適theta 401X1を2行目に上書き
という↓のようなイメージを
10行目までやるほうがうまくいくのでは、と思いつきました。
まずはK=2までのパターンでうまくいくかどうか実験してみます。
小実験です。
こういう風にあったら、K=1のときに1行目だけを変更したいです。
1行目だけ取り出す式の形は↓です。
なのでA(:、c)のようにすれば、CのときにC行目が上書きされるはずです。
(Kとcが入り乱れてすみません)
というわけで↓のようにプログラミングしました↓
結果です↓
うまくいきました!
ということはK=10までできるはずです!
できました!
ということは↓の日記で書いた
Coursera Machine Learning Week4 課題 2週目④ -苦闘記憶- One vsALL② - 暇人日記
ができそうです。
狙い通り作成できた401X10の最適thetaを利用します。
X(5000X401のベクトル)にこの最適thetaをかけると
5000X10のベクトルができるはずです!
各行は1、2,3,4,5,6,7,8,9、0の確率なので一番大きいものが
予測される数字になります。
うーん、イメージと違うものが出てきました。。。
全部0から1の間にいてほしかったのですが。。。
あっ!sigmoid関数入れるの忘れていました!
入れました↓
イメージ通り0と1の間です。
そしてyの実sampleをみてるので最初の方は『10』とわかっていたので、
予測値も正解といえると思います!
今回はここまでです。また次回頑張ります!