天天看點

好友推薦算法

社交網絡中,好友推薦随處可見,這裡探讨好友推薦是如何做的。

1、三元閉包理論 

說到好友推薦,就不得不談三元閉包理論。 

三元閉包定義:在一個社交圈内,若兩個人有一個共同好友,則這兩個人在未來成為好友的可能性就會提高。 

舉例說明,若B、C有一個共同好友A,且B、C不認識,則B、C成為好友的幾率會增加 

這個理論直覺自然,可以從機會、信任、動機上來解釋: 

1、B、C是A的朋友,那麼B、C見面的機會會增加,如果A花時間和B、C相處,那麼B、C可能會是以有機會認識 ;

2、在友誼形成過程中,基于B、C都是A好友的事實,假定B、C都知道這點,這會為他們提供陌生人之間所缺乏的基本信任 ;

3、A有将B、C撮合為好友的動機:如果B、C不是朋友,可能會為A和B、C的友誼造成潛在的壓力 。

兩個人共同好友的多少決定這兩個人關系的強弱,基于共同好友的多少,就可以進行好友推薦。 

1)共同好友數 

好友推薦算法

其中,Neighbor(i)表示i的好友,也就是網絡拓撲上的鄰居節點 

通過對共同好友數排序,即可産生一個好友推薦清單。 

2)對雙方好友數權重 

為消除雙方好友數差距,可以除以雙方好友數進行權重,也就是傑卡德系數,計算公式如下: 

好友推薦算法

3)對共同好友權重 

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

好友推薦算法

上式中,通過除以每個共同好友的好友數進行權重,如果好友數相差過大,需要通過開方、對數等方式進行處理,如下: 

好友推薦算法
好友推薦算法

下面是y=x,y= x^0.5,y=log2x 的曲線:

好友推薦算法

可以看出,使用開方、對數都可以有效消除內插補點過大的影響。 

2、Facebook 

Facebook的資料表明:好友關系建立中,擁有10個共同好友是隻有1個共同好友的12倍。 

好友推薦算法

Facebook在共同好友的基礎上,加入了時間次元; 

基于一個假設:使用者對新添加的好友更感興趣。如圖:f1和f2是使用者u的好友,相對于很久之前添加的好友f2,

f1是近期添加,使用者對f1近期添加的好友更感興趣。 

好友推薦算法

基于這樣的假設,Facebook出了一個經驗公式,如下:

好友推薦算法

從這個公式可以看到,對比對共同好友權重的公式,增加了時間特征:

好友推薦算法

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

下面是x^a的圖,可以直覺感受下衰減的程度: 

好友推薦算法

根據這個經驗公式能直接計算出好友推薦的得分,也可以作為一維特征與其他特征一起做回歸。 

3、其他 

一般情況下,使用二度好友(好友的好友)作為推薦的候選集。

假設平均每人有150個好友,差不多有22500個二度好友,資料量基本滿足推薦候選集的需求,并且資料表明,絕大部分(92%左右)的好友關系都建立在二度空間。 

基于三元閉包理論進行好友推薦,推薦的使用者至少有一個共同好友,也變相的确定使用二度好友進行推薦。 

繼續閱讀