初心者コンテストに挑戦④Cross Validationする
前回はTraining Set 27100に対して精度92%の最適θをTest setにあてはめて
提出したところ、85点が合格のところ56点でした。
理由は2つ考えられると思います。
①27100のTraining Set全部に対してだったのでoverfitのかもしれません。
②もしくは精度92%が低すぎるのかもしれません。
①は↓の日記で検証したことがあります。
27100を20000と7000のデータに分けます。
20000で最適θを作って、7000のデータに適用しても精度がでるかどうか検証します。
↓のようなグラフをlearning Curveを作ってoverfitしてるかどうか見てみたいです。
と思って実行してみましたが
for i = 1 :m
でmが20000のためloopが終わりません。。。
なので
for i = 1:5
でミニ実験してみました。
しかしErrorが出ました↓
調べてみたところ、
どうも、掛け算の要素に『無限』が入っていることが原因でError値に
なっていることがわかりました。
グラフは作れそうにないです。
ただ、20000の精度と20000の最適θ7100に当てはめた予測精度は分かります。
20000の精度は92,995%で、20000の最適θを7100に当てはめたときの
精度は92,790%でした。
Overfitしているのであれば、
20000の精度が99%で7100の精度が80%というパターンだと思うので、
Overfitしていないと判断しました。
>②もしくは精度92%が低すぎるのかもしれません。
理由は②な気がします。
λ=1で92.995%なので、λを調整して精度が上がるかどうか見てみます。
λを0.001~10まで変更してみました。fminuncのMaxIterも変更して精度上げに
トライしました↓
93%近辺から精度が上がらないです。
λはoverfit/underfitしすぎたときの調整弁の役割を果たしていると
Courseraで学びました。
λを0.001にしてもthetaの大きさを相殺できずにunderfitの状態なのかもしれないと
思ったのでthetaを確認してみました。
見た限り普通ですが、桁数に大きな差があるのが気になります。
Courseraで予測の基要素の桁数/規模を合わせるためのfeatureNormalizeという
方法を学びました。
一度featureNormalizeして、λを調整してみようと思いました。
λをどの値の幅にした方がいいかとう経験値はfeatureNormalizeした
ベースで養った方がいいとも思いました。
FeatureNormalizeについての日記はこちらです↓
featureNormalizeしたのでXが↓のようにすべての値が0近辺に集結しています。
original dataは↓のなので2行目の年齢などは、0近辺に集結していることがわかります。
これで予測したθが↓です。
前回のものに比べるとθの値の桁数が近づいています。
さっきと同じようにλの値を調整して精度をみてみます。
精度は今までと同じ93%前後ですね。
FeatureNormalizeした目的は、Jのλのパートの調整でした。
λの調整をすれば最適θが変化して、Jが小さくなるはずなので
それが狙いでした。
が、Jは変わっていません。
なので精度が93%前後で落ち着いているだと思います。
試しにλ=0.001の精度93%で提出したところ、56点でした。93%の精度だと56点のようです。
Polynomial化して予測精度を上げる方法と
Neural Networkで予測精度を上げる方法と
関係なさそうな変数をとる方法があると思います。
今回はここまでです。また次回頑張ります。