暇人日記

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

Coursera Machine Learning Week3 課題 2周目⑦ -苦闘記憶- Predictのグラフ化

今回、取り組むのは計算されたグラフを視覚的に捉えたいので

グラフ化したいということに取り組みます。

 

予測結果は↓のように

f:id:omoshiroamericanews:20200129153815p:plain

でていますが、これをどうやってグラフにするかですね。

 

もともとオリジナルのデータを↓のようにグラフにしていたので、

これを予測版でも作って並べてみました。

 

f:id:omoshiroamericanews:20200129155016p:plain

 赤で囲ったあたりは変わったのがよくわかります。

正答率89%なので、計11個右と左で違うのがあるはずです。

 

問題はこの絵を見てもどこに閾値があるかわからないことです。

なので問題文には↓

 

f:id:omoshiroamericanews:20200129155204p:plain

とあり、予測結果のthetaを使ってDecisionBoundary(境界線)を

引く方法を見てみてくださいとあります。

 

ということでプログラム詳細plotDecisionBoundary.mを見てみました↓

な、ながい。。。。

 

f:id:omoshiroamericanews:20200129162038p:plain

 今回は赤枠で囲った部分が使われている部分なので、

ここだけをしっかり見たいと思います。

 

plot_x = [min(X(:,2))-2, max(X(:,2))+2]

 

↑の部分は最小からさらに2引いたポイントと最大からさらに2足したポイントの

2点を表しています。

 

plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1))

↑の部分はplot_xでpが0.5になる数字を逆算している式だと思います。

 

というのはplot_x,plot_yは具体的には↓になります。

f:id:omoshiroamericanews:20200129162538p:plain

 

f:id:omoshiroamericanews:20200129162657p:plain

を実行するとこのグラフができます↓

 

f:id:omoshiroamericanews:20200129162727p:plain

左上のポイントをXとみなしてpを計算すると0.5になります↓

 

f:id:omoshiroamericanews:20200129162632p:plain

 

なので、さっきでてきたこの式↓

plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1))

pが0.5になるポイントを逆算していると思いました。

 

ということはXの最小値から2引いたものと最大値から2たしたものについて

0.5となるポイントを逆算して2点を直線でつないでいるということだと思います。

 

この直線とオリジナルの分布図をhold onの機能で合成して完成となります。

 

ところでplot(a,b)はaとbの間に直線を引くことのできる関数となります。

 

実験してみます。

 

f:id:omoshiroamericanews:20200129162939p:plain

 

違いました。

 

a(a1,a2),b(b1,b2)

でa1,b1とa2,b2の間に線を引く式ですね。

 

どこかのWeek8の課題でdrawLineをつなぐ関数がありますが、

 

f:id:omoshiroamericanews:20200131124308p:plain

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

 

これはplotの応用だったということですね。

 

今回はここまでです。また次回頑張ります!