PageRank算法

PageRank由来

                      在PageRank发明之前,搜索引擎采用的还是最原始的关键字匹配技术,于是呢在搜索结果中经常会遇到「挂羊头卖狗肉」的垃圾网站,对这些网站,当时的Yahoo采用还是人工清理的方法。这时候Google的两位创始人Page和Brin就在想,有没有一种算法,能够给出网页重要性的排序呢?这样就可以优先推荐重要网页,而让那些垃圾网页石沉大海了。

                      Page和Brin发现,网页的超链接结构中就蕴含了重要程度的信息。由于一个网页的超链接指向的主要是与其内容相关的网页,那么我们不难想象,如果有许多网页都同时指向某一个网页,这个网页就一定非常重要。
PageRank算法_第1张图片
PageRank的核心思想:

  • 如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是PageRank值会相对较高
  • 如果一个PageRank值很高的网页链接到一个其他的网页,那么被链接到的网页的PageRank值会相应地因此而提高

PageRanks实现

                      首先,我们将Web做如下抽象:1、将每个网页抽象成一个节点;2、如果一个页面A有链接直接链向B,则存在一条有向边从A到B(多个相同链接不重复计算边)。因此,整个Web被抽象为一张有向图。

现在假设世界上只有四张网页:A、B、C、D,其抽象结构如下图:
这里写图片描述

                      当一个用户停留在某页面时,跳转到页面上每个被链页面的概率是相同的。例如,上图中A页面链向B、C、D,所以一个用户从A跳转到B、C、D的概率各为1/3。设一共有N个网页,则可以组织这样一个N维矩阵:其中i行j列的值表示用户从页面j转到页面i的概率。这样一个矩阵叫做转移矩阵(Transition Matrix)。
PageRank算法_第2张图片
下面的转移矩阵M对应上图:

M=PA>APA>BPA>CPA>DPB>APB>BPB>CPB>DPC>APC>BPC>CPC>DPD>APD>BPD>CPD>D=01/31/31/31/2001/2100001/21/20 M = [ P A − > A P B − > A P C − > A P D − > A P A − > B P B − > B P C − > B P D − > B P A − > C P B − > C P C − > C P D − > C P A − > D P B − > D P C − > D P D − > D ] = [ 0 1 / 2 1 0 1 / 3 0 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 0 0 ]

然后,设初始时每个页面的rank值为1/N,这里就是1/4。按A-D顺序将页面rank为向量v:
V0=1/41/41/41/4 V 0 = [ 1 / 4 1 / 4 1 / 4 1 / 4 ]

注意,M第一行分别是A、B、C和D转移到页面A的概率,而v的第一列分别是A、B、C和D当前的rank,因此用M的第一行乘以v的第一列,所得结果就是页面A最新rank的合理估计,同理,Mv的结果就分别代表A、B、C、D新rank:

V1=MV0=01/31/31/31/2001/2100001/21/201/41/41/41/4=9/245/245/245/24 V 1 = M V 0 = [ 0 1 / 2 1 0 1 / 3 0 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 0 0 ] [ 1 / 4 1 / 4 1 / 4 1 / 4 ] = [ 9 / 24 5 / 24 5 / 24 5 / 24 ]

最终收敛为:
Vn=MV0V1...Vn1=01/31/31/31/201/2000011/21/200............=3/92/92/92/9 V n = M V 0 ∗ V 1 ∗ . . . ∗ V n − 1 = [ 0 1 / 2 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 0 0 1 / 3 0 1 0 ] [ . . . . . . . . . . . . ] = [ 3 / 9 2 / 9 2 / 9 2 / 9 ]

算法小问题:

                      要满足收敛性,需要具备一个条件:图是强连通的,即从任意网页可以到达其他任意网页
否者使用矩阵连续相乘就会出现两种问题:1.终止点问题;2.陷阱问题
这里写图片描述
                      1.如果有些网页不指向其他网页(可能是垃圾网页),如果按照上面的计算,上网者到达这样的网页后便走投无路、四顾茫然,导致前面累计得到的转移概率被清零,这样计算下去得到的概率分布向量所有元素几乎为0。
                      2.上网者跑到C网页后,就像跳进了陷阱,陷入了漩涡,再也不能从C中出来,将最终导致概率分布值全部转移到C上来,这使得其他网页的概率分布值为0,从而整个网页排名就失去了意义。
PageRank算法_第3张图片

改进:

解决终止点问题和陷阱问题
地址栏输入而跳转到各个网页的概率是1/n;
上网者每一步查看当前网页的概率为a,那么从浏览器地址栏跳转的概率为(1-a)

V=aMV+(1a)e V ′ = a M V + ( 1 − a ) e

这里写图片描述
[注]采用矩阵相乘, 不断迭代,直到迭代前后概率分布向量的值变化不大,一般迭代到30次以上就收敛了,取e为所有分量都为1/n的列向量。真的web结构的转移矩阵非常大,目前的网页数量已经超过100亿, 转移矩阵是100亿*100亿的矩阵,直接按矩阵乘法的计算方法不可行,需要借助Map-Reduce的计算方式来解决。

借助Map-Reduce的计算方式 参考链接:PageRank算法–从原理到实现

算法总结:

PageRank算法的缺点
这是一个天才的算法, 原理简单但效果惊人。 然而, PageRank算法还是有一些弊端。
第一, 没有区分站内导航链接。 很多网站的首页都有很多对站内其他页面的链接, 称为站内导航链接。 这些链接与不同网站之间的链接相比,肯定是后者更能体现PageRank值的传递关系。
第二, 没有过滤广告链接和功能链接(例如常见的“分享到微博”)。这些链接通常没有什么实际价值, 前者链接到广告页面, 后者常常链接到某个社交网站首页。
第三, 对新网页不友好。一个新网页的一般入链相对较少,即使它的内容的质量很高,要成为一个高PR值的页面仍需要很长时间的推广。

参考链接:

PageRank算法 —主要参考使用
浅析PageRank算法 —背景介绍的很清楚,通俗易懂
PageRank算法–从原理到实现 —有算法的实现部分,很值得阅读

你可能感兴趣的:(算法基础,机器学习)