Week6では↓のように仮説の精度検証の方法が説明されていたので、
この方法で前回の日記で取り組んでいたWeek2の予測結果を
評価してみたいと思います。
今回は仮説検証なのでデータを70対30に2分割します。
(余談ですが、モデル選択の場合は60対20対20の3分割です、と理由が明確に
このブログ↓に書かれてあり理解できる人がうらやましいと思った次第です。)
話を元に戻します。
Week6では分割したデータを使って↓のように活用すると説明がありました。
Training Setから計算されたθでTest setのError(=J)を計算しなさいということです。
しかし、いやな予感が1つあります。
計算結果をみたら、大きすぎるとか小さすぎるとかわかるんでしょうか。。。。
とはいえ、まずは前に進みます。
最初にTraining SetとTest Setの分割を↓の通りします。
プログラミングは↓のように書きました。
Week2でやったように
FeatureNormalizeしてJを最小化するthetaが計算されるよう
alphaとnum_itersを設定しました↓
Training SetのJがでました↓
このTraining Set↑のJ=2.598e+10の基になったθで
Test Setを計算したのが↓です。
同じようにe+10で表記されてほしい。。。
頑張って桁を数えると1.835e+10となります。
なので2.598+e10に比べると小さく見えますが
そもそものsample数が30と17なので、小さくなって当然だとも思います。
グラフにすると↓になります。
赤がJtrainで青がJtestです。
率直にいって仮説の精度が良かったかどうかわかりません。
なのでTest Setでの予測とyを並べてみました。
Test setでの精度はかなり悪いですね。
これはひょっとしたらtraining Setでも
精度悪いのではと思ってみてみました↓
やはりTraining setでも精度はかなり悪いですね。
Training SetのJとthetaがイマイチなので、
alphaが0.01-->0.3に変更して計算してみます。
再計算したTest Setでの予測とyを並べてみました。
さっきより全然よくなりました。
しかし、結局、Jの大きさではなく実数をみて予測値を
修正したことになりますね。。。
このTraining Setから計算されたθでTest setのError(=J)を計算することで
仮説精度の検証をするのは、
Jをみても大きすぎるか小さすぎるかわからない、と思いました。
ただこれはLinearRegressionだからかもしれません。
Week3で扱うLogistic Regressionは0か1なので正解率XX%というように
答えが出るので、そうするとTraining SetとTest Setの正解率を見比べれば
わかるような気もします。
続いて同じくWeek6で出てきたLearning Curveで
Week2の予測結果をみてみます。
まずLearning Curveとは、
アルゴリズムのパフォーマンスの改善をするには何が必要かということを
見るためのものでした。
縦軸にJ、横軸にサンプル数mをとって、
計算した予測のパフォーマンスの傾向を見ていると思います。
どちらのグラフになっているのか、でパフォーマンスの傾向をみます。
私は課題をやるまで気づかなかったグラフの見方を説明します。
まず縦軸にJ、横軸にサンプル数mです。
train errorは横軸mの数の通りにSample数が増えていくので,
error=Jが右肩上がりに上がっていきます。
そして
m=1の時のJと最適なθ、
m=2の時のJと最適なθ、
m=3の時のJと最適なθ、
とサンプル数ごとに毎回毎回Jと最適なθを計算します。
Θの精度もよくなるがSample数が増える要素の影響の方が強く
error=Jはどんどんと増えていきます。
test errorは右肩下がりです。
train errorは右肩上がりなのに、test errorが右肩下がりなのは、
test errorはtest setのSample数全部で計算しているからです。
train errorと同じようにSample数が1からmまで増えていくのではなく、
test errorではSample数は全部で一定です。
ではmに応じてtest error=Jが増えていくのはなぜか?
それはθが変わっていくからです。
training errorの時に計算した
m=1の時の最適なθ、
m=2の時の最適なθ、
m=3の時の最適なθ、
を適用して計算しています。
なので、精度の低いθの時に最大となるので、
最初の段階が一番大きく、後からtest error=Jが下落してくる形になっています。
次に2つのグラフのパフォーマンスの評価の見方です。
さっきのグラフには名前のようなものがついています。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
High varians =OverfittingとHigh Bias=underfittingと説明されていました。
平たく言うと『予測当てすぎ』と『予測当たらなさすぎ』だと思います。
例だと↓になります。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
続いてこのパフォーマンスがどちらかをみて行う対策です↓
例えば右のHigh Biasのケースでは
Test ErrorとTrain Errorがもう同じなので
Training Setを増やしても同じ結果が得られるだけの状態なので、
Featureを足したり、polynomial =多項式にしたりして、予測式を複雑にするという説明でした。
それではWeek2の課題にLearnin Curveをしてみるとどうなるか、
みてみます。
データの切り方は精度検証と同じにしました↑
今回はWeek3で出てくるfminuncでJと最適なθを求めます。
(fminuncについてはWeek3の日記で書きたいと思います)
それではプログラミングです。
うまく使えていることが確認できました↓
プログラミングの続きです。
最後グラフです。
結果のグラフです↓
グラフの形はHigh Bias=underfitting=『予測当たらなさすぎ』の方です。
test errorがtrain errorより小さくなったのは
test errorは17個のSampleでtrain errorは30個のSampleなので、
Sampleの数の差が出たのかと思います。
さて『予測当たらなさすぎ』ですが、
Week2の課題の解の方法は直線の予測式にしているからだと思います。
Week6にはpolynomial =多項式によって直線を曲線にして予測精度を上げる
技術があって次回取り組みたいと思います。