1. 程式人生 > >好友推薦演算法-基於關係的推薦

好友推薦演算法-基於關係的推薦

最近在搞社交網路的演算法,前面簡單敘述了pagerank的相關以及graphx的實現,現在簡單介紹好友推薦演算法,每當我們在QQ的新增好友等的時候,下面總會出現騰訊推薦給我們的好友,你會發現推薦的好友大多都是你某個好友的好友(即二度好友),而且其中還有一些比較詳細的規則,下面簡單介紹:
一、六度分割理論:
1967年,美國哈佛大學的心理學教授Stanley Milgram(1933-1984)想要描繪一個連結人與社群的人際聯絡網,做過一次連鎖信實驗,結果發現了”六度分隔”現象。六度分隔(Six Degrees of Separation)現象(又稱為“小世界現象”small world phenomenon),可通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過六個人你就能夠認識任何一個陌生人。”
“六度分隔”說明了社會中普遍存在的“弱紐帶”,但是卻發揮著非常強大的作用。有很多人在找工作時會體會到這種弱紐帶的效果。 通過弱紐帶人與人之間的距離變得非常“相近。
若每個人平均認識260人,其六度就是260^6=1,188,137,600,000。消除一些節點重複,那也幾乎覆蓋了整個地球人口若干多多倍。 ——摘錄自wikilb
二、三元閉包論
說到好友推薦,就不得不談三元閉包理論。
三元閉包定義:在一個社交圈內,若兩個人有一個共同好友,則這兩個人在未來成為好友的可能性就會提高。估計這個大家都深有體會
1)、共同好友數:sum(x,y) = |Set(neighbor(i)) & Set((neighbor(i))|  
  其中,Neighbor(i)表示i的好友,也就是網路拓撲上的鄰居節點通過對共同好友數排序,即可產生一個好友推薦列表
2)、對雙方好友數加權
為消除雙方好友數差距,可以除以雙方好友數進行加權,也就是傑卡德係數,計算公式如 下:  這裡寫圖片描述

    

3)對共同好友加權
在1)2)中,相當於對每個共同好友一視同仁,都貢獻1分,但是共同好友中,有些人好友多,有些好友少,當某個共同好友的好友數較少時,這個共同好友應該更加重要,所以可以通過除以每個共同好友的好友數進行加權。

這裡寫圖片描述
上式中,通過除以每個共同好友的好友數進行加權,如果好友數相差過大,需要通過開方、對數等方式進行處理,如下:
這裡寫圖片描述
Facebook在共同好友的基礎上,加入了時間維度;
基於一個假設:使用者對新新增的好友更感興趣。如圖:f1和f2是使用者u的好友,相對於很久之前新增的好友f2,f1是近期新增,使用者對f1近期新增的好友更感興趣。
這裡寫圖片描述

基於這樣的假設,Facebook出了一個經驗公式,如下:
這裡寫圖片描述


從這個公式可以看到,對比對共同好友加權的公式,增加了時間特徵:
這裡寫圖片描述

時間相差越大,權重越小。其中,δ u,fi 為u與fi建立好友關係的時間, δ fi,fof 為fi與fof建立好友關係的時間,-0.3為懲罰因子,是Facebook的一個經驗引數,需要根據具體情況進行調整。