基於矩陣分解的隱因子模型


推薦系統是現今廣泛運用的一種數據分析方法。常見的如,“你關注的人也關注他”,“喜歡這個物品的用戶還喜歡。。”“你也許會喜歡”等等。


常見的推薦系統分爲基於內容的推薦與基於歷史記錄的推薦。

基於內容的推薦,關鍵在於提取到有用的用戶,物品信息,以此爲特徵向量來進行分類,迴歸。

基於歷史記錄的推薦,記錄用戶的評分,點擊,收藏等等行爲,以此來判斷。

基於內容的推薦對於用戶物品的信息收集度要求比較高,而許多情況下很難得到那麼多的有用信息。而基於歷史記錄的方法,則利用一些常見的歷史記錄,相比與基於內容的方法,數據的收集比較容易。

協同過濾廣泛運用在推薦系統中。一般的方式是通過相似性度量,得到相似的用戶集合,或者相似的物品集合,然後據此來進行推薦。

Amazon的圖書推薦系統就是使用的基於物品相似性的推薦,“我猜你還喜歡**物品”。

不過,簡單的協同過濾效果不是很好,我們或考慮用戶聚類,得到基於用戶的協同過濾;或只考慮物品聚類,得到基於物品的協同過濾。


有人提出了基於矩陣分解(SVD)的隱因子模型(Latent Factor Model)。

隱因子模型通過假設一個隱因子空間,分別得到用戶,物品的類別矩陣,然後通過矩陣相乘得到最後的結果。在實踐中,LFM的效果會高於一般的協同過濾算法。

 

1.      LFM基本方法

 

我們用user1,2,3表示用戶,item 1,2,3表示物品,Rij表示用戶i對於物品j的評分,也就是喜好度。那麼我們需要得到一個關於用戶-物品的二維矩陣,如下面的R。


常見的系統中,R是一個非常稀疏的矩陣,因爲我們不可能得到所有用戶對於所有物品的評分。於是利用稀疏的R,填充得到一個滿矩陣R’就是我們的目的。

 

在協同過濾中,我們通常會假設一些用戶,或者一些物品屬於一個類型,通過類型來推薦。這這裏,我們也可以假設類(class),或者說是因子(factor)。我們假設用戶對於特定的因子有一定的喜好度,並且物品對於特定的因子有一定的包含度。

比如,用戶對於喜劇,武打的喜好度爲1,5;而物品對於喜劇,武打的包含度爲5,1;那麼我們可以大概地判斷用戶不會喜歡這部電影。

也就是我們人爲地抽象出一個隱形因子空間,然後把用戶和物品分別投影到這個空間上,來直接尋找用戶-物品的喜好度。

一個簡單的二維隱因子空間示意圖如下:


上圖以男-女;輕鬆-嚴肅;兩個維度作爲隱因子,把用戶和電影投影到這個二維空間上。

上面的問題,我們用數學的方法描述,就是寫成如下的矩陣:

P表示用戶對於某個隱因子的喜好度;Q表示物品對於某個隱因子的包含度。我們使用矩陣相乘得到用戶-物品喜好度。

 

正如上面所說,R是一個稀疏的矩陣,我們通過R中的已知值,得到P,Q後,再相乘,反過來填充R矩陣,最後得到一個滿的R矩陣。


於是隱因子模型轉化爲矩陣分解問題,常見的有SVD,以及下面的一些方法。

下面介紹具體的方法

 

2.      Batch learning of SVD

設已知評分矩陣V,I爲索引矩陣,I(I,j)=1表示V中的對應元素爲已知。U,M分別表示用戶-factor,物品-factor矩陣。

於是,我們先用V分解爲U*M,目標函數如下:


第一項爲最小二乘誤差,P可以簡單理解爲點乘;

第二項,第三項爲防止過擬合的正則化項。

 

求解上述的優化問題,可以用梯度下降法。計算得負梯度方向如下:


我們每次迭代,先計算得到U,M的負梯度方向,然後更新U,M;多次迭代,直至收斂。

這種方法的缺點是對於大的稀疏矩陣來說,有很大的方差,要很小的收斂速度才能保證收斂。

 

改進:可以考慮加入一個動量因子,來加速其收斂速度:


 

3.      Incomplete incremental learning of SVD

上述的方法對於大的稀疏矩陣來說,不是很好的方法。

於是,我們細化求解過程。

改進後的最優化目標函數如下:


也就是,我們以V的行爲單位,每次最優化每一行,從而降低batch learning的方差。

負梯度方向:

 

4.      Complete incremental learning of SVD

同樣的,根據incrementlearning的減少方差的思想,我們可以再次細化求解過程。

以V的已知元素爲單位,求解。

最優化目標函數如下:

 

每次迭代,我們遍歷每個V中的已知元素,求得一個負梯度方向,更行U,M;

 

 

隱因子模型還有相應的其他變化版本,如compound SVD,implicit feedback SVD等,放在下一篇blog裏。

參考文獻:A Guide to Singular Value Decomposition for Collaborative Filtering


發佈了89 篇原創文章 · 獲贊 51 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章