暇人日記

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

Coursera Machine Learning Week2 課題 2周目⑥ -苦闘記憶- Visualizing J(θ)

今回はVisulizing θに取り組みます。

 

まずは問題文を読みます。

f:id:omoshiroamericanews:20200108165918p:plain

Jの見える化について説明されています。

見える化できるのはグラフで表現することができると書いてあります。

 

見える化できるのは3次元までだろうと思いますが、

今回はθ0とθ1とJの3つの数量の関係なので、

ここにこのテーマが設定されているのだと思います。

 

Jはθ0とθ1が決まれば計算される値なので、

θ0とθ1が変化していったときに、

どのようにJが変化していくかが見たいということになります。

(Jは減っていてほしいので最小のポイントが見えればなおいいですね。)

 

余談ですが、Week6でやったLearning Curveに通じるところがあるような気がします。

アルゴリズムがうまくいっているかどうかをみるために、

Jの推移をみていました。このときは横軸はTrainng Setの数でした。

 

問題文の続きを読みます。

f:id:omoshiroamericanews:20200108170253p:plain

この問題文の部分は赤い線で区切って考えるとわかりやすかったです。

上が計算パートで、下がグラフパートです。

 

 

というわけで計算パートから取り組みます。

J_vals = zeros(length(theta0_vals), length(theta1_vals))

といきなりあるのですが、 theta0_vals, theta1_valsのベクトルのサイズって

何だ?と思っていたら、プログラム全体ex1.mにありました↓

 

f:id:omoshiroamericanews:20200108170438p:plain

theta0_valsのもとになっているlinspace(-10,10,100)って何だ?

と思ったので見てみました↓

 

f:id:omoshiroamericanews:20200108170514p:plain

 

最初が-10で、最後が10、そして100個あるので、

-10から10を100個刻みにした値だと思います。

 

続いてtheta1_valsもみています。

theta1_valsの基はlinspace(-1, 4, 100)なので、

おそらく-1から4の間を100刻みにしているとおもいます。

 

f:id:omoshiroamericanews:20200108170657p:plain

 

やはりそうでした。

もう一度問題文の計算パートをみてみます。

f:id:omoshiroamericanews:20200108170741p:plain

 

そうすると、

J_vals = zeros(length(theta0_vals), length(theta1_vals)) は

lengthは長いほうをとってくるので100になるということは、

100X100のベクトルですべて要素が0ということですね。

 

そして

-------------------------------------------------------------------------

for i = 1:length(theta0_vals)

    for j = 1:length(theta1_vals)

    t = [theta0_vals(i); theta1_vals(j)];

    J_vals(i,j) = computeCost(X, y, t);

    end

end

-------------------------------------------------------------------------

この部分はtheta0_vals,theta1_valsも1から100まで動かして

100X100の1万通りのパターンのJを計算するということですね。

ただ、 J_vals(i,j)ですべてのHistoryが残るかどうかは気になるところです。

これもloopシュミレーションのHistory取り出しですね。

 

f:id:omoshiroamericanews:20200108170932p:plain

J_valsを実際に見てみました

100X100で延々と計算結果が並んでいます。

 

計算パートが終わりましたのでグラフパートに取り組みたいと思います。

 

グラフパートの問題文をもう一度読みたいと思います。

f:id:omoshiroamericanews:20200108171123p:plain

 

Surfaceとcontourという機能を使うようです。

 

まずはSurfをみてみます。

 

f:id:omoshiroamericanews:20200108171218p:plain

その前段で理由の詳細は述べられていませんがJ_valsを転置しています。

Surfを実行してみました。

 

f:id:omoshiroamericanews:20200108171540p:plain

ただ、これだとどのθ0とθ1の組み合わせの時に

Jが小さいかはわかりませんね。。。

 

ちなみにJ_valsを転置するのが正解ですが、

転置した場合と転置しなかった場合を比較してみました。

 

f:id:omoshiroamericanews:20200108171736p:plain

 

左右対称ですね。

Jが最小となる場所は変わりますね。

 

 

続いてcontourを試してみます。

 

f:id:omoshiroamericanews:20200108171908p:plain

hold onでグラフ1にグラフ2を追加という構造が見えるので、

まずグラフ1に該当する部分↓を実験します。

f:id:omoshiroamericanews:20200108171949p:plain

 

左が実行した結果のグラフで、右が問題文にのっているグラフです。

赤Xが違います。

f:id:omoshiroamericanews:20200108172117p:plain

 

 

 なので、

f:id:omoshiroamericanews:20200108172317p:plain

このように↑役割分担していると思います。

 

ここでcontourを実験したいと思います。

f:id:omoshiroamericanews:20200108172436p:plain

 

logspaceとは何か?をヘルプ機能で調べました↓

 

f:id:omoshiroamericanews:20200108172533p:plain

 

読んでもよくわかりません。。。

 

いじりながら考えることにします。

 

logspaceの3つ目の数字を100,20,10としてみました。

f:id:omoshiroamericanews:20200108172625p:plain

大きくなると目が細かくなるようです。

 

logspaceの1つ目の数字を-20、-2、10と変化させました。

f:id:omoshiroamericanews:20200108172929p:plain

うーん、、法則性を見出せません。。。

情けないですが、これは諦めます。

 

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