想學(xué)習(xí)推薦系統(tǒng),如何從小白成為高手(https://www.zhihu.com/question/23194692)里有一個(gè)回答說(shuō):
“關(guān)于推薦系統(tǒng),如果忘掉所有的公式和代碼,忘記所有的語(yǔ)言描述,腦海里就剩下幾張圖景,會(huì)是什么?
一張二維表格,一個(gè)拓?fù)鋱D,一條時(shí)間線。
這三幅圖景,是我看待推薦算法的三種視角,分享給大家便于理解?!?/p>
這其中的表格就是基于用戶對(duì)商品評(píng)分的表格。
正好前面有寫(xiě)過(guò)協(xié)同過(guò)濾和SVD一些算法,就能都串起來(lái)了:
協(xié)同過(guò)濾算法主要分為兩類,一類是基于鄰域的方法(neighborhood methods),另一類是隱語(yǔ)義模型(latent factor models)。
基于鄰域的方法就是協(xié)同過(guò)濾里最經(jīng)典的user-based和item-based:見(jiàn)前面的 http://m.itdecent.cn/p/23f03233e26c
基于隱語(yǔ)義模型的就是SVD的眾多方法:
SVD:需要填充到一個(gè)較為稠密的矩陣,然后奇異值分解,再取較大的k個(gè)奇異值對(duì)應(yīng)的m*k k*k k*n的三個(gè)矩陣,有點(diǎn)感覺(jué)不出這個(gè)的意義在哪,明明已經(jīng)用均值填充到稠密了,然后再基于這個(gè)填充的矩陣做SVD,弄一個(gè)近似出來(lái)
FunkSVD(又稱Latent Factor Model):找到合適的矩陣分解來(lái)最小化訓(xùn)練集的誤差,可以加上正則避免過(guò)擬合太嚴(yán)重,從此MF開(kāi)始大放異彩
BiasSVD:每個(gè)分?jǐn)?shù)可能有來(lái)自整體的bias,有來(lái)自用戶的bias,有來(lái)自商品本身的bias,把這些bias拿出來(lái),剩下的分?jǐn)?shù)再用矩陣分解的方式建模
SVD++(結(jié)合鄰域和BiasSVD):這里大概的思想是把每個(gè)分?jǐn)?shù)里可能來(lái)自領(lǐng)域的再拿出來(lái),并且也做矩陣分解,但是怎么分的我還沒(méi)弄太明白
加入時(shí)間信息的SVD:比如BiasSVD,就把每個(gè)值都看做時(shí)間的函數(shù),隨時(shí)間衰減。