前回に引き続きcosiCostFunc.mに取り組みます。
前回はY;5X4に引き算させる予測値をどうするのか?
というところで次元から5X4になるものを考えてみたり、
Videoの振り返りをして映画ごと視点で考えてみたりしました。
そして気づきました。
x(i)は『feature vector for movie i』↓と書いてあることに。
Xがmovie用のパラメーターなのでX=x(i)ということに気づきました。
そうすると、
この式はTheta’*Xということになります。
問題文で示されているCost functionの中核なので↓かなり近づいた気がします。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
ただ、Thetaは4X3でXは5X3なので、5X4にするために
X*Theta'とします。
なんでこの2つをかけるのだろうと思いましたが、
前回の日記にヒントがある気がしました↓
Coursera Machine Learning Week9 課題 苦闘日記② - 暇人日記
↓引用
************************************************************************************************
*******************************************************************************************
nは今回の課題だとAction /Comedy/Love Storyみたいな要素だと思いました。
映画もこの3つの要素の評価があるし、ユーザーもこの3つの要素の評価があると
考えると、例えば
映画①はActionの要素0.8 /Comedyの要素0.5/Love Story0.0のAction Comedy映画で、
ユーザー①Action 0.6/Comedy0.4/Love Sroty 0.2のActtion Comedy好きには高くレビューされるが
ユーザー②Action 0.0/Comedy 0.0/Love Story1.0のようなLoveStory好きには高く
レビューされないということだと思いました。
なので、feature のnはXとThetaで絶対に同数だと思いました。
そう考えると、前回、映画ごと目線論法を考えたんですが、
このAがThetaだったということですね。
これでプログラムしてみました。
計算結果です↓
答えは22.22なので惜しいですが間違えてます。。。
どこが間違えているんだろう。。。
青枠で囲ったところは予測値ですが、予測値-Sampleの誤差を
計算するうえでは0の方が適切な気がします。
というのは青枠の箇所は0でSampleが0は
ユーザーがレビューしていないという意味なので誤差も何もないからです。
S2の青枠を0にするためにRを要素ごとにかけたいと思います。
RはYが1-5の部分を1で、レビューなしを0で表しているので、
要素ごとにかけると、うまいことS2の青枠を0にすることができます。
S2=(X*Theta').*R
答えが22.22になりました!
<番外編>
ところで、私は課題をコピーして実験用のファイルで試行錯誤しています。
前回の日記を終えて、作業し始めたときにYの値が変わっていて難儀しました。
変化後↓
正しい値↓
このように↓コピペしながら自分用のを作っていました。
結論からいうと
load ('ex8_movies.mat');
が抜けていました。
↑にあるload ('ex8_movieParams.mat');には
YのDataは入っていませんでした。
ではなぜ入っていないDataが変形して表示されたのか?
それはex8cofi.mを回していたからでした。
つまりex8cifi.mを回すとYがOctave内に保存されるようで、
それを使用する形になってDataが変形して見えていました。
今回はここまでです。次回また課題に取り組みます。