今回はVisulizing θに取り組みます。
まずは問題文を読みます。
Jの見える化について説明されています。
見える化できるのはグラフで表現することができると書いてあります。
見える化できるのは3次元までだろうと思いますが、
今回はθ0とθ1とJの3つの数量の関係なので、
ここにこのテーマが設定されているのだと思います。
Jはθ0とθ1が決まれば計算される値なので、
θ0とθ1が変化していったときに、
どのようにJが変化していくかが見たいということになります。
(Jは減っていてほしいので最小のポイントが見えればなおいいですね。)
余談ですが、Week6でやったLearning Curveに通じるところがあるような気がします。
アルゴリズムがうまくいっているかどうかをみるために、
Jの推移をみていました。このときは横軸はTrainng Setの数でした。
問題文の続きを読みます。
この問題文の部分は赤い線で区切って考えるとわかりやすかったです。
上が計算パートで、下がグラフパートです。
というわけで計算パートから取り組みます。
J_vals = zeros(length(theta0_vals), length(theta1_vals))
といきなりあるのですが、 theta0_vals, theta1_valsのベクトルのサイズって
何だ?と思っていたら、プログラム全体ex1.mにありました↓
theta0_valsのもとになっているlinspace(-10,10,100)って何だ?
と思ったので見てみました↓
最初が-10で、最後が10、そして100個あるので、
-10から10を100個刻みにした値だと思います。
続いてtheta1_valsもみています。
theta1_valsの基はlinspace(-1, 4, 100)なので、
おそらく-1から4の間を100刻みにしているとおもいます。
やはりそうでした。
もう一度問題文の計算パートをみてみます。
そうすると、
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取り出しですね。
J_valsを実際に見てみました
100X100で延々と計算結果が並んでいます。
計算パートが終わりましたのでグラフパートに取り組みたいと思います。
グラフパートの問題文をもう一度読みたいと思います。
Surfaceとcontourという機能を使うようです。
まずはSurfをみてみます。
その前段で理由の詳細は述べられていませんがJ_valsを転置しています。
Surfを実行してみました。
ただ、これだとどのθ0とθ1の組み合わせの時に
Jが小さいかはわかりませんね。。。
ちなみにJ_valsを転置するのが正解ですが、
転置した場合と転置しなかった場合を比較してみました。
左右対称ですね。
Jが最小となる場所は変わりますね。
続いてcontourを試してみます。
hold onでグラフ1にグラフ2を追加という構造が見えるので、
まずグラフ1に該当する部分↓を実験します。
左が実行した結果のグラフで、右が問題文にのっているグラフです。
赤Xが違います。
なので、
このように↑役割分担していると思います。
ここでcontourを実験したいと思います。
logspaceとは何か?をヘルプ機能で調べました↓
読んでもよくわかりません。。。
いじりながら考えることにします。
logspaceの3つ目の数字を100,20,10としてみました。
大きくなると目が細かくなるようです。
logspaceの1つ目の数字を-20、-2、10と変化させました。
うーん、、法則性を見出せません。。。
情けないですが、これは諦めます。
今回はここまでです。また次回頑張ります。