簡單的基於矩陣分解的推薦算法-PMF, NMF


介紹:

推薦系統中最為主流與經典的技術之一是協同過濾技術(Collaborative Filtering),它是基於這樣的假設:用戶如果在過去對某些項目產生過興趣,那么將來他很可能依然對其保持熱忱。其中協同過濾技術又可根據是否采用了機器學習思想建模的不同划分為基於內存的協同過濾(Memory-based CF)與基於模型的協同過濾技術(Model-based CF)。其中基於模型的協同過濾技術中尤為矩陣分解(Matrix Factorization)技術最為普遍和流行,因為它的可擴展性極好並且易於實現,因此接下來我們將梳理下推薦系統中出現過的經典的矩陣分解方法。

 

矩陣分解:

首先對於推薦系統來說存在兩大場景即評分預測(rating prediction)與Top-N推薦(item recommendation,item ranking)。評分預測場景主要用於評價網站,比如用戶給自己看過的電影評多少分(MovieLens),或者用戶給自己看過的書籍評價多少分(Douban)。其中矩陣分解技術主要應用於該場景。Top-N推薦場景主要用於購物網站或者一般拿不到顯式評分信息的網站,即通過用戶的隱式反饋信息來給用戶推薦一個可能感興趣的列表以供其參考。其中該場景為排序任務,因此需要排序模型來對其建模。因此,我們接下來更關心評分預測任務。

對於評分預測任務來說,我們通常將用戶和項目(以電影為例)表示為二維矩陣的形式,其中矩陣中的某個元素表示對應用戶對於相應項目的評分,1-5分表示喜歡的程度逐漸增加,?表示沒有過評分記錄。推薦系統評分預測任務可看做是一個矩陣補全(Matrix Completion)的任務,即基於矩陣中已有的數據(observed data)來填補矩陣中沒有產生過記錄的元素(unobserved data)。值得注意的是,這個矩陣是非常稀疏的(Sparse),稀疏度一般能達到90%以上,因此如何根據極少的觀測數據來較准確的預測未觀測數據一直以來都是推薦系統領域的關鍵問題。

 

基礎背景:SVD 和 FunkSVD

SVD

當然SVD分解的形式為3個矩陣相乘,左右兩個矩陣分別表示用戶/項目隱含因子矩陣,中間矩陣為奇異值矩陣並且是對角矩陣,每個元素滿足非負性,並且逐漸減小。因此我們可以只需要前  個因子來表示它。

如果想運用SVD分解的話,有一個前提是要求矩陣是稠密的,即矩陣里的元素要非空,否則就不能運用SVD分解。很顯然我們的任務還不能用SVD,所以一般的做法是先用均值或者其他統計學方法來填充矩陣,然后再運用SVD分解降維。

公式如下


 

FUNKSVD

SVD首先需要填充矩陣,然后再進行分解降維,同時由於需要求逆操作(復雜度O(n^3)),存在計算復雜度高的問題,所以后來Simon Funk提出了FunkSVD的方法,它不在將矩陣分解為3個矩陣,而是分解為2個低秩的用戶項目矩陣,同時降低了計算復雜度:

它借鑒線性回歸的思想,通過最小化觀察數據的平方來尋求最優的用戶和項目的隱含向量表示。同時為了避免過度擬合(Overfitting)觀測數據,又提出了帶有L2正則項的FunkSVD:

SVD 和 FUNKSVD 的最優化函數都可以通過梯度下降或者隨機梯度下降法來尋求最優解。

 

 PMF:

 

 

PMF是對於FunkSVD的概率解釋版本,它假設評分矩陣中的元素  是由用戶潛在偏好向量 和物品潛在屬性向量 的內積決定的:

則觀測到的評分矩陣條件概率為:

 

 

同時,假設用戶偏好向量與物品偏好向量服從於均值都為0,方差分別為  ,  的正態分布:

根據貝葉斯公式,可以得出潛變量U,V的后驗概率為:

 

接着,等式兩邊取對數  后得到:

 

最后,經過推導,我們可以發現PMF確實是FunkSVD的概率解釋版本,它兩個的形式一樣一樣的。

 

NMF

在普通的SVD的運算過程中,會得到一些負數的embedding,這里,提出了一個假設:分解出來的小矩陣應該滿足非負約束。

因為在大部分方法中,原始矩陣  被近似分解為兩個低秩矩陣  相乘的形式,這些方法的共同之處是,即使原始矩陣的元素都是非負的,也不能保證分解出的小矩陣都為非負,這就導致了推薦系統中經典的矩陣分解方法可以達到很好的預測性能,但不能做出像User-based CF那樣符合人們習慣的推薦解釋(即跟你品味相似的人也購買了此商品)。在數學意義上,分解出的結果是正是負都沒關系,只要保證還原后的矩陣元素非負並且誤差盡可能小即可,但負值元素往往在現實世界中是沒有任何意義的。比如圖像數據中不可能存在是負數的像素值,因為取值在0~255之間;在統計文檔的詞頻時,負值也是無法進行解釋的。因此提出帶有非負約束的矩陣分解是對於傳統的矩陣分解無法進行科學解釋做出的一個嘗試。

其中, 分解的兩個矩陣中的元素滿足非負約束。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM