暇人日記

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

Week2の予測結果をWeek6の仮説精度検証とLearning Curveで評価してみたらどうなるか?

Week6では↓のように仮説の精度検証の方法が説明されていたので、

この方法で前回の日記で取り組んでいたWeek2の予測結果を

評価してみたいと思います。

 

f:id:omoshiroamericanews:20200117143457p:plain

 

今回は仮説検証なのでデータを70対30に2分割します。

 

(余談ですが、モデル選択の場合は60対20対20の3分割です、と理由が明確に

 このブログ↓に書かれてあり理解できる人がうらやましいと思った次第です。)

ushiji.hatenablog.com

 

話を元に戻します。

Week6では分割したデータを使って↓のように活用すると説明がありました。

f:id:omoshiroamericanews:20200117144045p:plain

 

Training Setから計算されたθでTest setのError(=J)を計算しなさいということです。

しかし、いやな予感が1つあります。

計算結果をみたら、大きすぎるとか小さすぎるとかわかるんでしょうか。。。。

 

とはいえ、まずは前に進みます。

 

最初にTraining SetとTest Setの分割を↓の通りします。

f:id:omoshiroamericanews:20200117144346p:plain

 

プログラミングは↓のように書きました。

f:id:omoshiroamericanews:20200118150200p:plain

 

Week2でやったように

FeatureNormalizeしてJを最小化するthetaが計算されるよう

alphaとnum_itersを設定しました↓

 

f:id:omoshiroamericanews:20200118150612p:plain

 

Training SetのJがでました↓

 

f:id:omoshiroamericanews:20200118151000p:plain

 

このTraining Set↑のJ=2.598e+10の基になったθで

Test Setを計算したのが↓です。

f:id:omoshiroamericanews:20200118151109p:plain

同じようにe+10で表記されてほしい。。。

頑張って桁を数えると1.835e+10となります。

 

なので2.598+e10に比べると小さく見えますが

そもそものsample数が30と17なので、小さくなって当然だとも思います。

 

グラフにすると↓になります。

赤がJtrainで青がJtestです。

 

f:id:omoshiroamericanews:20200118151249p:plain

 

率直にいって仮説の精度が良かったかどうかわかりません。

 

なのでTest Setでの予測とyを並べてみました。

f:id:omoshiroamericanews:20200118151530p:plain

Test setでの精度はかなり悪いですね。

 

これはひょっとしたらtraining Setでも

精度悪いのではと思ってみてみました↓

 

f:id:omoshiroamericanews:20200118151721p:plain

 

やはりTraining setでも精度はかなり悪いですね。

 

Training SetのJとthetaがイマイチなので、

alphaが0.01-->0.3に変更して計算してみます。

 

再計算したTest Setでの予測とyを並べてみました。

f:id:omoshiroamericanews:20200118151808p:plain

さっきより全然よくなりました。

しかし、結局、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をとって、

計算した予測のパフォーマンスの傾向を見ていると思います。

 

f:id:omoshiroamericanews:20200118153620p:plain

どちらのグラフになっているのか、でパフォーマンスの傾向をみます。

 

私は課題をやるまで気づかなかったグラフの見方を説明します。

 

まず縦軸に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つのグラフのパフォーマンスの評価の見方です。

さっきのグラフには名前のようなものがついています。

 

f:id:omoshiroamericanews:20200118160452p:plain

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

 

 High varians =OverfittingとHigh Bias=underfittingと説明されていました。

平たく言うと『予測当てすぎ』と『予測当たらなさすぎ』だと思います。

 

例だと↓になります。

f:id:omoshiroamericanews:20200118160803p:plain

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

 

続いてこのパフォーマンスがどちらかをみて行う対策です↓

f:id:omoshiroamericanews:20200118161144p:plain

例えば右のHigh Biasのケースでは

Test ErrorとTrain Errorがもう同じなので

Training Setを増やしても同じ結果が得られるだけの状態なので、

Featureを足したり、polynomial =多項式にしたりして、予測式を複雑にするという説明でした。

 

それではWeek2の課題にLearnin Curveをしてみるとどうなるか、

みてみます。

 

f:id:omoshiroamericanews:20200117144346p:plain

 

データの切り方は精度検証と同じにしました↑

 

今回はWeek3で出てくるfminuncでJと最適なθを求めます。

(fminuncについてはWeek3の日記で書きたいと思います)

 

それではプログラミングです。

 

f:id:omoshiroamericanews:20200118164735p:plain

 

うまく使えていることが確認できました↓

f:id:omoshiroamericanews:20200118164808p:plain

 

プログラミングの続きです。

f:id:omoshiroamericanews:20200118165536p:plain

最後グラフです。

 

f:id:omoshiroamericanews:20200118165628p:plain

 

結果のグラフです↓

f:id:omoshiroamericanews:20200118165728p:plain

グラフの形はHigh Bias=underfitting=『予測当たらなさすぎ』の方です。

 

test errorがtrain errorより小さくなったのは

test errorは17個のSampleでtrain errorは30個のSampleなので、

Sampleの数の差が出たのかと思います。

 

さて『予測当たらなさすぎ』ですが、

Week2の課題の解の方法は直線の予測式にしているからだと思います。

 

Week6にはpolynomial =多項式によって直線を曲線にして予測精度を上げる

技術があって次回取り組みたいと思います。