好友推荐算法-基于关系的推荐

时间:2022-10-06 21:57:45

最近在搞社交网络的算法,前面简单叙述了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的一个经验参数,需要根据具体情况进行调整。