暇人日記

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

Coursera Machine Learning Week9 課題 苦闘日記③

前回に引き続きcosiCostFunc.mに取り組みます。

f:id:omoshiroamericanews:20191207143609p:plain

前回はY;5X4に引き算させる予測値をどうするのか?

というところで次元から5X4になるものを考えてみたり、

Videoの振り返りをして映画ごと視点で考えてみたりしました。

 

そして気づきました。

x(i)は『feature vector for movie i』↓と書いてあることに。

Xがmovie用のパラメーターなのでX=x(i)ということに気づきました。

 

f:id:omoshiroamericanews:20191207231228p:plain

そうすると、

f:id:omoshiroamericanews:20191207231318p:plain

この式はTheta’*Xということになります。

 

問題文で示されているCost functionの中核なので↓かなり近づいた気がします。

f:id:omoshiroamericanews:20191208163711p:plain

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

 

ただ、Thetaは4X3でXは5X3なので、5X4にするために

X*Theta'とします。

 

なんでこの2つをかけるのだろうと思いましたが、

前回の日記にヒントがある気がしました↓

 

Coursera Machine Learning Week9 課題 苦闘日記② - 暇人日記

↓引用

************************************************************************************************

f:id:omoshiroamericanews:20191209160617p:plain

*******************************************************************************************

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で絶対に同数だと思いました。

 

そう考えると、前回、映画ごと目線論法を考えたんですが、

 

f:id:omoshiroamericanews:20191207230758p:plain

このAがThetaだったということですね。

 

 

これでプログラムしてみました。

 

f:id:omoshiroamericanews:20191208172426p:plain

計算結果です↓

f:id:omoshiroamericanews:20191208172722p:plain

f:id:omoshiroamericanews:20191208172858p:plain

 

答えは22.22なので惜しいですが間違えてます。。。

どこが間違えているんだろう。。。

 

f:id:omoshiroamericanews:20191209161948p:plain

 

青枠で囲ったところは予測値ですが、予測値-Sampleの誤差を

計算するうえでは0の方が適切な気がします。

 

というのは青枠の箇所は0でSampleが0は

ユーザーがレビューしていないという意味なので誤差も何もないからです。

 

S2の青枠を0にするためにRを要素ごとにかけたいと思います。

RはYが1-5の部分を1で、レビューなしを0で表しているので、

f:id:omoshiroamericanews:20191209162201p:plain

要素ごとにかけると、うまいことS2の青枠を0にすることができます。

S2=(X*Theta').*R

答えが22.22になりました!

 

<番外編>

ところで、私は課題をコピーして実験用のファイルで試行錯誤しています。

前回の日記を終えて、作業し始めたときにYの値が変わっていて難儀しました。

 

変化後↓

f:id:omoshiroamericanews:20191209163006p:plain

 

正しい値↓

f:id:omoshiroamericanews:20191209163135p:plain

 

このように↓コピペしながら自分用のを作っていました。

f:id:omoshiroamericanews:20191209163235p:plain

結論からいうと

load ('ex8_movies.mat'); 

が抜けていました。

 

↑にあるload ('ex8_movieParams.mat');には

YのDataは入っていませんでした。

 

ではなぜ入っていないDataが変形して表示されたのか?

それはex8cofi.mを回していたからでした。

つまりex8cifi.mを回すとYがOctave内に保存されるようで、

それを使用する形になってDataが変形して見えていました。

 

今回はここまでです。次回また課題に取り組みます。