今回はcosiCostFunc.mのGradientパートに取り組みます↓
そもそもcofiCostFuncはこのFuncionでした。
[J, grad] = cofiCostFunc(params, Y, R, num_users, num_movies, ...
num_features, lambda)
前回「J」の計算式を構築したので、
今回は「grad」の計算式の構築に取り組みます。
gradって苦手なんですよね。。。。
問題文を読んでみます。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
大きいヒントが出てきました。
X_gradはXと同じsizeだから5X3
Theta_gradはThetaと同じsizeだから4X3
のベクトルということになります。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
X_gradとTheta_gradをSingle Vectorにする
それってWeek5でもやったような。。。
やっぱり、Neural Networkの時にも同じような考え方でやってますね。↓
これはcosiCostFunc.mに入っているのかな。
あ、ありました↓
coficostFunc.mは
[J, grad] = cofiCostFunc(params, Y, R, num_users, num_movies,num_features, lambda)
なので、X_grad.Theta_gradは媒介の役割を果たしているということですね。
問題文にワンポイントアドバイスがのっていました。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
第1のアドバイスはループだと時間がかかるからベクトルでやった方がいいになります
第2のアドバイスはmovieのパラメーターであるXについてループをする、ユーザーのパラメーターであるThetaについてループをする、と書いてあります。。。。
ループしたほうがいいのか、しない方がいいのかわからなくなりました。
第3のアドバイスはまずはベクトルじゃない方から取り掛かって
ループの中にinner loopをもつバージョンを作成して、
それからinner loopをベクトルにするのが良いと書いてあります。
そうしたら2つのループだけが残ることになると書いてあります。
なので、こういうことなのかな↓と思いました。
MovieとUserでループは1つずつ残って2つあるけど、
inner loopはベクトルでやろうね、ということかと。
課題に取り組みながら検証していこうと思います。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
↑の式は前回やったJの式↓に似ています。
ただ、↑の式はnX1の縦一列のベクトルで、↓のJは1X1の値になります。
何か後でヒントになるかもしれません。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
まずはYもThetaもr(I,j)=1のみ抽出してやりなさいといっています。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
Idx=find(R(I,:)==1)を用いて
Theta_temp=Theta(idx,:)と
Y_temp=Y(I,idx)を用いて
ith movieのレビューがあるものだけ抽出するようという指示に見えます。
X_gradの式も書いてあるのでプログラミングしてみました。
結果です。
図解してみました↓
水色枠がi=1のときです。
i=1のときはYの1列目をみるので、5 4 0 0なので
レビューがある1番目と2番目がidxとして表記されています。
それをもとにThetaとYのレビューのある部分だけが抽出されています。
1番目と2番目はいわばユーザー1とユーザー2のレビューがあるので、
Thetaでユーザー1とユーザー2を示す1列目と2列目が抽出されています。
当然Yも関係のある5 4だけが取り出されています。
X_gradが1X3で表現されています。
答えは5X3なので1X3を5個積み重ねるのかもしれません。
メインの式のサイズの確認をしてみました。
あとはhistoryをとって5X3にするのにTryしてみます。
loopしてhistoryを取り出すのは、↓でやっているので、
Coursera Machine Learning Week8 課題 苦闘日記④ - 暇人日記
それに倣って、こう書きました↓
結果です。
ヒントの通り↓のサイズとなりました!
X_gradはXと同じsizeだから5X3
Theta_gradはThetaと同じsizeだから4X3
Submitしたら不正解でしたorz
今回はここまでです。次回また頑張ります。