推薦系統學習筆記Part3 矩陣分解模型

2021-10-25 05:23:20 字數 2741 閱讀 9671

2.2 funksvd

2.3 biassvd

2.4 funksvd演化的其他矩陣分解演算法

3. 程式設計實現

推薦系統中最為主流與經典的技術之一是協同過濾技術(collaborative filtering),它是基於這樣的假設:使用者如果在過去對某些專案產生過興趣,那麼將來他很可能依然對其保持熱忱。

其中協同過濾技術又可根據是否採用了機器學習思想建模的不同劃分為基於記憶體的協同過濾(memory-based cf)與基於模型的協同過濾技術(model-based cf)。其中基於模型的協同過濾技術中尤為矩陣分解(matrix factorization)技術最為普遍和流行,因為它的可擴充套件性極好並且易於實現,下面將梳理下推薦系統**現過的經典的矩陣分解方法。

對於推薦系統來說存在兩大場景即評分**(rating prediction)top-n推薦(item recommendation,item ranking)。評分**場景主要用於評價**,比如使用者給自己看過的電影評多少分(movielens),或者使用者給自己看過的書籍評價多少分(douban)。其中矩陣分解技術主要應用於該場景。top-n推薦場景主要用於購物**或者一般拿不到顯式評分資訊的**,即通過使用者的隱式反饋資訊來給使用者推薦乙個可能感興趣的列表以供其參考。其中top-n推薦場景為排序任務,因此需要排序模型來對其建模。這裡則側重於評分**方面。

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

其中,推薦系統的評分**場景可看做是乙個矩陣補全的遊戲,矩陣補全是推薦系統的任務,矩陣分解是其達到目的的手段。因此,矩陣分解是為了更好的完成矩陣補全任務。之所以可以利用矩陣分解來完成矩陣補全的操作,那是因為基於這樣的假設:假設ui矩陣(user-iterm)是低秩的,即在大千世界中,總會存在相似的人或物,即物以類聚,人以群分,然後我們可以利用兩個小矩陣相乘來還原它。

矩陣分解的原理

所以矩陣分解的原理就是找到這兩個小矩陣,即使用者興趣和物品的隱向量表達,用這兩個小矩陣的乘積來表示評分矩陣。這時候就可以基於這兩個矩陣去**某個使用者對某個物品的評分了。 然後基於這個評分去進行推薦。

當然提到矩陣分解,人們首先想到的是數學中經典的svd(奇異值)分解,公式如下:

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

kk 個因子來表示它。

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

前面的 svd首先需要填充矩陣,然後再進行分解降維,同時由於需要求逆操作(複雜度o(n^3)),存在計算複雜度高的問題,所以後來simon funk提出了funksvd的方法,它不在將矩陣分解為3個矩陣,而是分解為2個低秩的使用者專案矩陣,同時降低了計算複雜度:

它借鑑線性回歸的思想,通過最小化觀察資料的平方來尋求最優的使用者和專案的隱含向量表示。同時為了避免過度擬合(overfitting)觀測資料,又提出了帶有l2正則項的funksvd:

以上兩種最優化函式都可以通過梯度下降或者隨機梯度下降法來尋求最優解。

在funksvd提出來之後,陸續又提出了許多變形版本,其中相對流行的方法是biassvd,它是基於這樣的假設:某些使用者會自帶一些特質,比如天生願意給別人好評,心慈手軟,比較好說話,有的人就比較苛刻,總是評分不超過3分(5分滿分);同時也有一些這樣的專案,一被生產便決定了它的地位,有的比較受人們歡迎,有的則被人嫌棄,這也正是提出使用者和專案偏置項的原因;項亮給出的解釋是:對於乙個評分系統有些固有屬性和使用者物品無關,而使用者也有些屬性和物品無關,物品也有些屬性與使用者無關,具體的**公式如下:

其中, μ

μμ 為整個**的平均評分,是真個**的基調; b

ub_u

bu​ 為使用者的評分偏置,u

iu_i

ui​代表某個使用者的評分基調, 為專案的被評分偏置,代表某個專案的屬性基調。

參見:

嵌入式系統學習筆記 Part 3

arm處理器具有9種基本定址方式。1.暫存器定址 2.立即定址 3.暫存器移位定址 4.暫存器間接定址 5.基址定址 6.多暫存器定址 7.堆疊定址 8.塊拷貝定址 9.相對定址 暫存器定址 運算元的值在暫存器中,指令中的位址碼字段指出的是暫存器編號,指令執行時直接取出暫存器值來操作 立即定址 立即...

Python學習筆記 part 3

ide vscode python版本 python3.6 學習教材 python程式設計從入門到實踐 人民郵電出版社 操作列表 for a in b 構建了python的for迴圈,迴圈方式為每次從列表b中取出乙個元素存入a。例如 idiols chen ju liu for idiol in i...

Gentoo安裝筆記(part3

此安裝筆記是按照gentoo中文手冊上實際操作記下來的,使用的是宿主機ubuntu9.04 virtualbox3.04,在virtualbox3.04中按預設屬性建立了乙個gentoo虛擬機器。使用gentoo minimal映像檔案安裝。6.開始安裝gentoo 1 選擇乙個合適的映象站點 mi...