介紹:機器學習
推薦系統中最爲主流與經典的技術之一是協同過濾技術(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網站
SVDspa
固然SVD分解的形式爲3個矩陣相乘,左右兩個矩陣分別表示用戶/項目隱含因子矩陣,中間矩陣爲奇異值矩陣而且是對角矩陣,每一個元素知足非負性,而且逐漸減少。所以咱們能夠只須要前 個因子來表示它。3d
若是想運用SVD分解的話,有一個前提是要求矩陣是稠密的,即矩陣裏的元素要非空,不然就不能運用SVD分解。很顯然咱們的任務還不能用SVD,因此通常的作法是先用均值或者其餘統計學方法來填充矩陣,而後再運用SVD分解降維。blog
公式以下排序
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之間;在統計文檔的詞頻時,負值也是沒法進行解釋的。所以提出帶有非負約束的矩陣分解是對於傳統的矩陣分解沒法進行科學解釋作出的一個嘗試。
其中, 分解的兩個矩陣中的元素知足非負約束。