今回も引き続きComputeCost.mに取り組みます。
各ファイルの関係は前回の日記で把握したので、
課題を考えていきたいと思います。
課題はこのJが最小となるθを見つけなさいということです。
ComputeCost.mではJの計算式を出すことが求められています。
Jは各xごとの予測値と実績値yの差を全xについて
足し合わせたところがカギです。
この問題でいえば、X(人口)97X1、y(利益)も97X1のベクトルなので
絵にするとこういうことになります↓
97個すべてを1つずつ引き算するとloop設定など必要かと思いましたが、
この97個の計算を一気にできるのがベクトルのいいところだと思いました。
まずはX(人口)を基にした予測値の出し方を考えます。
Videoには
とありました。
前回の日記に書いたように
Θ0 + θ1 X x1
は
Θ0 X x0 + θ1 X x1
なので
Xに1行足す必要があります。そしてその1行の要素は全て1です。
絵にするとこうです↓
そうするとXは97X2のベクトルになります。
θも前回の日記で触れたようにメインファイルex8.mの
メンテ不要部分のところで↓のように設定されています。
Xは97X2でθは2X1なので、かけあわせると97X1になります。
そうするとYも同じ形の97X1なので、引き算できることになります。
X*Theta -yが97X1同士の引き算です。
しかしこのままだと、引き算の結果も97X1で
↓のような縦長のベクトルになっています。
欲しい計算結果はこの縦長のベクトルの合計値です。
少し実験をしてみます。
こういうベクトルを作りました↓
縦の合計が欲しいので試しにSum(B)としてみます。
うまいこと縦だけ合計されました。
ということはX*Theta-yで縦長になっているものも
Sum(X*Theta-y)とすればいいとわかりました。
ところでThetaは0,0だったのでX*Thetaは全部0なんじゃないかなと
ふと思いました。そうするとX*Theta-yとyは符号が違うだけ!?
と思ったので見てみました。
やっぱりそうでした。
最後は1/(2*m)ですね。
mは個数なので97になります。
Sampleが変わってもmがいつも正しい個数をカウントするためには
どうすればいいんだろう、と思ってました。
しかし、これはcomputeCost.mの中に答えが書いてあって
m=length(y)
となっていました。
yは97X1なのでこれで97になるようです。
Xは97X2ですが、
length(X)は97になるか、2になるか興味があったので
実験してみました。
97になりました。
lengthは縦の長さをとってくるのでしょうか?
それとも長い方をとってくるのでしょうか?
気になったので調べてみました。
調べるときは「help 〇〇〇」と出てくると表示されます。
長い方をとってくるということですね。
ちょっと実験してみました↓
なるほど、長い方をとってきていますね。
今回はここまでです。次回頑張ります!