暇人日記

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

Coursera Machine Learning Week7 課題 苦闘日記⑤ -loop simの履歴取り出し

前回に引き続きdataset3Params.m↓に取り組みます。

もう5日目です。。。本当難しい。。。

 

f:id:omoshiroamericanews:20191122113032p:plain

前回は64通りのシュミレーションの取り出し方に四苦八苦していました。

 

ポイント

①Week6のやり方の取り出したい値の後ろに(i)をつけると

なぜか今回は1X8のベクトルになってしまうこと。

 

②(i)をつけずに行うと羅列が取り出せないこと

 

今回は人のをパクってでも正解にたどり着きたいと思います。

 

まずはSigmaを0.01に固定して、Cの8通りをシュミレーションするという

簡略化したバージョンでコードを書いていきます。

 

f:id:omoshiroamericanews:20191108094930p:plain

みたいC/sigma/errorの関係をresultで表記しています。

 

f:id:omoshiroamericanews:20191108095309p:plain

 

狙い通りC/sigma/errorの並びになりました。

これをぱっとみてわかるように、8X3のベクトルで一覧表記したいです。

 

ここからは人のを参考にしながら考えます。

f:id:omoshiroamericanews:20191108100624p:plain

ネットで参考になったのがこちらでした。

計算結果は下記のように表記されます。

 

イメージと一番近いのでこちらを参考にすすめます。

まず大きく違うのがresultの中になります。

私はresult = [C sigma error]としていましたが、

ネットのはresults = [results;C,sigma,error]となっています。

「、」が入っていることと、1X4にも見えそうな「results;」が

入っているのが違います。

 

このように変えてみます。

 

f:id:omoshiroamericanews:20191108101648p:plain

 

結果がこうです。

f:id:omoshiroamericanews:20191108101309p:plain

イメージ通りのものが出てきましたが、

0.01 0.01 の組み合わせが2回で出てきています。

 

ネットのはresults=という式がありますので、

こちらを追加してみます。

f:id:omoshiroamericanews:20191108101931p:plain

結果です。

f:id:omoshiroamericanews:20191108102026p:plain

見事に0.01 0.01の組み合わせが一つになりました!

 

ここまでのまとめです。

①iなしでも取り出せる

②;が有効

③results=が必要

 

 今まではCを8通り、sigmaを1通りで固定していたので、

sigmaを8通りにしていよいよ64通りの検証に入ります。

iとjを設けます。

 

f:id:omoshiroamericanews:20191108110449p:plain

結果です。

f:id:omoshiroamericanews:20191108110649p:plain

f:id:omoshiroamericanews:20191108110753p:plain

できました!

狙い通り64通りできました!

あとはこれで一番小さいErrorの組み合わせを見つけるだけです!

しかし目視しただけでも0がいくつあるような気がします。。。

30と0.03の組合せとか10と0.03の組合せとか。

 

今回は64通りなので根性で組合せ見つけれそうですが、

1000通りなど大きなシュミレーションをしたときのための、

取り出し方を勉強しておきたいと思います。

 

さっき参考にしたネットにあるのがこの方法です。

f:id:omoshiroamericanews:20191108111757p:plain

右辺は64X3列のresults一番右、つまりerror値の最小値で1X1の

ベクトルで「0」になります。

左辺は構成要素からErrorの最小値とその場所を特定していると思われますが、

2X1のベクトルに見えて右辺の1X1と合わないので私には謎です。

 

しかし兎にも角にも入れると、

minError=0

minIndex=50

という値を返してくれます。

 

あとは50番目のCとsigmaを指定すればいいので、

f:id:omoshiroamericanews:20191108112516p:plain

としてCの行である1行目から50列目を、

sigmaの行である1行目から50列目を、

取り出します。

 

 

<プチ気づき「;」の機能について>

***********************************************

 f:id:omoshiroamericanews:20191108112816p:plain

 

f:id:omoshiroamericanews:20191108112924p:plain

上と下の差は;があるかないかだけですが、

計算させると;がついている方は結果が表示されず、;がついていない方は結果が表示されます。

 **********************************************

では答えで提示されたC=10とsigma=0.03で

Submitしてみます。

 

不正解でした。

ただ、ここはひとつずっと懸念がありました。

 

それは苦闘日記②で触れていた

f:id:omoshiroamericanews:20191108113917p:plain

 modelの中はX,yの組合せがXvalとyvalの組合せなのかです。

 

問題文をよく読むと

f:id:omoshiroamericanews:20191108121653p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

Training SetがX,yとしっかり書いてあるので、

modelの中をX,yのTraing setでパラメーターを決定して、

predとmeanはXval,yvalで行うということですね。

入れ替えて行うと正解となりました。

 

 

やっと64通りのシュミレーションを取り出すことに

正解いたしました。

 

次回は次の課題に取り組みます。