http://ling0322.info/2013/05/07/recommander-system.htmlhtml
這個學期Web智能與社會計算的大做業就是完成一個推薦系統參加百度電影推薦算法大賽,成績按照評測數據給分。老師介紹了N種方法包括基於內容的、以及協同過濾等等,不過他強烈建議使用矩陣奇異值分解的辦法來作。也正由於是這個緣由,咱們一共8組其中6組的模型都是SVD。算法
這個比賽就是提供給你用戶對電影的評分、電影的TAG、用戶的社會關係(好友)、用戶的觀看紀錄信息。其中用戶對電影的評分滿分是5分,大約8k用戶、1w電影,而後根據以上的信息預測用戶對某些電影的評分。而後評測結果就是跟用戶實際評分的RMSE值。機器學習
SVD就是一種主成分分析以及降維的方法,大致思路就是一個對稱矩陣A能夠分解成對角形學習
A=PTΛP
atom
其中Λ
爲對角陣,它對角線上的元素就是矩陣A的特徵值。特徵值對應的特徵向量是互相正交的,這個也就是對稱矩陣的性質。在這些特徵值中大的特徵值以及它對應的特徵向量對於整個結果(就是乘出來的A)來講比較重要,相比之下比較小的特徵特徵值對應的特徵向量對於結果的影響就比較小,所以將這些小的特徵值以及其對應的特徵向量去掉,產生結果A′
來講,A′
仍舊是很是接近於A。這些被去掉的東西能夠認爲是A中的噪音。所以A′
能夠寫做spa
A′=UTΛV
code
可是現實生活中不多有矩陣是對稱的,好比上面的用戶-電影矩陣。所以就誕生了奇異值分解的方法htm
A=UTΔV
blog
其中Δ
和Λ
同樣是一個對角陣,可是對角線上的元素就不是特徵值了而是矩陣A的奇異值(至於爲何叫奇異值我也不知道,這個很奇異嗎?)。A的奇異值就等於AAT
的特徵值的根號。而後通過各類複雜的運算這個分解就完成了。奇異值分解的用途很廣,主要是用做降維以及主成分分析。在天然語言中LSA主題模型就是基於奇異值分解,另外計算詞與詞之間的關係也要用到SVD。get
使用SVD作推薦系統也能夠當作是主成分分析的過程(此外還有另一種解釋就是將用戶和電影投影到同一個向量空間中1),找到用戶-電影矩陣中最大的r個奇異值,進行分解構成r行的矩陣U(表明用戶)和r列的矩陣V(表明電影),這個就是各個用戶對電影打分的主要的影響因素,依據這個就能夠對於用戶的打分進行預測。
可是這裏狀況很特殊,用戶-電影矩陣十分稀疏,大約只有1%左右的項是有值的,對於這些項所有用0來填這個明顯就是表示用戶對這些電影打0分,這個是不合邏輯的,用平均值或者隨機值填充效果也確定很差。所以目前使用它的一種近似形式,對於用戶-電影矩陣Am×n
,找到矩陣Qr×m
、Tr×n
使得QTT
儘可能類似於A。這個能夠轉化成,對於每一個評分rui
找到 qu∈Q,ti∈T
使得
∑u,i(rui−qTipu)+λ(∥qi∥2+∥pu∥2)
最小,其中後半部分是防止過擬合而加入的因子。這個很明顯可使用隨機梯度降低算法進行求解(關於隨機梯度降低算法能夠參考斯坦福機器學習第二課)
eui=defrui−qTipu
qi←qi+γ(eui⋅pu−λ⋅qi)
pu←pu+γ(eui⋅qi−λ⋅pu)
其中γ
就是迭代的步長,咱們使用Go語言實現了以上的迭代過程,如下是一些實驗的結果數據
γ
=0.001, λ
=0.01, iter=100, r=20, RMSE=0.6483γ
=0.001, λ
=0.01, iter=1000, r=20, RMSE=0.6618γ
=0.001, λ
=0.05, iter=1000, r=20, RMSE=0.6298γ
=0.001, λ
=0.1, iter=1000, r=20, RMSE=0.6534γ
=0.001, λ
=0.05, iter=1000, r=50, RMSE=0.6298其中iter表示迭代次數、λ
是防過擬合因子的係數、RMSE是在百度平臺上跑的結果(越小越好)。其中比較1和2能夠很明顯的發現λ
在取0.01的時候仍是出現了過擬合現象,所以在λ
=0.05的狀況下是全部實驗數據中最好的。r是因子的個數,這裏對結果影響不大。
γ
的取值也很是重要,由於在梯度降低中γ
太小會收斂很慢,γ
過大會錯過最佳的點。其實最好的解決方法就是使得γ
的值隨着變化率動態改變,原本在代碼中實現了這個功能的,可是由於實現以後發現程序太慢了,因此就去掉了。
最後在課程結束Presentation的時候,老師告訴咱們其實好的推薦系統應該將TAG、用戶社交關係等信息都加進去,這樣的數據的結果纔可以有大幅度的提高(由於咱們都是用SVD作,結果大同小異)。此外,同窗將均值以及用戶的偏移加進去以後最好的結果是0.625左右(詳細狀況能夠看推薦系統相關算法(1):SVD這篇文章)。
另外推薦一篇論文Matrix Factorization Techniques for Recommender Systems