暇人日記

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

Coursera Machine Learning Week7 課題 苦闘日記②

今回も前回に引き続きdataset3Params.mにTryしています。

 

f:id:omoshiroamericanews:20191122113032p:plain

 

グラフを作成していき、正解のグラフと形の近いものを選ぶ力技をしていましたが、

64通りの中からBest Parameterを選ぶにはどうすればいいかを考えます。

 

Week6までの流れではCostFunctionの式を作成して最小化させるになります。

 

実装としてはCostFunctionとGradientを式にして

Fmincgを利用すればCost Functionを最小化するthetaが計算されるという流れでした。

 

ただ、今回はGradientの式がVideoの中では全く説明されていないのと、

Program Assignmentの中にthetaの文字がないことから、

この方法ではないと推測します。(文系的発想ですみません)

 

Cost Functionの式はVideoの中に提示されています。

xだと

f:id:omoshiroamericanews:20191101111155p:plain

fだと

f:id:omoshiroamericanews:20191101111823p:plain

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

 

今回はGaussian Kernelを使っているのでfパターンでしょうが、

いずれのパターンもやはりthetaが計算上必要になります。

 

問題文のヒントを頼ることにします。

f:id:omoshiroamericanews:20191101113051p:plain

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

 

①Best なCとSigmaはvalidation Setから導きなさい。

②validation setと予測値のErrorを見なさい。

③errorはmean(double(predictions ~= yval))を利用しなさい

④svmPredictでpredictionsを作れるよ

 

主旨はこういうことかと思いました。

これを利用して64通りの線とTraining Setの差分=Errorを

求める方針で行くことにしました。

 

まずはsvmPredictを理解しにかかります。

 

f:id:omoshiroamericanews:20191101114708p:plain

modelとXで値がかわる関数ということですね。

①からvalidation setを作らなければならないということなので、

XはXvalに変更します。

modelはCとSigmaで変わってほしいですね。

もし、modelにCとSigmaで変わらないと64通りシュミレーションは

すべて同じ値になってしまうので当初の目的を達せれないと思いました。

 

f:id:omoshiroamericanews:20191101115324p:plain

 

良かった!modelはCとsigmaで動くようなので、

predの式はXval固定でCとSigmaを動かせば結果が変わりそうです。

実験してみます。

 

f:id:omoshiroamericanews:20191101120155p:plain

 

C=10,sigma=10で実験してみました。

これでpredとmeanが何を意味しているか考察します。

(動かしてから考えるという発想ですみません)

 

predは200X1のベクトルで0か1の要素しかありませんでした。

Xvalが200X2のベクトルでyvalが200X1のベクトルで200個の予測値が必要なので、

predは200X1のベクトルということですね。

 

meanは0.165でした。ヒントによるとこれはError率のはずです。

200個のうち16.5%つまり33個が不一致という意味ではと推測します。

 

f:id:omoshiroamericanews:20191101120659p:plain

 

16.5%だから5個に1個くらい外れている計算ですが、大体そうなっています。

より厳密に行うためにpred-Yvalを計算して-1か1の結果を2乗して1にして

確かめます。

f:id:omoshiroamericanews:20191101121024p:plain

予想通り33になりました。

 

これでpredとmeanの意味は理解できました。

 

次にCとSigmaを変えたら値が変わるかどうかを検証したいと思います。

値が変わればmeanの値が最も小さい組合せがBest Parameterになると考えます

 

f:id:omoshiroamericanews:20191101121935p:plain

 Cを10-->0.01へsigmaを10-->0.01へ変更しました。

なんとPredはすべて1、Aは0.56になりました。

想定通り数字が変わったので64通り作れば答えが見えそうです!

 

ところでPredがすべて1の境界線ってどんなだ?と気になったので

調べたいです。

 

もう一つ強烈な不安が出てきました。

 

f:id:omoshiroamericanews:20191101121341p:plain

 

さっき、modelの中をX,yとしていたのですが、

これってXvalとyvalであるべきなんじゃないかと思いました。

 

今朝は時間切れなので、この2つは明日やりたいと思います。