推荐算法-矩阵分解
相關(guān)地址
https://www.cnblogs.com/mafeng/p/7912229.html
https://zhuanlan.zhihu.com/p/35262187
矩陣分解是一個非常優(yōu)雅的推薦算法,因為當(dāng)設(shè)計到矩陣分解時,我們通常不會太多地區(qū)思考哪些項目將停留在所得到矩陣的列和行中。但是其使用這個推薦引擎,我們清楚地看到,u是第i個用戶的興趣向量,v是第j個電影的參數(shù)向量。
所以我們可以通過u和v的點(diǎn)積來估算x(第i個用戶對第j個電影的評分)。我們用已知的分?jǐn)?shù)構(gòu)建這些向量,并使用它們來預(yù)測未知的得分。例如在矩陣分解之后,Ted的向量是(1.4?,?.8),電影A的向量是(1.4,.9),那電影A-Ted的得分為1.4*1.4+0.8*0.9=2.68分。
對于推薦系統(tǒng)來說存在兩大場景即評分預(yù)測(rating?prediction)與Top-N推薦(item?recommendation,item?ranking)。評分預(yù)測場景主要用于評價網(wǎng)站,比如用戶給自己看過的電影評分多少(MovieLens)。其中矩陣分解技術(shù)主要應(yīng)用于該場景。Top-N推薦場景主要用于購物網(wǎng)站或者一般拿不到顯示評分信息的網(wǎng)站,即通過用戶的隱式反饋信息來給用戶推薦一個可能感興趣的列表以供其參考。其中該場景為排序任務(wù),因此需要排序模型來對其建模。因此,我們接下來關(guān)心預(yù)測任務(wù)。
對于評分預(yù)測任務(wù)來說,我們通常將用戶和項目表示為二維矩陣的形式,其中矩陣中的某個元素表示對應(yīng)用戶對于相應(yīng)項目的評分,1-5分表示喜歡的程度逐漸增加,?表示沒有過評分記錄。推薦系統(tǒng)評分預(yù)測任務(wù)可看做是一個矩陣補(bǔ)全(Matrix?Completion)的任務(wù),即基于矩陣中已有的數(shù)據(jù)來補(bǔ)充矩陣中沒有產(chǎn)生過記錄的元素。值得注意的是,這個矩陣是非常稀疏的(Sparse),稀疏度一般能達(dá)到90%以上,因此如何根據(jù)極少的觀測數(shù)據(jù)來較準(zhǔn)確的預(yù)測未觀測數(shù)據(jù)一直以來都是推薦系統(tǒng)領(lǐng)域的關(guān)鍵問題。
其中,推薦系統(tǒng)的評分預(yù)測場景可看做是一個矩陣補(bǔ)全的游戲,矩陣補(bǔ)全是推薦系統(tǒng)的任務(wù),矩陣分解時其達(dá)到目的的手段。因此,矩陣分解是為了更好的完成矩陣補(bǔ)全任務(wù)。之所以可以利用矩陣分解來完成矩陣補(bǔ)全任務(wù),那是因為基于這樣的假設(shè):假設(shè)UI矩陣是低秩的,即在大千世界中,總會存在相似的人或物,即物以類聚,人與群分,然后我們可以利用兩個小矩陣相乘來還原它。
下面是一些常用的分解姿勢:
????SVD分解的形式為3個矩陣相乘,左右兩個矩陣分別表示用戶/項目隱含銀子矩陣,中間矩陣為奇異值矩陣并且是對角矩陣,每個元素非負(fù)性、并且逐漸減小。因此我們可以只需要錢k個因子來表示它。
如果想運(yùn)用SVD分解的話,有一個前提要求矩陣是稠密的,即矩陣?yán)锏脑匾强?#xff0c;否則就不能運(yùn)用SVD分解。很顯然我們的任務(wù)不能使用SVD,所以一般的做法是先用均值或者其他統(tǒng)計方法來填充矩陣,然后再運(yùn)用SVD分解降為。
剛才提到的PureSVD首先需要填充矩陣,然后進(jìn)行分解降維,同時由于需要求你操作(復(fù)雜度O(n^3)),存在計算復(fù)雜度高問題,所以后來Simon?Funk提出了FunkSVD的方法,它不在將矩陣分解為3個矩陣,而是分解為2個低秩的用戶項目矩陣,同時降低了計算復(fù)雜度。(但是里面涉及到?梯度下降和隨機(jī)梯度下降法)
3.PMF?(?https://blog.csdn.net/shuaishuai3409/article/details/50822550?)???
PMF是對與FunkSVD的概率解釋版本。
4.還有很多算法。不一一描述了,大家需要的時候記得要都看看,然后作對比并且結(jié)合著自己的項目實際情況進(jìn)行分析選擇:BiasSVD?、SVD++?、timeSVD?、NMF?、WMF?、LLORMA?、SRui?、ConvMF?、NCRPD-MF
總結(jié)
- 上一篇: 设计模式复习-访问者模式
- 下一篇: 推荐算法-聚类-K-MEANS