1.??矩陣分解做協(xié)同過(guò)濾是廣泛使用的方法
2.?遇到問(wèn)題:
????????在推薦系統(tǒng)中,常常遇到的問(wèn)題是很多用戶和物品組成的數(shù)據(jù)集,但是大多數(shù)用戶都很少對(duì)物品進(jìn)行評(píng)分。
3.目標(biāo):
????????對(duì)于每個(gè)用戶,我們的目標(biāo)是希望較準(zhǔn)確的預(yù)測(cè)出用戶對(duì)未評(píng)分物品的評(píng)分。
4.用途:
? ??????將評(píng)分高的物品推薦給目標(biāo)用戶
5.方法:
????????這個(gè)問(wèn)題我們有很多解決方法,本文用矩陣分解的方法來(lái)做
6.矩陣分解方法:
????????傳統(tǒng)的奇異值分解SVD
7.效果:
????????選擇部分較大的一些奇異值來(lái)同時(shí)進(jìn)行降維。較大的奇異值的個(gè)數(shù),一般會(huì)遠(yuǎn)遠(yuǎn)的小于用戶數(shù)和物品數(shù)
????????通過(guò)這種方法,我們可以將評(píng)分表里面所有沒(méi)有評(píng)分的位置得到一個(gè)預(yù)測(cè)評(píng)分。
8.傳統(tǒng)SVD的問(wèn)題:
????????SVD分解要求矩陣是稠密的,也就是說(shuō)矩陣的所有位置不能有空白。有空白時(shí)我們的矩陣M是沒(méi)法直接進(jìn)行SVD分解的
9.傳統(tǒng)SVD處理稀疏矩陣的方法:
????????對(duì)評(píng)分矩陣中的缺失值進(jìn)行簡(jiǎn)單的補(bǔ)全,比如用全局平均值或者用用戶物品平均值補(bǔ)全,得到補(bǔ)全后的矩陣
10.補(bǔ)全的效果:
????????推薦算法上還是較難使用,效率低。因?yàn)槲覀兊挠脩魯?shù)和物品一般都是超級(jí)大,隨便就成千上萬(wàn)了。這么大一個(gè)矩陣做SVD分解是非常耗時(shí)的。
11.改進(jìn)辦法:
????????FunkSVD算法用于推薦
12.如何改進(jìn):
????????FunkSVD是在傳統(tǒng)SVD面臨計(jì)算效率問(wèn)題時(shí)提出來(lái)的,既然將一個(gè)矩陣做SVD分解成3個(gè)矩陣很耗時(shí),同時(shí)還面臨稀疏的問(wèn)題,那么我們能不能避開稀疏問(wèn)題,同時(shí)只分解成兩個(gè)矩陣呢?也就是說(shuō),現(xiàn)在期望我們的矩陣M分解為:
????????Mm×n=Pm×k*Qk×n
13.如何求解矩陣P,Q:
????????采用了線性回歸的思想。我們的目標(biāo)是讓用戶的評(píng)分和用矩陣乘積得到的評(píng)分殘差盡可能的小,也就是說(shuō),可以用均方差作為損失函數(shù),來(lái)尋找最終的分解矩陣P和Q;
????????本質(zhì)就是訓(xùn)練Pi和Qj,使其接近輸入數(shù)據(jù)Mij,利用梯度下降法,加入正則化緩解過(guò)擬合。
14.在funkSVD上繼續(xù)改進(jìn):
????????BiasSVD算法用于推薦
15.BiasSVD改進(jìn)的情況:
????????增加了了場(chǎng)景因素,在loss中增加了新的參數(shù)
16.在biasSVD繼續(xù)改進(jìn):
????????SVD++算法用于推薦,進(jìn)一步做了增強(qiáng),這里它增加考慮用戶的隱式反饋
17.整體評(píng)價(jià):
????????小的推薦系統(tǒng)用矩陣分解應(yīng)該是一個(gè)不錯(cuò)的選擇。大型的話,則矩陣分解比起現(xiàn)在的深度學(xué)習(xí)的一些方法不占優(yōu)勢(shì)。
說(shuō)明:本文是總結(jié)此文的,內(nèi)容完全來(lái)自于下面的參考文獻(xiàn)
參考文獻(xiàn):