补课:PageRank
最近连续听到PageRank算法,久闻其名,不闻其详,心里虚得很,今儿补补课。
PageRank算法的网络资料非常全面,毕竟是将近二十年的经典算法,算法细节可以参考文末链接,这里简单说说我的理解。
PageRank要解决的问题是如何给网页排序,它的思路是,利用网页间的链接关系构造有向图,对有向图的所有节点做重要性排序。
重要性也可以理解为影响力,以一个分数的形式来表达,分数从高到低就构成了一个排序。
怎么定义影响力?从节点的流出和流入分别定义:对于节点A和B,如果指向A的节点多于指向B的节点,则A的分数更高;如果A的分数比B的分数更高,则A指向的节点比B指向的节点分数更高。
把上面的原则转化为迭代规则,以概率值表示分数,就可以把各节点的分数计算过程建模为一个Markov链的收敛过程,实现了这个收敛过程就计算出了图中各节点的分数。
当然,实际问题中要处理的细节还有很多,比如没有外链的网页如何处理,证明该模型是Markov过程等等,可以参考文末链接。
本质上讲,PageRank是给有向图的节点做重要性排序,比网页链接更常见的有向图是社交关系图,所以PageRank拿来做社交网络的节点排序应当也是可以的。
PageRank是工程思维的典型代表,建模思路简洁易懂,代码实现也几乎没有难度,唯一有深度的部分是Markov链的证明,这其实是随机过程中最常见最基础的证明题。
你瞧,就是这样一个简洁实用的算法,孵化出了一家伟大的公司,改变了世界。
这就是简洁的力量,工程的美。
参考文献:
https://www.cnblogs.com/rubinorth/p/5799848.html
http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf (提出PageRank算法的论文)