基於矩陣分解的協同過濾算法

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度學習實戰(不定時更新)


矩陣分解發展史

TraditionalSVD:將矩陣分解爲三個矩陣,中間的爲奇異值矩陣
缺點:矩陣必須稠密,在工程中無法應用

LFM FUNK SVD:將一個矩陣分解爲兩個矩陣,其中一個是用戶-隱含特徵矩陣,另一個是物品-隱含特徵矩陣

BiasSVD:在原來的FUNK SVD基礎上加入了偏置項

SVD++:在BiasSVD的基礎上添加了用戶的隱式反饋信息
顯示反饋指的用戶的評分這樣的行爲,隱式反饋指用戶的瀏覽記錄、購買記錄、收聽記錄等。
SVD++是基於這樣的假設:在BiasSVD基礎上,認爲用戶對於項目的歷史瀏覽記錄、購買記錄、收聽記錄等可以從側面反映用戶的偏好。

基於內容的推薦

畫像:構建物品或用戶的特徵,本質上就是給用戶或物品貼標籤

基於矩陣分解的CF算法

矩陣分解發展史

Traditional SVD:

通常SVD矩陣分解指的是SVD(奇異值)分解技術,在這我們姑且將其命名爲Traditional SVD(傳統並經典着)其公式如下:

Traditional SVD分解的形式爲3個矩陣相乘,中間矩陣爲奇異值矩陣。如果想運用SVD分解的話,有一個前提是要求矩陣是稠密的,即矩陣裏的元素要非空,否則就不能運用SVD分解。

很顯然我們的數據其實絕大多數情況下都是稀疏的,因此如果要使用Traditional SVD,一般的做法是先用均值或者其他統計學方法來填充矩陣,然後再運用Traditional SVD分解降維,但這樣做明顯對數據的原始性造成一定影響。

FunkSVD(LFM)

剛纔提到的Traditional SVD首先需要填充矩陣,然後再進行分解降維,同時存在計算複雜度高的問題,因爲要分解成3個矩陣,所以後來提出了Funk SVD的方法,它不在將矩陣分解爲3個矩陣,而是分解爲2個用戶-隱含特徵,項目-隱含特徵的矩陣,Funk SVD也被稱爲最原始的LFM模型

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

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

BiasSVD:

在FunkSVD提出來之後,出現了很多變形版本,其中一個相對成功的方法是BiasSVD,顧名思義,即帶有偏置項的SVD分解:

它基於的假設和Baseline基準預測是一樣的,但這裏將Baseline的偏置引入到了矩陣分解中

SVD++:

人們後來又提出了改進的BiasSVD,被稱爲SVD++,該算法是在BiasSVD的基礎上添加了用戶的隱式反饋信息:

顯示反饋指的用戶的評分這樣的行爲,隱式反饋指用戶的瀏覽記錄、購買記錄、收聽記錄等。

SVD++是基於這樣的假設:在BiasSVD基礎上,認爲用戶對於項目的歷史瀏覽記錄、購買記錄、收聽記錄等可以從側面反映用戶的偏好。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章