暇人日記

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

Coursera Machine Learning week7 課題 苦闘日記①

アラフォー文系のサラリーマンがブームに乗っかって、

人気コースCoursera Machine Learningに

悪戦苦闘していることを 記した日記です。

 

 

f:id:omoshiroamericanews:20191122113032p:plain

 今日は適切なCとsigmaを選びなさいという課題↑に取り組んでいました。

 

問題文の中で「0.01,0.03,0.1,0.3,1,3,10,30」の8個の中から

選んでもっとも精度の高い線をひきなさいという課題でした。

 

Week6まではFmincgとかを使用してCostFunctionを最小化するθを見つけて、

そのθでPredictionの式を作って、という流れだったので

何をやっていいかわからなくなりました。

 

問題文はXval,YvalのValidationSetについて 最適なCとSigmaを選びなさいとあります。

ただ、最適なCとSigmaはCostFunctionを最小化させることが

条件なのでCostFunctionを作成しないとダメではないかと考えました。

しかし、CostFunctionを計算するのにWeek6まで必要だったθを

どう設定すればいいのかわかりません。

 

しかもsvmTrainにもsvmPredictにもthetaの変数設定がありません。

 

どうすればいいんだろう????

 

svmTrainとsvmPredictの式を読み込む必要があると感じました。

 

どういうふうにワークしているかわからないと、応用できないと思いましたので

まずは具体的に数字をいれて動かしていきます。

 

問題自体はCとSigmaを8X8の64通り試せば答えは出ると思って力技に出ました 。

 

一つ一つグラフを作成していくことにしました。

 

まずC=0.03、sigma=0.3の組み合わせからスタート

f:id:omoshiroamericanews:20191101012256p:plain

 

うまいこと線はかけたので今度はSigmaをそのままにCを変えていきました。

f:id:omoshiroamericanews:20191101012402p:plain

Cを0.03-->0.1へ、Sigmaは0.3のまま

 線がちょっと縦に傾きました。Cをさらに大きくして0.1-->0.3にします。

 

f:id:omoshiroamericanews:20191101012913p:plain

 

Cを色々変えてきましたが線が問題文で提示されている正解より直線的すぎます。

線をグネグネさせるにはsigmaを変える必要ありと判断しました。

現在は直線的すぎてUnderfitの状態なので、

Overfitさせるためにはsigmaを小さくすることにしました。

Cは0.3のまま、sigmaを0.3から0.1にします。

f:id:omoshiroamericanews:20191101013245p:plain

 

曲がりました!だいぶ正解に近い気がします。

さらにsigmaを0.1-->0.03へ小さくします。

 

f:id:omoshiroamericanews:20191101013509p:plain

Overfitしすぎですね。。。

ということでsigmaは0.1がちょうどよさそうです。

 

今のところ、C=0.3、sigma=0.1が一番よさそうですが、

これが64通りの中で一番良いとどう証明すればいいんだろう?

 

やっぱりCostFuctionくらいは考えないとダメそうです。

というところで今日は力尽きました。

また明日から頑張ります。