基于用戶的協(xié)同過濾是怎么推薦電影的?
我們平時(shí)在瀏覽電商、視頻等網(wǎng)站時(shí),網(wǎng)頁一般會有一個(gè)“猜你喜歡”,也就是”智能推薦系統(tǒng)“,雖然一般來說推薦的不是很準(zhǔn)確,但是程Sir還是研究了一下這個(gè)玩意是怎么弄出來的……今天說一說最簡單的一個(gè)實(shí)現(xiàn)方法,叫做基于用戶的協(xié)同過濾。
假設(shè)有幾個(gè)人分別看了如下電影并且給電影有如下評分(5分***,沒看過的不評分),我們目的是要向A用戶推薦一部電影:

協(xié)同過濾的整體思路只有兩步,非常簡單:尋找相似用戶,推薦電影
尋找相似用戶
所謂相似,其實(shí)是對于電影品味的相似,也就是說需要將A與其他幾位用戶做比較,判斷是不是品味相似。有很多種方法可以用來判斷相似性,(與我之前寫的K-Means文章中判斷兩點(diǎn)是否類似的方法是一致的)這篇文章用“歐幾里德距離”來做相似性判定。
我們把每一部電影看成N維空間中的一個(gè)維度,這樣每個(gè)用戶對于電影的評分相當(dāng)于維度的坐標(biāo),那么每一個(gè)用戶的所有評分,相當(dāng)于就把用戶固定在這個(gè)N維空間的一個(gè)點(diǎn)上,然后利用歐幾里德距離計(jì)算N維空間兩點(diǎn)的距離:每一個(gè)電影的評分求差值,然后求每個(gè)差值的平方,然后求平方的和,然后在開平方。距離越短說明品味越接近。本例中A只看過兩部電影(《老炮兒》和《唐人街探案》),因此只能通過這兩部電影來判斷品味了,那么計(jì)算A和其他幾位的距離:

然后我們做一個(gè)變換,變換方法為:相似性 = 1/(1+歐幾里德距離),這個(gè)相似性會落在【0,1】區(qū)間內(nèi),1表示完全品味一樣,0表示完全品味不一樣。這時(shí)我們就可以找到哪些人的品味和A最為接近了,計(jì)算后如下:
相似性:B-0.27,C-0.28,D-0.27,E-0.50,F(xiàn)-0.25,G-0.47
可見,E的口味與A最為接近,其次是G
推薦電影
要做電影加權(quán)評分推薦。意思是說,品味相近的人對于電影的評價(jià)對A選擇電影來說更加重要,具體做法可以列一個(gè)表,計(jì)算加權(quán)分:

把相似性和對于每個(gè)電影的實(shí)際評分相乘,就是電影的加權(quán)分

加權(quán)后,還要做少量的計(jì)算:總分是每個(gè)電影加權(quán)分的總和,總相似度是對這個(gè)電影有評分的人的相似性綜合,推薦度是總分/總相似性,目的是排除看電影人數(shù)對于總分的影響
結(jié)論在最終一行,就是電影的推薦度(因?yàn)槭歉鶕?jù)品味相同的人打分加權(quán)算出的分,可以近似認(rèn)為如果A看了這部電影,預(yù)期的評分會是多少)。
有了電影的加權(quán)得分,通常做法還要設(shè)定一個(gè)閾值,如果超過了閾值再給用戶推薦,要不怎么推薦都是爛片,如果這里我們設(shè)置閾值為4,那么最終推薦給A的電影就是《尋龍?jiān)E》。
我們現(xiàn)在的做法是向用戶推薦電影。當(dāng)然還可以從另外角度來思考:如果我們把一開始的評分表的行列調(diào)換,其他過程都不變,那么就變成了把電影推薦給合適的受眾。因此,要根據(jù)不同場景選擇不同的思考維度。