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

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

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

把相似性和對于每個電影的實際評分相乘,就是電影的加權分

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