相關位址
矩陣分解是乙個非常優雅的推薦演算法,因為當設計到矩陣分解時,我們通常不會太多地區思考哪些專案將停留在所得到矩陣的列和行中。但是其使用這個推薦引擎,我們清楚地看到,u是第i個使用者的興趣向量,v是第j個電影的引數向量。
所以我們可以通過u和v的點積來估算x(第i個使用者對第j個電影的評分)。我們用已知的分數構建這些向量,並使用它們來**未知的得分。例如在矩陣分解之後,ted的向量是(1.4 , .8),電影a的向量是(1.4,.9),那電影a-ted的得分為1.4*1.4+0.8*0.9=2.68分。
對於推薦系統來說存在兩大場景即評分**(rating prediction)與top-n推薦(item recommendation,item ranking)。評分**場景主要用於評價**,比如使用者給自己看過的電影評分多少(movielens)。其中矩陣分解技術主要應用於該場景。top-n推薦場景主要用於購物**或者一般拿不到顯示評分資訊的**,即通過使用者的隱式反饋資訊來給使用者推薦乙個可能感興趣的列表以供其參考。其中該場景為排序任務,因此需要排序模型來對其建模。因此,我們接下來關心**任務。
對於評分**任務來說,我們通常將使用者和專案表示為二維矩陣的形式,其中矩陣中的某個元素表示對應使用者對於相應專案的評分,1-5分表示喜歡的程度逐漸增加,?表示沒有過評分記錄。推薦系統評分**任務可看做是乙個矩陣補全(matrix completion)的任務,即基於矩陣中已有的資料來補充矩陣中沒有產生過記錄的元素。值得注意的是,這個矩陣是非常稀疏的(sparse),稀疏度一般能達到90%以上,因此如何根據極少的觀測資料來較準確的**未觀測資料一直以來都是推薦系統領域的關鍵問題。
其中,推薦系統的評分**場景可看做是乙個矩陣補全的遊戲,矩陣補全是推薦系統的任務,矩陣分解時其達到目的的手段。因此,矩陣分解是為了更好的完成矩陣補全任務。之所以可以利用矩陣分解來完成矩陣補全任務,那是因為基於這樣的假設:假設ui矩陣是低秩的,即在大千世界中,總會存在相似的人或物,即物以類聚,人與群分,然後我們可以利用兩個小矩陣相乘來還原它。
下面是一些常用的分解姿勢:
puresvd (
)svd分解的形式為3個矩陣相乘,左右兩個矩陣分別表示使用者/專案隱含銀子矩陣,中間矩陣為奇異值矩陣並且是對角矩陣,每個元素非負性、並且逐漸減小。因此我們可以只需要錢k個因子來表示它。
如果想運用svd分解的話,有乙個前提要求矩陣是稠密的,即矩陣裡的元素要非空,否則就不能運用svd分解。很顯然我們的任務不能使用svd,所以一般的做法是先用均值或者其他統計方法來填充矩陣,然後再運用svd分解降為。
funksvd (
)剛才提到的puresvd首先需要填充矩陣,然後進行分解降維,同時由於需要求你操作(複雜度o(n^3)),存在計算複雜度高問題,所以後來simon funk提出了funksvd的方法,它不在將矩陣分解為3個矩陣,而是分解為2個低秩的使用者專案矩陣,同時降低了計算複雜度。(但是裡面涉及到 梯度下降和隨機梯度下降法)
3.pmf (
)
pmf是對與funksvd的概率解釋版本。
4.還有很多演算法。不一一描述了,大家需要的時候記得要都看看,然後作對比並且結合著自己的專案實際情況進行分析選擇:biassvd 、svd++ 、timesvd 、nmf 、wmf 、llorma 、srui 、convmf 、ncrpd-mf
矩陣分解推薦演算法(LMF)
首先我們現在有乙個矩陣 r 其中 r 代表第 i 個使用者對第 j 個商品的喜愛程度。lmf 演算法認為每個商品上面都有一些隱因子,而顧客的喜愛程度是由這些隱因子來決定的。因此便可以將 r 分解成 p times q 的形式。矩陣 p 代表了這 m 個使用者對 f 個隱因子的喜愛程度,q 代表這 f...
推薦系統 04 矩陣分解演算法
netflix放出的比賽資料是評分資料,它是推薦系統中評分 模式。本次比賽中,矩陣分解模型大放異彩,最著名的是svd以及其各種變體。2.1 為什麼要矩陣分解 矩陣分解演算法,能很好的解決推薦系統中的評分 問題。其中,通常k比m和n小很多。k怎麼取?用k fold確定。2.2.基礎的svd演算法 sv...
轉推薦演算法 基於矩陣分解的推薦演算法
其中,u1 u5 表示的是5 個不同的使用者,d1 d4 表示的是4 個不同的商品,這樣便構成了使用者 商品矩陣,在該矩陣中,有使用者對每一件商品的打分,其中 表示的是使用者未對該商品進行打分。在推薦系統中有一類問題是對未打分的商品進行評分的 目前推薦系統中用的最多的就是矩陣分解方法,在netfli...