Google的Page-Rank

Page-Rank是Google最核心的算法,用于给每个网页价值评分,是Google“在垃圾中找黄金”的关键算法,这个算法成就了今天的Google

例如有四个网页,1有链接指向2、3、4,2有链接指向3、4,3有链接指向4,4有链接指向2,如下图如示。矩阵S怎么来的呢:矩阵的每一行代表一个网页,每一列也代表一个网页;值为0表示没有链接,非0表示有链接。网页1中没有链接指向网页1,所以1行1列的值为0,网页1中有链接指向网页2,所以2行1列的值为非0,同理,3行1列、4行1列的值也为非0,最后2行1列、3行1列、4行1列3个非0平分网页1的权重值,即每个为
1/3;同理得出第2、3、4列的各个元素

 


S 是源矩阵
U 是一个全部元素都是 1 的矩阵
n 是节点数量,以上图为例 n=4
α
是权重,值在 0 到 1 之间( google 的工程师会不时对其进行调整,使网页评分值更合理)
G是google矩阵,n行n列

q是G的特征向量,n行1列,q中的第一个元素就是页面1的评分,以此类推


q怎么算呢,可以通过迭代来算出:
事先定义任意向量q1,然后开始迭代:G*q1=q2,G*q2=q3,G*q3=q4
 ,这样一直迭代下去一定会是收敛的(google已经证明),即到后面会有G*qn=qn+1,而qn与qn+1之间的差别非常非常小。我们可以事先定义一个阀值,如里这个阀值小于qn与qn+1之间的距离,就停止迭代,然后把qn+1拿过来近似作为特征向量q.

数学上看来,计算PR很简单,而实际上呢,没那么容易。假设仅仅只有一百万个网页,google矩阵就会有一万亿个元素,那它的特征矩阵怎么算呢,事实上单台服务器根本就没法算,因为内存不够大,而且每迭代一次所需时间太久太久。所以用单台服务器来算话,这个算法是实现不了的,只能在数学上证明算法可行。

单台计算机没法算,那采用分布式集群可以吗,事实证明是可以的。比如我们将google矩阵的第1、2列分配到第一台服务器,3、4、5列分配到第二台服务器,如此这样,将所有列分配下去(在现实里可以理解为网页其实都是分布在服务器节点上的,每个节点上都存放若干的网页,从网页可以分析出它有哪些外链指向出来,因此google矩阵中的这一列在这个节点上是绝对可以算出来的)。然后在第一台服务器节点上计算第1列*q1 加上 第2列*q1,第二台服务器上也是如此计算3、4、5列分别乘以q1再相加。每台服务器计算完以后通过网络通讯将结果传输到指定的汇总服务器相加汇总。这样就算出了q2,汇总服务器再将q2传回到每台服务器重复之前的计算,这样来迭代计算出最终的特征向量qn。

这种用分散的节点来分负荷进行计算的思想就是Map-Reduce。我们把一个巨大的任务通过Map映射到各个节点来进行分布式计算(每一个节点只要分担其中的一小块负荷);每个节点算出值以后都送到统一的节点进行汇总,汇总的过程我们称之为Reduce。

PS:事实上Google的PR算法非常复杂,需要考虑的因素很多,比如白宫网站链接到网页A和个人博客链接到网页A,显然这两个链接的价值是不一样的。

转载于:https://my.oschina.net/zc741520/blog/357883

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值