1. 程式人生 > >推薦演算法之相似性推薦

推薦演算法之相似性推薦

前文介紹了協同過濾演算法和基於內容的推薦演算法

協同過濾演算法要求要有很多使用者,使用者有很多操作

基於內容的推薦演算法使用者可以不用很多,但是使用者的操作也要有很多

但是,如果要推薦給新使用者(使用者的操作不多),應該要怎樣推薦呢?這裡就要用到相似性推薦了

相似性推薦定義:對於新使用者A,沒有ta的歷史行為資料,在ta點選了item-X的場景下,可以將與item-X最相似的item集合推薦給新使用者A。

問題轉化為,如何用一種通用的方法,表達item之間的相似性。

仍然以電影推薦為例子,相似性推薦演算法執行步驟:

1.找到使用者瀏覽過的某電影

2.定義這些電影的具體內容,假設我們以{導演,型別,男主,女主,男配,女配,地區,語言,時長}為維度來定義(這點跟基於內容的推薦演算法一樣)

3.對每個維度設立權值,並且對於同個key不同的value直接設定不同的分數(且稱為相似度評分吧),例如:

我們認為,權值分配是{導演1,型別2,男主3,女主4,男配5,女配6,地區7,語言8,時長9}(維度後面跟的是權值)

假設使用者瀏覽過的電影男主為男主1,而另一部電影,假設男主也是男主1,則男主項得10*3分;假設是男主2,則得8*3分;是男主3,則得5*3分,以此類推

具體的權值和值與值之間的分數可以自己定

4.基於步驟3,拿到分數最高的電影,即為要推薦的電影

具體再看一下

(1)找使用者瀏覽過的電影,假設為電影A

(2)定義這些電影的具體內容,假設定為

{導演1,型別1,男主1,女主1,男配1,女配1,地區1,語言1,時長1}

(3)對每個維度設立權值,並且對於同個key不同的value直接設定不同的分數

為簡單起見,假設我們所取的維度+權值為{導演1,型別2,男主3,女主4,男配5,女配6,地區7,語言8,時長9},

假設所有的維度裡,滿分都為10(即值相同記為10分)

型別1和型別2相似度評分為8分

型別1和型別3的相似度評分為2分

男主1和男主2的相似度評分為9分

男主1和男主3的相似度評分為8分

(4)拿到分數最高的電影

假設我們待推薦的電影只有2部(實際當然不可能),

電影B:{導演1,型別2,男主3,女主1,男配1,女配1,地區1,語言1,時長1}

電影C:{導演1,型別3,男主2,女主1,男配1,女配1,地區1,語言1,時長1}

電影B的推薦評分:1*10+2*8+3*8+4*10+5*10+6*10+7*10+8*10+9*10=440

電影C的推薦評分:1*10+2*2+3*9+4*10+5*10+6*10+7*10+8*10+9*10=431

電影B的推薦評分大於電影C的推薦評分,所以給使用者推薦電影B

相似性推薦,原理大致如上,要說明的是:
(1)由於沒有使用者歷史行為積累,不是個性化推薦,所以所有使用者的推薦結果都是相同的
(2)一般來說,距離公式確實是線性的
(3)一般來說,每個維度的權重不一樣
(4)這個線性公式,以及維度的權重,都可以通過機器學習訓練出來

參考文章:http://mp.weixin.qq.com/s/KROc9G_kAs8_vquKQKJIFw