PageRank算法介绍

pagerank算法的核心思想是,计算一个用户随机点击一个网站然后不停点击从而到达各个网站的概率。而一个网站的打开概率又取决于那些指向他自己的那些网站的概率,所以这个概率的计算是一个不断迭代的过程。

一个简单的例子:B,C,D同时指向A,我们认为,BCD的PR是0.25,那么A的PR值就是0.75

但是,如下图,如果网站D有3个外链,那么你从网站D跳到网站A的概率就不一定是100%了,这是我们要给它做一个权重衰减,我们给PR值除以3

这个模型可以写作以下公式:
PR(u)=∑v∈BuPR(v)L(v)PR(u) = \sum_{v \in B_u} \frac{PR(v)}{L(v)} PR(u)=v∈Bu​∑​L(v)PR(v)​
其中L表示结点的出度,BuB_uBu​是所有指向u的结点。然而一个用户在点击网页的时候是不会无限点下去了,他最终肯定会在某个结点上停止,于是,我们可以引入一个damping factor来表达这种关系,当你计算PR的时候,要乘一个衰减的系数来认为有一定概率会在上一个页面停止,而不会跳转到这个页面来。于是PR的公式可以改写成这样:
PR(pi)=1−dN+d∑pj∈M(pi)PR(pj)L(pj)PR(p_i) = \frac{1-d}{N} + d \sum_{p_j \in M(p_i)} \frac{PR (p_j)}{L(p_j)} PR(pi​)=N1−d​+dpj​∈M(pi​)∑​L(pj​)PR(pj​)​
d就是damping factor,d一般取0.85,N是结点数量,那个1-d/N是为了保证这个概率值在0到1之间。这个表达式可以写成矩阵的形式:
R=[PR(p1)PR(p2)⋮PR(pN)]\mathbf{R} = \begin{bmatrix} PR(p_1) \\ PR(p_2) \\ \vdots \\ PR(p_N) \end{bmatrix} R=⎣⎢⎢⎢⎡​PR(p1​)PR(p2​)⋮PR(pN​)​⎦⎥⎥⎥⎤​

R=[(1−d)/N(1−d)/N⋮(1−d)/N]+d[ℓ(p1,p1)ℓ(p1,p2)⋯ℓ(p1,pN)ℓ(p2,p1)⋱⋮⋮ℓ(pi,pj)ℓ(pN,p1)⋯ℓ(pN,pN)]R\mathbf{R} = \begin{bmatrix} {(1-d)/ N} \\ {(1-d) / N} \\ \vdots \\ {(1-d) / N} \end{bmatrix} +d \begin{bmatrix} \ell(p_1,p_1) & \ell(p_1,p_2) & \cdots & \ell(p_1,p_N) \\ \ell(p_2,p_1) & \ddots & & \vdots \\ \vdots & & \ell(p_i,p_j) & \\ \ell(p_N,p_1) & \cdots & & \ell(p_N,p_N) \end{bmatrix} \mathbf{R} R=⎣⎢⎢⎢⎡​(1−d)/N(1−d)/N⋮(1−d)/N​⎦⎥⎥⎥⎤​+d⎣⎢⎢⎢⎢⎡​ℓ(p1​,p1​)ℓ(p2​,p1​)⋮ℓ(pN​,p1​)​ℓ(p1​,p2​)⋱⋯​⋯ℓ(pi​,pj​)​ℓ(p1​,pN​)⋮ℓ(pN​,pN​)​⎦⎥⎥⎥⎥⎤​R

其中l(pi,pj)l(p_i,p_j)l(pi​,pj​)表示结点pip_ipi​对pjp_jpj​的影响程度,比如在例子2,里面,l(B,A)=1/2l(B,A)=1/2l(B,A)=1/2.写成矩阵形式,这里P其实相当于邻接矩阵:
R=dPR+1−dN1\mathbf{R} = d P\mathbf{R} + \frac{1-d}{N} \mathbf{1} R=dPR+N1−d​1
我们只要求解这个R,就能得到每个结点的PR值。

Ranking Users in Social Networks with Higher-Order Structures

这里介绍一种改进的方法,这是在社交网络上的应用,在计算PR的时候,其实我们默认了,在一个网站上以相同概率跳转到其他的结点,但这其实在社交网络里面是有问题的。看下面的例子。

用户1同时关注了2,3,4在三个用户,但是,很显然,用户1其实是更信任用户2多过用户4的,因为用户1同时关注了2跟3.

所以我们要做的就是,考虑这种三角结构:

一共有7种。举个例子,当我们考虑M6时。

对于结点3而言,M6结构一共出现了2次,分别是153,123.所以矩阵第1行第3列等于2.

上面的这个考虑了三角结构的邻接矩阵可以用下面的公式计算。其中B=W⊙WTB=W\odot W^TB=W⊙WT,U=W−BU=W-BU=W−B,其中⊙\odot⊙是对应元素相乘

最后对于PR的计算公式:
R=dPR+1−dN1\mathbf{R} = d P\mathbf{R} + \frac{1-d}{N} \mathbf{1} R=dPR+N1−d​1
我们用
HMk=αW+(1−α)WMkH_{M_k}=\alpha W+(1-\alpha)W_{M_k} HMk​​=αW+(1−α)WMk​​
来替换掉P就能取得很好的效果。

扩展资料

其实PR只是目前页面排序的一个小小的权重,这是目前谷歌最新的企鹅算法

参考资料

Zhao, Huan, et al. “Ranking Users in Social Networks with Higher-Order Structures.” (AAAI 2018)

PageRank-wiki

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。

PageRank算法在社交网络上的应用相关推荐

  1. 图算法(一):Pagerank算法(网页排名算法)【适用场景:网页排序、社交网络重点人物发掘等】【一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性】

    一.概述 PageRank算法又称网页排名算法,是一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性. 如果一个网页被很多其他网页链接到,说明这个网页比 ...

  2. hadoop上的pageRank算法

    简单的pageRank实现参考:http://wlh0706-163-com.iteye.com/blog/1397694 较为复杂的PR值计算以及在hadoop上的实现:http://deathsp ...

  3. 复现经典:《统计学习方法》第21章 PageRank算法

    第21章 PageRank算法 本文是李航老师的<统计学习方法>一书的代码复现.作者:黄海广 备注:代码都可以在github中下载.我将陆续将代码发布在公众号"机器学习初学者&q ...

  4. 在微博中应用PageRank算法

    这个想法很早就有了,因为我是做搜索引擎背景的,能够深刻的理解PageRank算法在搜索引擎中的重要性,绝对的核心技术之一.不过,这篇博客,并不打算介绍PageRank算法的原理,而是,让我们来看看,这 ...

  5. 【复杂网络建模】——Python可视化重要节点识别(PageRank算法)

    目录 一.复杂网络建模 二.建模的算法 三.使用PageRank算法进行网络重要节点识别 1.PageRank算法 2.基于PageRank算法的ER网络重要节点识别 3.基于PageRank算法的小 ...

  6. 翻译: 网页排名PageRank算法的来龙去脉 以及 Python实现

    PageRank ( PR ) 是Google 搜索用来在其搜索引擎结果中对网页进行排名的算法.它以"网页"一词和联合创始人拉里佩奇的名字命名.PageRank 是衡量网站页面重要 ...

  7. [转]PageRank算法

    原文引自: 原文引自: http://blog.csdn.net/hguisu/article/details/7996185 感谢 1. PageRank算法概述 PageRank,即网页排名,又称 ...

  8. 张洋:浅析PageRank算法

    本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...

  9. PageRank算法--从原理到实现

    本文将介绍PageRank算法的相关内容,具体如下: 1.算法来源 2.算法原理 3.算法证明 4.PR值计算方法 4.1 幂迭代法 4.2 特征值法 4.3 代数法 5.算法实现 5.1 基于迭代法 ...

  10. PageRank算法并行实现

    算法为王系列文章,涵盖了计算机算法,数据挖掘(机器学习)算法,统计算法,金融算法等的多种跨学科算法组合.在大数据时代的背景下,算法已经成为了金字塔顶的明星.一个好的算法可以创造一个伟大帝国,就像Goo ...

最新文章

  1. ZYNQ 的三种GPIO :MIO EMIO AXI_GPIO
  2. MySQL也有潜规则 – Select 语句不加 Order By 如何排序?
  3. Jenkins任务失败,发送邮件通知
  4. 关于codeforces加载慢
  5. 仿花生小说蓝色小说网站导航网站源码
  6. Gradle Issue: OutOfMemoryError: PermGen space
  7. 单片机第13课:串口通信---向计算机发送数据
  8. Jmeter插件安装及使用
  9. 毕业设计第一周的计划
  10. mysql php教程笔记_Mysql学习笔记(一)
  11. 内网穿透工具之NATAPP使用教程
  12. Mac火爆游戏---英雄联盟LOL
  13. java is alphabetic_java中的java.lang.Character类 – 方法| 2 - Break易站
  14. 计算机word画铁路,在word中画铁路线.docx
  15. android音乐播放器实验报告总结,音乐播放器设计实验报告.docx
  16. c1-02西班牙的语言,【图片】考试的同学看过来~DELE-C1两个月准备(实用经验+超详细流程)转【西班牙语吧】_百度贴吧...
  17. 2018年的总结和2019年的期望
  18. HazelEngine 学习记录 - Layers
  19. 【AI Studio平台基本操作】课程回看
  20. N个数全排列的第M个排列是?(全排列)

热门文章

  1. Solidworks CAM入门教程,简单生成雕刻机刀路,经验分享
  2. 介绍几款iPhone手机原型设计的工具
  3. 数字图像处理——相关检测
  4. 关于手眼标定的误差计算
  5. linux设备驱动模型架构分析 一
  6. node2vec python_论文笔记 | node2vec
  7. node2vec之小黑尝试
  8. rust 使用fltk 的小问题
  9. iPad最新型笔刷,足足五种分类,几百款
  10. zbrush史上最全笔刷下载43G(1200个)