向量化的意思就是把一些for迴圈的操作轉換成矩陣的操作,速度會比寫一般迴圈快非常多。比如說線性回歸,求預測值時,普通做法是一個樣本求一次,而m個樣本就要用for迴圈求m次,向量化操作就是用矩陣相乘的方式,一次求出m個樣本的預測值。
以協同過濾的例子為例,之前我們說使用者j對電影i的預測評分為${({ \Theta }^{ (j) }) }^{ T }{ x }^{ (i) }$,現在,我們該如何使用向量化的方式來預測評分呢?
首先,先寫出參數向量$\Theta$與特徵向量X,此時為了計算所有預測矩陣中的評分,只要將${ \Theta }^{ T }$與X這兩者相乘即可,這種向量化式的做法又叫作Low Rank Matrix Factorization。
除了跑此演算法外,還有其他可以做的事,也就是使用學習到的特徵向量來找出相關電影。
例如,如果你發現電影i的特徵向量與電影j的特徵向量,彼此之間的距離很相近,代表兩者可能很類似,則使用者喜歡電影i或許也會喜歡電影j。
假設你現在有五部電影j,其都與電影i有關,則你可以計算這五部電影各自的特徵向量與電影i的特徵向量之間的距離,最小者就是最相似者,而這可以讓你推薦給使用者比較不同的電影。
使用Mean Normalization加強協同過濾演算法:
如果現在多了一個使用者Eve,其對任何電影都沒有評分過,來看看協同過濾怎麼處理它。
假設現在n=2,代表有兩個特徵,我們要求Eve的${ \Theta }^{ (5) }$。由於Eve沒有評過任何電影,也就是沒有任何r(i,j)=1,導致會影響${ \Theta }^{ (5) }$的就只有式子最後的那一個正規項目。
如果你的目標是要最小化這個正規項目,則只要將${ \Theta }^{ (5) }$設$\begin{bmatrix} 0 \\ 0 \end{bmatrix}$就好。
因為正規項目鼓勵我們將參數設定成儘量接近0。因此,${({ \Theta }^{ (5) }) }^{ T }{ x }^{ (i) }=0$,將會預測Eve對所有電影的評分都是0。這看起來好像沒什麼用,因為有些電影有些人還是有評分,而這也讓我們很難推薦Eve某部電影,因為每個Eve對電影的預測評分都是0,都是一樣的,沒有比較高分的電影可以讓我們推薦。
因此,Mean Normalization的做法就是讓我們解決這個問題。
首先,我們計算出每部電影的平均得分,將其記在向量$\mu $中,再來,將原矩陣的每一列減掉平均值,現在每部電影在這個Y矩陣中都有一個0的平均評分(average rating of zero?)。
此時,假設這個Mean Normalize movie rating矩陣中的評分確實是從使用者那邊得到的評分,我將使用這個矩陣來學習參數向量${ \Theta }^{ (j) }$以及特徵向量${ x }^{ (i) }$。
對於使用者j,預測其對電影i的評分,最後要加回去減掉的${ \mu }_{ i }$:
${({ \Theta }^{ (j) }) }^{ T }{ x }^{ (i) }+{ \mu }_{ i }$
這是很合理的,因為我們根本不知道新使用者的喜好,所能做的就是對於該使用者,預測其給予電影的評分值可能是該電影的平均的得分值。
最後,一般狀況下,「某個使用者還未對任何電影評過分」,其重要程度可能會比「某個電影還未得到任何一個評分」來得高。
問題:
沒有留言:
張貼留言