今回も前回に引き続きdataset3Params.mにTryしています。
グラフを作成していき、正解のグラフと形の近いものを選ぶ力技をしていましたが、
64通りの中からBest Parameterを選ぶにはどうすればいいかを考えます。
Week6までの流れではCostFunctionの式を作成して最小化させるになります。
実装としてはCostFunctionとGradientを式にして
Fmincgを利用すればCost Functionを最小化するthetaが計算されるという流れでした。
ただ、今回はGradientの式がVideoの中では全く説明されていないのと、
Program Assignmentの中にthetaの文字がないことから、
この方法ではないと推測します。(文系的発想ですみません)
Cost Functionの式はVideoの中に提示されています。
xだと
fだと
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
今回はGaussian Kernelを使っているのでfパターンでしょうが、
いずれのパターンもやはりthetaが計算上必要になります。
問題文のヒントを頼ることにします。
(出典;『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を理解しにかかります。
modelとXで値がかわる関数ということですね。
①からvalidation setを作らなければならないということなので、
XはXvalに変更します。
modelはCとSigmaで変わってほしいですね。
もし、modelにCとSigmaで変わらないと64通りシュミレーションは
すべて同じ値になってしまうので当初の目的を達せれないと思いました。
良かった!modelはCとsigmaで動くようなので、
predの式はXval固定でCとSigmaを動かせば結果が変わりそうです。
実験してみます。
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個が不一致という意味ではと推測します。
16.5%だから5個に1個くらい外れている計算ですが、大体そうなっています。
より厳密に行うためにpred-Yvalを計算して-1か1の結果を2乗して1にして
確かめます。
予想通り33になりました。
これでpredとmeanの意味は理解できました。
次にCとSigmaを変えたら値が変わるかどうかを検証したいと思います。
値が変わればmeanの値が最も小さい組合せがBest Parameterになると考えます
Cを10-->0.01へsigmaを10-->0.01へ変更しました。
なんとPredはすべて1、Aは0.56になりました。
想定通り数字が変わったので64通り作れば答えが見えそうです!
ところでPredがすべて1の境界線ってどんなだ?と気になったので
調べたいです。
もう一つ強烈な不安が出てきました。
さっき、modelの中をX,yとしていたのですが、
これってXvalとyvalであるべきなんじゃないかと思いました。
今朝は時間切れなので、この2つは明日やりたいと思います。