1. 程式人生 > >矩陣分解(MATRIX FACTORIZATION)在推薦系統中的應用

矩陣分解(MATRIX FACTORIZATION)在推薦系統中的應用

前言

最近一段時間隱語義模型(Latent Factor Model,LFM)在推薦系統中的應用越來越廣泛,本文所介紹的矩陣分解方法也是基於這個隱語義模型。
這裡需要說明的一點是,這裡所說的矩陣分解並不是SVD,之前在這個問題糾結了很久,因為網上很多人還有周圍的人都把矩陣分解就當成了SVD,實際上SVD也是矩陣分解的一種技術(SVD在推薦系統中的應用見http://blog.csdn.net/wuyanyi/article/details/7964883,這篇才是真正的SVD推薦的方法,而其他很多網上所指的SVD就是本文所介紹的)。

基本思想

矩陣分解的思想簡單來說就是每一個使用者和每一個物品都會有自己的一些特性,用矩陣分解的方法可以從評分矩陣中分解出使用者——特性矩陣,特性——物品矩陣,這樣做的好處一是得到了使用者的偏好和每件物品的特性,二是見底了矩陣的維度。圖示如下:


用使用者對電影來舉例子就是:每個使用者看電影的時候都有偏好,這些偏好可以直觀理解成:恐怖,喜劇,動作,愛情等。使用者——特性矩陣表示的就是使用者對這些因素的喜歡程度。同樣,每一部電影也可以用這些因素描述,因此特性——物品矩陣表示的就是每一部電影這些因素的含量,也就是電影的型別。這樣子兩個矩陣相乘就會得到使用者對這個電影的喜歡程度。

形式化描述

由於評分矩陣的稀疏性(因為每一個人只會對少數的物品進行評分),因此傳統的矩陣分解技術不能完成矩陣的分解,即使能分解,那樣計算複雜度太高,不現實。因此通常的方法是使用已存在評分計算出出預測誤差,然後使用梯度下降調整引數使得誤差最小。
首先說明一些符號的含義:戴帽子的rui表示預測u對i的打分,qi表示物品i每個特性的歸屬度向量,pu表示使用者u對每個特性的喜歡程度的向量。因此,物品的預測得分為:


下面我們就需要根據已有的資料計算誤差並修正q和p使得誤差最小,誤差的表示方式如下:

(2)式子可以利用評分矩陣中存在的評分資料,使用隨機梯度下降方法進行引數的優化,在此不做介紹。注意第二項是正則式,是為了防止過擬合,具體原理也不太清楚。
計算完闡述後們對於未知的專案就可以使用(1)式子評分。

帶偏置的矩陣分解

上面的式子是最基本的矩陣分解思想,但實際情況下,卻並不是很好的衡量標準,比如有的網站中的使用者偏向評價高分;有一些使用者偏向評價高分(有的人比較寬容);有的物品被評價的分數偏高(也許由於等口碑原因)。因此在上面的式子中一般都會加入偏置項,u,bi,bu。綜合用下面的式子表示

結果預測式子變成如下:


誤差預測變成如下形式

帶標籤和歷史隱式反饋的矩陣分解

由於現實的評分矩陣特別稀疏,因此,為了使得資料更加稠密,下面加入了歷史的引述反饋資料(比如使用者瀏覽過瀏覽過某個電影就可以當做一定成的喜愛的正反饋),隱式反饋表現出來的偏好用下面的式子表示,其中xi表示歷史資料所表現出的偏好的向量,跟前面的向量維度相同。前面的權重表示這一項的可信任程度。

同樣,我們也可以使用使用者的標籤(比如年齡,性別,職業)推測使用者對每個因素的喜愛程度,形式化如下,ya表示標籤所表現出的偏好向量。

加入上面因素後的評分估計表示如下:

帶有時間因素的矩陣分解

現實生活中,我們每個人的愛好可能隨著時間的改變而改變,每個專案的平均評分也會改變。因此,專案的偏差(即專案高於平均分還是低於平均分)bi,使用者的評分習慣(即偏向於高分還是低分)bu,以及使用者的喜好矩陣pu都是時間的函式。為了更加準確的表達評分,都需要表示成為時間的函式形式,如下(這裡沒有考慮歷史標籤等資料):

小結

矩陣分解在推薦系統中現在用的很廣泛,主要是由於很好的擴充套件性,新的因素很容易新增到模型當中。並且網上有很多開源的庫實現演算法。
以上的內容根據這篇論文理解而來《MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS》