为了分享此篇文章,个人做了大量的工作,所以未经本人同意,请勿转载,在此表示感谢!
推荐系统有点类似搜索引擎,都是根据用户喜好,从众多内容筛选出复合用户兴趣的内容,然后再这这些内容进行排序后呈现给用户。
PageRank 的由来
PageRank 算法是由 Google 创始人 Larry Page 在斯坦福读大学时提出,又称 PR, 佩奇排名。主要针对网页进行排名,计算网站的重要性,优化搜索引擎的搜索结果。PR 值是表示其重要性的因子
甜品
我们在开始正确介绍 pageRank ,我们先聊一聊图,那么什么是图数据结构呢? 在今天我们许多实际问题可以用图数据结构来表示,例如互联网、社交网络都可以用图来表示。图数据在机器学习上有被广泛的应用。特别是推荐系统中,我们更多时候是在处理一种关系,找到人与商品之间关系。PageRank 算法是图的链接分析(link analysis)的代表性算法,属于图数据上的无监督学习方法。
PageRank 概述
首先我们需要明确什么是 PageRank ,PageRank 可以简单看成是一个函数,那么也就可以将 PageRank 看作一个模型,这个模型是建立在互联网基础上,PageRank 接收网络集合,会对每一个网页给出一个评估其重要程度的正数。
最初,PageRank 的算法作为计算互联网网页重要度的算法被提出。PageRank是定义在网页集合上的一个函数,对每个网页给出一个正实数,表示网页的重要程度,整体构成一个向量,PageRank值越高,网页就越重要,在互联网搜索的排序中可能就被排在前面。
一些基本概念
图的概念
在实际应用中许多数据都以图 (graph) 的形式存在,比如,互联网、社交网络都可以看作是一个图。图数据上的机器学习具有理论与应用上的重要意义。PageRank 算法是图的链接分析(link analysis)的代表性算法,属于图数据上的无监督学习方法。
有向图
有了图的概念之后,我们来介绍一下,什么是有向图(directed graph) <math xmlns="http://www.w3.org/1998/Math/MathML"> G ( V , E ) G(V,E) </math>G(V,E)
- <math xmlns="http://www.w3.org/1998/Math/MathML"> V V </math>V 表示节点
- <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E 表示有向边的集合
强连通图
比如,互联网就可以看作是一个有向图 ,每个网页是有向图的一个结点,网页之间的每一条超链接是有向图的一条边。从一个结点出发到达另一个结点,所经过的边的一个序列称为一条路径(path), 路径上边的个数称为路径的长度 。如果一个有向图从其中任何一个结点出发可以到达其他任何一个结点,就称这个有向图是强连通图(strongly connected graph)。
in-links 和 out-links
- in-links: 当在网页模型图中,一个网页(结点)接受到其他网页(结点)指向的边的数量称为 in-links , in-links 越多说明该网页越重要
- out-links: 一个网络结点向外指向其他结点的边的数量, 当一个质量高的网页指向(out-links)一个网页,说明这个被指的网页重要
例如图中的 A 结点 in-links 是 1 out-links 为 2, c 结点 in-links 为 2 而 out-links 为 3。
随机游走模型
随机游走模型 给定一个含有 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n 个结点的有向图,在有向图上定义随机游走(random walk) 模型,即一阶马尔可夫链,其中结点表示状态,有向边表示状态之间的转移,假设从一个结点到通过有向边相连的所有结点的转移概率相等。具体地,转移矩阵是一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n 阶矩阵 <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>M
<math xmlns="http://www.w3.org/1998/Math/MathML"> M = [ m i j ] n × n M = [m_{ij}]_{n \times n} </math>M=[mij]n×n
注意转移矩阵具有性质:
<math xmlns="http://www.w3.org/1998/Math/MathML"> m i j > 0 m_{ij} > 0 </math>mij>0
<math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ i = 1 n m i j = 1 \sum_{i=1}^n m_{ij} = 1 </math>∑i=1nmij=1
第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 行第 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 列的元素 <math xmlns="http://www.w3.org/1998/Math/MathML"> m i j m_{ij} </math>mij 取值规则如下:如果结点 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j 有 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 个有向边连出。
随机游走在某个时刻 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t 访问各个结点的概率分布就是马尔可夫链在时刻 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t 的状态分布,可以用一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n 维列向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> R t R_t </math>Rt 表示,那么在时刻 <math xmlns="http://www.w3.org/1998/Math/MathML"> t + 1 t+1 </math>t+1 访问各个结点的概率分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> R t + 1 R_{t+1} </math>Rt+1 满足。
算法推导
假设互联网是一个有向图,在其基础上定义随机游走模型,即一阶马尔可夫链,模拟浏览网页的人,在互联网上随机浏览网页的过程。前提是浏览网页的人在每个网页依照连接出去的超链接以等概率跳转到下一个网页,并在网上持续不断进行这样的随机跳转,这个过程形成一阶马尔可夫链。PageRank 表示这个马尔可夫链的平稳分布。每个网页的 PageRank 值就是平稳概率,这里 PageRank 可以缩写为 PR。
<math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( a ) t + 1 = ∑ j = 0 n P R t ( P j ) L ( P j ) PR(a){t+1} = \sum{j=0}^n \frac{PR_t(P_j)}{L(P_j)} </math>PR(a)t+1=∑j=0nL(Pj)PRt(Pj)
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R t ( P j ) PR_t(P_j) </math>PRt(Pj) 表示的是其他节点指向 <math xmlns="http://www.w3.org/1998/Math/MathML"> a a </math>a 节点的 <math xmlns="http://www.w3.org/1998/Math/MathML"> P R PR </math>PR 值
- <math xmlns="http://www.w3.org/1998/Math/MathML"> L ( P j ) L(P_j) </math>L(Pj) 表示的是其他节点出链数总和
- <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t 表示循环次数,这是因为我们通常会经过多次循环来得到一个相对比较稳定的 <math xmlns="http://www.w3.org/1998/Math/MathML"> P R PR </math>PR 值
假设 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 是一个大于 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 1 </math>1 的自然数,如果从有向图的一个结点出发返回到这个结点的路径的长度都是 <math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k 的倍数,那么称这个结点为周期性结点。 如果一个有向图不含有周期性结点,则称这个有向图为非周期性图 (aperiodic graph),否则为周期性图。
绘制一个表格,行表示每个网络结点,而列表示不同时刻,行和列交叉处位置为 t 时刻结点的权重,每一次迭代所有结点的权重和需要为 1。
0 | 1 | 2 | page rank | |
---|---|---|---|---|
A | ||||
B | ||||
C | ||||
D |
<math xmlns="http://www.w3.org/1998/Math/MathML"> P R t + 1 ( P i ) = ∑ P j P R t ( P j ) C ( P j ) PR_{t+1}(P_i) = \sum_{P_j} \frac{PR_t(P_j)}{C(P_j)} </math>PRt+1(Pi)=∑PjC(Pj)PRt(Pj)
在开始迭代前所有的结点 PageRank 都是形同的,所以给他们一个均值 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 / n 1/n </math>1/n n 为结点数
0 | 1 | 2 | page rank | |
---|---|---|---|---|
A | 1/4 | |||
B | 1/4 | |||
C | 1/4 | |||
D | 1/4 |
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( A ) = 1 / 4 3 PR(A) = \frac{1/4}{3} </math>PR(A)=31/4
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( B ) = 1 / 4 2 + 1 / 4 3 = 2.5 / 12 PR(B) = \frac{1/4}{2} + \frac{1/4}{3} = 2.5/12 </math>PR(B)=21/4+31/4=2.5/12
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( C ) = 1 / 4 2 + 1 / 4 1 = 4.5 / 12 PR(C) = \frac{1/4}{2} + \frac{1/4}{1} = 4.5/12 </math>PR(C)=21/4+11/4=4.5/12
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( D ) = 1 / 4 3 + 1 / 4 1 = 4 / 12 PR(D) = \frac{1/4}{3} + \frac{1/4}{1} = 4/12 </math>PR(D)=31/4+11/4=4/12
这里简单解释一个其他大家也就是自然清楚了,例如 A 几点,in-links 为 2 out-links 为 1 ,只有 C 结点指向 A 对于 C 结点来说 out-links 为 3 所以
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P R ( A ) = 1 4 × 1 3 PR(A) = \frac{1}{4} \times \frac{1}{3} </math>PR(A)=41×31
再以 B 结点为例,in-links 为 2 分别是 A 和 C ,其中 A out-links 为 2 而 C out-links 为 3 所以,
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P R ( B ) = 1 4 × 1 2 + 1 4 × 1 3 PR(B) = \frac{1}{4} \times \frac{1}{2} + \frac{1}{4} \times \frac{1}{3} </math>PR(B)=41×21+41×31
0 | 1 | 2 | page rank | |
---|---|---|---|---|
A | 1/4 | 1/12 | ||
B | 1/4 | 2.5/12 | ||
C | 1/4 | 4.5/12 | ||
D | 1/4 | 4/12 |
0 | 1 | 2 | page rank | |
---|---|---|---|---|
A | 1/4 | 1/12 | 1.5/12 | 1 |
B | 1/4 | 2.5/12 | 2/12 | 2 |
C | 1/4 | 4.5/12 | 4.5/12 | 4 |
D | 1/4 | 4/12 | 4/12 | 3 |
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( A ) = 4.5 / 4 3 = 1.5 / 12 PR(A) = \frac{4.5/4}{3} = 1.5/12 </math>PR(A)=34.5/4=1.5/12
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( B ) = 2.5 / 12 2 + 4.5 / 12 3 = 2 / 12 PR(B) = \frac{2.5/12}{2} + \frac{4.5/12}{3} = 2/12 </math>PR(B)=22.5/12+34.5/12=2/12
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( C ) = 1 / 4 2 + 1 / 4 1 = 4.5 / 12 PR(C) = \frac{1/4}{2} + \frac{1/4}{1} = 4.5/12 </math>PR(C)=21/4+11/4=4.5/12
- <math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( D ) = 1 / 4 3 + 1 / 4 1 = 4 / 12 PR(D) = \frac{1/4}{3} + \frac{1/4}{1} = 4/12 </math>PR(D)=31/4+11/4=4/12
<math xmlns="http://www.w3.org/1998/Math/MathML"> P R ( P i ; t + 1 ) = 1 − d N + d ∑ p j ∈ M ( p i ) P R ( p j ; t ) L ( p j ) PR(P_i;t+1) = \frac{1 - d}{N} + d \sum_{p_j \in M(p_i)} \frac{PR(p_j;t)}{L(p_j)} </math>PR(Pi;t+1)=N1−d+d∑pj∈M(pi)L(pj)PR(pj;t)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> 1 − 0.85 4 + 0.85 × ( 1.5 / 12 ) 1 − 0.85 4 + 0.85 × ( 2 / 12 ) 1 − 0.85 4 + 0.85 × ( 4.5 / 12 ) 1 − 0.85 4 + 0.85 × ( 4 / 12 ) \begin{aligned} \frac{1 - 0.85}{4} + 0.85 \times (1.5/12)\\ \frac{1 - 0.85}{4} + 0.85 \times (2/12)\\ \frac{1 - 0.85}{4} + 0.85 \times (4.5/12)\\ \frac{1 - 0.85}{4} + 0.85 \times (4/12)\\ \end{aligned} </math>41−0.85+0.85×(1.5/12)41−0.85+0.85×(2/12)41−0.85+0.85×(4.5/12)41−0.85+0.85×(4/12)
<math xmlns="http://www.w3.org/1998/Math/MathML"> ( 1 − 0.85 ) + 0.85 × 1 (1 - 0.85) + 0.85 \times 1 </math>(1−0.85)+0.85×1
想必上面过程已经清楚地列出算法计算流程。