PageRank笔记

1.算法概述

我们知道互联网的网页是通过超链接联系起来的,而这些超链接蕴含着重要的信息。互联网上的链接可以分为两类:一类链接用来对站点的大量信息进行组织,所以这类链接就指向同一站点内的页面;另一类链接则指向其他站点的页面,这种外向型超链接起到一种向目标网页隐式传递权威性的作用。例如,如果你的网页指向一个外部的一个站点的网页,这显然表明你相信这个外部站点包含了对你有用的、有一定质量的信息。因此,那些被许多网页指向的网页,相对而言,就更可能包含高权威性或高质量的信息。
PageRank就是利用这些链接形成的一个强有力的排名算法。PageRank依靠Web内在的民主性,把超链接形象地比如投票。如,一条从网页x到网页y的超链接可以认为是网页x投给了网页y一票。同时,PageRank不仅考虑网页获得的绝对票数(入链数目),它还对投票的那些网页进行区别对待。本身重要的网页投出的票权更大,那么得到它们投票的那些网页页变得更重要。
下面先阐述几个相关概念:
网页i的入链(in-links):那些指向网页i的来自于其他网页的超链接,通常不包括来自同一站点内网页的超链接。
网页i的出链(out-links):那些从网页i指向其他网页的超链接,通常不包括连到同一站点内网页的超链接。
排序声望的思想:
 从一个网页指向另一个网页的超链接是一种权威性的隐式传递,这样,网页i的入链越多,就表示它得到的声望越高。
 指向网页i的网页也是有自己的声望分数。对于网页i来说,指向它的网页中,那些高声望网页比低声望网页更重要。换言之,一个被其他重要网页指向的网页也是重要的。

2.票权的计算

我们以例子的形式来进行说明。假设假设有4个网页A、B、C、D,其连接图如下:

PageRank笔记_第1张图片

同时,由于每个页面只能票一次,所以B有1/2投到A,D也有1/2投到A,所以:


依此类推:

PageRank笔记_第2张图片

3.算法推导

同样我们接着上节的例子来演示算法的推导过程。假设当一个用户停留在某页面时,跳转到页面上每个被链页面的概率是相同的。例如,上图中A页面链向B、C、D,所以一个用户从A跳转到B、C、D的概率各为1/3。设一共有N个网页,则可以组织这样一个N维矩阵:其中i行j列的值表示用户从页面j转到页面i的概率。就可以得到Page矩阵:
PageRank笔记_第3张图片

由原Page矩阵S计算Google矩阵G的公式:


其中,S是原Page矩阵,n是网页节点总数,U是全1矩阵,是阻尼系数(默认取值0.85)。
按照以下迭代公式:

迭代PageRank向量,直到q收敛。

4.伪代码

PageRank伪代码:
计算Page矩阵
输出Google矩阵
重复R次

计算PageRank向量

返回PageRank向量

5.算法实现

Python代码:

from numpy import *
import numpy.linalg as np

#计算数据
def loadDataSet(path):
    dataMat = []
    fr = open(path)
    for line in fr.readlines():
        lineArr = line.strip().split(',')
        size = len(lineArr)
        tmp = []
        for i in range(size):
            tmp.append(float(lineArr[i]))
        dataMat.append(tmp)
    return dataMat


def pageRank(dataMat):
    dataMatrix = mat(dataMat)
    r, c = shape(dataMatrix)
    u = ones((r, c))
    googleMat = 0.85 * dataMatrix + 0.15 * 1 / r * u
    (old, q)= np.eig(googleMat)
    rank = mat(old).T
    for i in range(c):
        rank = dot(googleMat, rank)
#         print(rank)
    return rank


参考文献:

《数据挖掘十大算法》

http://blog.codinglabs.org/articles/intro-to-pagerank.html



你可能感兴趣的:(Machine,Learning,Machine,Learning,机器学习,PageRank)