天天看點

基于使用者的協同過濾是怎麼推薦電影的?

基于使用者的協同過濾是怎麼推薦電影的?

我們平時在浏覽電商、視訊等網站時,網頁一般會有一個“猜你喜歡”,也就是”智能推薦系統“,雖然一般來說推薦的不是很準确,但是程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的電影就是《尋龍訣》。

我們現在的做法是向使用者推薦電影。當然還可以從另外角度來思考:如果我們把一開始的評分表的行列調換,其他過程都不變,那麼就變成了把電影推薦給合适的閱聽人。是以,要根據不同場景選擇不同的思考次元。

本文作者:程sir 程sir說

來源:51cto

繼續閱讀