http://www.cnblogs.com/FengYan/archive/2012/05/06/2480664.htmlhtml
假如要預測Zero君對一部電影M的評分,而手上只有Zero君對若干部電影的評分和風炎君對若干部電影的評分(包含M的評分)。那麼能預測出Zero君對M的評分嗎?答案顯然是能。最簡單的方法就是直接將預測分定爲平均分。不過這時的準確度就難說了。本文將介紹一種比這個最簡單的方法要準上許多,而且也不算複雜的算法。
SVD(Singular Value Decomposition)的想法是根據已有的評分狀況,分析出評分者對各個因子的喜愛程度以及電影包含各個因子的程度,最後再反過來根據分析結果預測評分。電影中的因子能夠理解成這些東西:電影的搞笑程度,電影的愛情愛得死去活來的程度,電影的恐怖程度。。。。。。SVD的想法抽象點來看就是將一個N行M列的評分矩陣R(R[u][i]表明第u個用戶對第i個物品的評分),分解成一個N行F列的用戶因子矩陣P(P[u][k]表示用戶u對因子k的喜愛程度)和一個M行F列的物品因子矩陣Q(Q[i][k]表示第i個物品的因子k的程度)。用公式來表示就是
R = P * T(Q) //T(Q)表示Q矩陣的轉置算法
下面是將評分矩陣R分解成用戶因子矩陣P與物品因子矩陣Q的一個例子。R的元素數值越大,表示用戶越喜歡這部電影。P的元素數值越大,表示用戶越喜歡對應的因子。Q的元素數值越大,表示物品對應的因子程度越高。分解完後,就能利用P,Q來預測Zero君對《七夜》的評分了。按照這個例子來看,Zero君應該會給《七夜》較低的分數。由於他不喜歡恐怖片。注意不要糾結圖中的具體數值,由於那些數值是我隨便填上去的。ide
實際上,咱們給一部電影評分時,除了考慮電影是否合本身口味外,還會受到本身是不是一個嚴格的評分者和這部電影已有的評分情況影響。例如:一個嚴格評分者給的分大多數狀況下都比一個寬鬆評分者的低。你看到這部電影的評分大部分較高時,可能也傾向於給較高的分。在SVD中,口味問題已經有因子來表示了,可是剩下兩個尚未相關的式子表示。所以有必要加上相關的部分,提升模型的精準度。改進後的SVD的公式以下:
R = OverallMean + biasU + biasI + P * T(Q) (1)
其中OverallMean表示全部電影的平均分,biasU表示用戶評分偏離OverallMean的程度,biasI表示電影評分偏離OverallMean的程度,P,Q意思不變。特別注意,這裏除了OverallMean以後,其它幾個都是矩陣。學習
分解完後,即(1)式中的五個參數都有了正確的數值後,就能夠用來預測分數了。假設咱們要預測用戶u對電影i的評分:ui
bu表示第u個用戶的偏離程度,bi表示第i部電影的偏離程度,pu表示第u個用戶的因子愛好程度,qi表示第i部電影的因子程度。spa
在第一部分的例子中,你也許會有疑問:明明評分矩陣有一個元素的值是空的,爲何還能獲得兩個完整的矩陣P和Q呢?緣由是那兩個矩陣是經過學習(learning)獲得的。SVD使用隨機梯度降低(stochastic gradient descent)學習(1)式中除了OverallMean以外的參數。學習過程能夠歸納成這樣:先給各個參數一個初值,而後利用這些參數進行預測,並將預測結果與已知評分進行對比,最後根據對比結果修正各個參數。更準確點的說法是調整參數的值,使得如下式子能取到最小值:3d
ALPHA表示全部訓練樣本。被第一個圓括號括着的部分表示當前的預測結果與實際值的誤差。被第二個圓括號括着的部分是爲了防止過擬合(overfitting)。htm
以上就是SVD實現時的主要思想了,至於具體實現能夠參考個人代碼。這個實現版本在movielens 1M上的效果比《A Guide to Singular Value Decomposition for Collaborative Filtering》中提到的要好一點點。這裏,我主要提一下實現SVD時要注意的地方:
a. 更新qi時,要先保存
b. 預測分數時,範圍要限制在最小值和最大值內blog
此外,這是我找到的一些有用的建議:
a. 全部參數的regularization 值是同樣的,不用特別區分bu, bi和 p,q
b. bu, bi不須要初始化,所有設成0
c. P,Q應該的初始化,通常使用 0.1 * rand(0,1) / sqrt(dim) dim指特徵的維數get
下面的幾篇文章儘管是英文的,但對SVD的講解很是好,強烈推薦給對SVD感興趣的人。
1. Netflix Update: Try This at Home
2. A Guide to Singular Value Decomposition for Collaborative Filtering
3. Matrix Factorization Techniques for Recommender Systems