Python基于随机游走模型的PageRank算法及应用

article/2025/8/23 16:16:37

资源下载地址:https://download.csdn.net/download/sheziqiong/86812933
资源下载地址:https://download.csdn.net/download/sheziqiong/86812933

基于随机游走模型的 PageRank 算法及应用

一、课题背景介绍

1.1 随机游走模型

随机游走也称随机漫步,其概念接近于布朗运动,可以看作布朗运动的理想数学状态。随机游走最早由 Karl Pearson 于 1905 年提出,它是一种不规则的变动形式,在变动过程当中的每一步都是随机的,下一步运动仅由当前所处的状态决定,每一次变动都不会影响过去的状态,即具有“无记忆性”,可以用马尔科夫链刻画。随机游走模型是一类重要的随机系统模型,在直线上的随机游走也称为一维随机游走,根据不同的数学条件限制分为无限制、带吸收壁、带反射壁等类别。

以无限制的随机游走为例,设有一个质点在数轴上随机游动,每隔单位时间t移动一次,每次只能向左或向右移动x单位,或原地不动,假设质点在 0 时刻位置为 a,向右移动的概率为 p,向左移动概率为 q,原地不动的概率为 r,有 p,q,r 均大于 0,且p + q + r = 1,每次移动互相独立,用Xn表示质点 n 次移动后的位置,则{Xn, ≥ 0}为一马尔科夫链,转移概率pi,i+1 = , ,1 = , = r其余的pij = 0。著名的一维随机游走问题有赌徒输光问题和酒鬼失足问题。

随机游走也可以应用于图上,成为基于图的随机游走模型,给定一个包含节点和边的图,确定出发点,随机选择图上的一个邻居节点,移动到邻居节点上,然后将当前节点作为初始点,重复上述过程,则这样选出的一系列节点就构成了一个随机游走过程,如图 1 所示。

在这里插入图片描述

图 1 基于图的随机游走

1.2 PageRank 算法的来源

本次大作业主要研究的 PageRank 问题,就是一种基于图的随机游走问题。在搜索引擎最初出现的时候,多采用的是分类目录的方法,即人工对网页进行分类并整理出高质量的网站。后来随着网页数量越来越多,人工分类难以实现,搜索引擎开启了文本检索的功能,即用户输入关键词,算法根据网页与关键词的相关程度来进行推荐,但常常有网页通过不断重复同一个关键词来提高自己的搜索率,于是两位谷歌的创始人提出了 PageRank 算法,对网页重要性进行排序。想象一个悠闲的上网者,他首先打开一个初始网页,浏览了数分钟后,随机选择当前界面上的一个链接,点进另一个网页浏览,如此反复,PageRank 就是该上网者分布在不同网页的概率。算法借鉴了通过论文引用次数来评判论文质量的方法,PageRank 的核心思路有以下两点:

若一个网页被很多其他网页链接到,则该网页较为重要,PageRank 值较高

若一个 PageRank 值较高的网页链接到其他网页,则被链接到的网页 PageRank 值也会相应地提高

本次课题首先对 PageRank 算法进行研究和实现,之后尝试将其拓展应用到其他领域。

二、PageRank 算法

2.1 问题建模

由上述算法来源的介绍可知,PageRank 问题被提出的背景是互联网和搜索引擎的发展,在网页发展的早期,搜索引擎需要对不同网页的重要性进行排序,以此确定在搜索结果中网页序列向用户呈现的先后顺序。为了解决这个问题,PageRank 算法由此定义了网页的 PR 值:

PR 值越高,此网页的重要性越高,也就越应该被优先呈现。

原初描述:如果用 = {}表示站点之间的邻接矩阵(是 01 矩阵, = 1表示引用 了, = 0表示没有引用。)。则一个站点的值可以描述为:2.1.1

在这里插入图片描述

其中()是站点的出链总数。

修正 1:在实际情况中,站点对不同站点的引用程度(比如链接的位置、大小)可能是 不同的,所以用邻接矩阵来描述问题并不准确。为了进一步地描述问题,用转移矩阵来 替代邻接矩阵。 = {}表示从节点 j 到节点 i 的转移概率,因此有∑ = 1。那么节点 i 的 PR 值即所有进入 i 的节点的 PR 值的加权相加。

在这里插入图片描述

令 = [(1), (2) … ()] ,则上式可以写成向量形式:

在这里插入图片描述

修正 2:在实际情况中,可能存在终止点问题和陷阱问题。终止点问题是指,在互联网上可能有一些网页,它们不链接到任何一个页面,用户到达此页面后无法点击跳转到其他网页,导致前面得到的转移概率被清零,这样下去,最终得到的概率分布几乎都为 0;而陷阱问题是指一个网页不存在到其他网页的链接,只链接到自身,这样用户达到该网页后只能不断循环点开此网页,导致该网页概率逐渐趋于 1,而其他网页节点概率分布趋于零。

因此需要注意的是,在实际上网过程中,用户不会总是持续点击网页,而有可能在某个阶段放弃点击,直接输入站点网址进入其他页面。如果用来表示在 n 时刻各个站点的概率分布的话,{, ≥ 0}是一个马尔科夫链。如果用户以概率持续点击,以概率1 放弃浏览,那么之间存在迭代关系:

在这里插入图片描述


在这里插入图片描述

和0唯一决定。

2.2 解存在的条件

跟据《应用随机过程》中的定理 3.5.6,离散马尔科夫链存在平稳分布的充分条件是马尔科夫链是不可约遍历链。下面分别说明这两个条件满足的情况:

不可约:不可约只有在转移矩阵 S 满足一定条件时才可以达到。由于
在这里插入图片描述
,后一项不对连通性做出贡献,因此 A 的不可约性仅仅取决于 S 的不可约性。当 S 满足对任意两个状态都存在 k 使() > 0时,定义的状态空间才是不可约的。

遍历链:马尔科夫链是遍历链要求转移概率矩阵为素矩阵,即存在 k 使得 > 0。当 A 是不可约矩阵时,由于对任意,都能找到(,) > 0,可以取为(,), ≤ , , ≤ 的最小 公约数,则此时 > 0。

2.3 求解方法

下面假设满足以上两个条件。

特征值法

平稳分布满足:在这里插入图片描述

也即是矩阵关于特征值 1 的特征向量。只要求解特征向量就可以解得平稳分布。

解析法


在这里插入图片描述
代入,可以得到上述问题的解析解表达式:

在这里插入图片描述

迭代法

解析解中的求逆运算当矩阵阶数高是较难求解的。因此,也可以用迭代的方法逐次逼近。

在这里插入图片描述

的收敛值即为原问题的解。

三、实验仿真

3.1 迭代法 python 代码实现

这里采用迭代法进行求解,假定的网页之间链接关系如图 2 所示,共有 A-E 五个节点, 首先给每个网页随机赋予初始的 PR 值,此处统一设置为 1/N,N 为总网页数,即初始 PR 均 为 0.2,之后按照公式+1 = 不断迭代计算,其中 = ( + 1 ),直到满足终止条 件|+1 | < 停止,此时的 PR 值为最终所求。具体流程图如下所示。

在这里插入图片描述

图 2 设定的网页链接关系

在这里插入图片描述

图 3 迭代法程序流程

最终结果如下所示,与解析法计算的结果一致,改变初始 PR 值对结果影响不大。绘制结果如图 4,节点大小反映了相应 PR 值的高低,观察下列结果,可以看到节点 E 的 PR 值最高,这与其被最多网页链接到的事实相符,而被高 PR 值的节点 E 链接到的节点 A PR 值也较高,很好地体现了 PageRank 算法的两点核心思想。
在这里插入图片描述

在这里插入图片描述

图 4 仿真结果

3.2 MapReduce 方法实现

在上述迭代算法中,只有 5 个网页节点,经过二十多次的迭代就能得到最终结果,但在实际应用中,网页总数可以达到百亿个,单纯用上述算法显然不能应对如此庞大的计算量,于是需要使用 MapReduce 方法,分布式计算大规模网页的 PageRank。MapReduce 方法包含了 Map 和 Reduce 两个过程,其中 Map 指对集合里的每个目标应用同一个操作,Reduce 指遍历 Mapping 返回的集合中的元素并返回一个综合的结果,如此可以把大规模计算部署到多个计算机上进行,大大提高运算效率,具体流程如下图。

在这里插入图片描述

图 5 MapReduce 算法思路[5]

同样用 MapReduce 对 3.1 中设计的网页结构进行了仿真,得到的结果与迭代法相同。

3.3 存在的问题及改进

PageRank 算法存在一些明显的缺点,如没有过滤掉界面上的广告链接和功能链接,没有区分导航链接,一些网页是专门的导航页面,上面有很多其他站点的链接,这种链接对网页重要性的影响显然应该比其他链接要小,而后者更能体现出 PageRank 值的传递关系。同时,该算法对新网页不太友好,一般新网页上线后入链较少,即使其重要性很高,仍需要一段时间进行推广,而一些旧网页会随时间变得过时,但很多旧网页不会被删掉,它们在过去长时间中积累了很高的 PR 值,会给搜索带来麻烦。为了应对这种情况,TimedPageRank 算法被提出,该方法在 PageRank 的基础上加了一个时间维度,它不再将阻尼系数α设为常量,而是引入一个随时间递减的函数f(t)(0 ≤ f(t) ≤ 1)来惩罚旧网页,此处 t 为该网页上次更新时间与当前时间的差值。

此外,还有人提出了 TrustRank 算法,TrustRank 最初用于检测垃圾网站,其主要原理是先通过人工判断来识别出高质量的页面,作为“种子”页面,与“种子”页面直接连接的页面更有可能是高质量网页,TR 值较高,与“种子”页面连接越远,TR 值逐渐降低。通常,将 PR 值与 TR 值结合起来可以更加准确地判断网页的重要性。

四、PageRank 在其它领域的应用——以神经科学为例

人类大脑的神经系统连接是极为重要我们又知之甚少的网络。因此很多的网络模型被应用到人类大脑神经连结的建模上,PageRank 算法就是其中之一。在采集到一定脑区的神经活动时间序列之后,PageRank 算法被用作衡量一个体素或核团的重要性。

4.1 PageRank 衡量核团的全局中心性

在 Zuo 2011[1]的工作中,作者对 fMRI 成像中的体素(4mm)计算了两两体素之间的相关性。每个体素的时间信息表示为(),计算两个时间序列之间 Pearson 相关系数。

在这里插入图片描述

(,)组成的矩阵称为相关矩阵, = ()。对矩阵以0(如取 0.0001)为阈值做硬 阈值分割,得到连结矩阵 = ()

在这里插入图片描述

而后作者衡量了节点在不同尺度上的重要性,包括局部重要性(度)、亚尺度重要性(子 图分析)、全局重要性(特征值分析和 page-rank 算法)。作者采用的是以一定概率游走的 page-rank 模型(未做归一化)

在这里插入图片描述

其中()是 j 的出链的数量。

由于神经回路的建模中涉及的体素数量大于 1000,故作者还采用了 inner-outer 迭代来 加速算法。在这项研究中,作者发现核团的局部重要性会随着年龄的增加而降低,但是全局 的重要性却不会出现这种随年龄的下降。这说明局部回路和全局回路在生理上的作用可能会 有不同。

4.2 PageRank 衡量核团的层级关系

在 Crofts 2011[2]的工作中,作者用 PageRank 算法来挖掘神经网络当中的层级关系。 “层级关系”指的是在网络结构当中存在的“分发式”、“下行式”的结构。在一个给定的网络 中,一个节点的层级由下述优化目标决定:

在这里插入图片描述

其中 = ()是对 1,2…N 的一个重排列,是邻接矩阵中的元素, = 1表示节点 i 到 节点 j 有连结, = 0表示节点 i 到节点 j 没有连接。元素重排完成之后,编号为 1 的结点 的层级最高,编号为 N 的结点的层级最低。

PageRank 是这个优化问题的求解方法之一,即用 PageRank 的 PR 值的大小来指定这里 的 P 值。P 值由以下等式给出:

在这里插入图片描述

其中是 0 到 1 之间的常数, = (()),即由每个节点的出度构成的对角阵。这个 式子相当于在经典 PageRank 算法中,令转移矩阵 S 为邻接矩阵的行归一化矩阵。如果令 = 1,则在足够小时,上式可以用泰勒展开式表示:

在这里插入图片描述

除了用 PageRank 求解之外,此优化目标还可以用 Katz 分数、交流度(communicability)等方法求解。作者在线虫的神经元连接上验证比较了这些方法,发现 PageRank 相较其它方法在优化目标上表现不佳。作者认为这可能是模型的不匹配和游走参数的错误带来的。这说明 PageRank 虽然有很强的普适性,但是也应该被小心妥善地运用到实际问题上。

资源下载地址:https://download.csdn.net/download/sheziqiong/86812933
资源下载地址:https://download.csdn.net/download/sheziqiong/86812933


http://chatgpt.dhexx.cn/article/P0bpOnUd.shtml

相关文章

图——随机游走算法

文章目录 推荐基本概念PageRankPersonalRankTextRankSimRank 推荐基本概念 其中用户user[A,B,C],物品item[a,b,c,d]&#xff0c;用户和物品有以下的关系 上述便是一个典型的二分图&#xff0c;我们用G(V,E)来表示&#xff0c;其中V为用户user和物品item组成的顶点集即[A,B,C,…

python二维随机游走_Python模拟随机游走图形效果示例

本文实例讲述了Python模拟随机游走图形效果。分享给大家供大家参考,具体如下: 在python中,可以利用数组操作来模拟随机游走。 下面是一个单一的200步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现。纯Python方式实现,使用了内建的 random 模块: # 随机游走 i…

随机游走 推荐系统论文阅读

emmmm本篇博客主要写了&#xff0c;自己阅读的一些论文&#xff0c;做了一些笔记&#xff0c;主要是记录。 基于深度随机游走的协同过滤推荐算法_刘靖凯 推荐算法&#xff1a;召回和排序 召回步骤常用的算法有协同过滤算法、隐语义算法 常用的协同过滤算法有基于用户的协同过…

理解随机游走

随机游走 基本思想 从一个或一系列顶点开始遍历一张图。在任意一个顶点&#xff0c;遍历者将以概率1-a游走到这个顶点的邻居顶点&#xff0c;以概率a随机跳跃到图中的任何一个顶点&#xff0c;称a为跳转发生概率&#xff0c;每次游走后得出一个概率分布&#xff0c;该概率分布…

随机游走问题

随机游走指的是在一个点以等可能的概率走向下一个点。 问题1&#xff1a; Link:https://www.luogu.com.cn/problem/P3232 题意&#xff1a;这道题其实相当于求每条边经过的期望次数。 思路&#xff1a;每条边经过的期望次数不好算&#xff0c;我们想到点经过的期望次数。于…

随机游走 Random Walk

随机游走&#xff08;英语&#xff1a;Random Walk&#xff0c;缩写为 RW&#xff09;&#xff0c;是一种数学统计模型&#xff0c;它是一连串的轨迹所组成&#xff0c;其中每一次都是随机的。[1][2]它能用来表示不规则的变动形式&#xff0c;如同一个人酒后乱步&#xff0c;所…

时间序列:时间序列模型---随机游走过程(The Random Walk Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 随机游走过程是一种特殊的ARMA序列。从分子运动到股价波动等现象都被建模为随机游走。 随机游走过程是AR(1)序列&#xff0c;而且,时间序列在时刻的值为&#xff1a; 随机游走过程本质上是到当前时间…

随机游走(Random Walk)算法

随机游走 英文&#xff1a;random walk 定义&#xff1a;随机游走&#xff0c;概念接近于布朗运动&#xff0c;是布朗运动的理想数学状态。 核心概念&#xff1a;任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律。 随机游走算法的基本思想是: 从一个或一系列顶点…

ArrayList分页Lists.partition遇到的坑

一、问题的发现 最近在用分布式任务powerjob的时候&#xff0c;发现了一个关于数组分页之后的序列化问题。事情是这样的&#xff0c;在我执行MapReduce模式的时候&#xff0c;发现了在生成子任务时报了com.esotericsoftware.kryo.kryo5.KryoException: Class cannot be created…

partition list java_Java之Lists.Partition项目中的使用

开心一笑 【媳妇儿问我:“孩子都快出生了,你名字想好了没呀?” 我说:“都想好了,要是生个儿子名字就叫“好帅” 媳妇儿问:“为什么呀?” 我说:“别人看到我就会说,好帅的爸爸。】 提出问题 Java之Lists.Partition在项目中的如何被使用??? 学习地址 解决问题 前言 具…

Lists.partition的使用和里面的坑

作用 partition(List list, int size): 将list集合按指定长度进行切分&#xff0c;返回新的List<List<??>>集合。 案例 引入pom文件 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><vers…

Lists.partition集合分组使用以及注意事项

1.介绍 Lists.partition是com.google.common.collect包下的一个方法。 作用是将目标集合按照传入的size分组。 2.使用场景 一般用于固定大小的集合处理&#xff0c;比如&#xff1a;我有两百个商品类型&#xff0c;要求前一百个一种处理方式&#xff0c;后一百个一种处理方…

Guava Lists.transform踩坑小记

1.问题提出 1.前段时间在项目中用到Lists.transform返回的List&#xff0c;在对该list修改后发现修改并没有反映在结果里&#xff0c;研究源码后发现问题还挺大。 下面通过单步调试的结果来查看Guava Lists.transform使用过程中需要注意的地方。 a.对原有的list列表修改会影响L…

Google guava工具类中Lists、Maps、Sets简单使用

Google guava Guava是对Java API的补充&#xff0c;对Java开发中常用功能进行更优雅的实现&#xff0c;使得编码更加轻松&#xff0c;代码容易理解。Guava使用了多种设计模式&#xff0c;同时经过了很多测试&#xff0c;得到了越来越多开发团队的青睐。Java最新版本的API采纳了…

Java常用工具类 : StringUtils、CollectionUtils、ArrayUtils、Lists、Maps等

文章目录 StringUtils引入依赖判断函数 (isNotBlank系列)大小写函数 (转换)删除函数 (remove)字符替换函数 (replace)拆分合并函数 (split)截取函数 (substring)删除空白函数 (trim)判断是否相等函数 (equals)是否包含函数 (contains) CollectionUtils集合判断函数并集、交集、…

Lists的使用

List&#xff08;接口&#xff09;顺序时List最重要的特性&#xff1a;它可保证元素按照规定的顺序排列。List为Collection添加了大量方法&#xff0c;以便我们在List中部插入和删除元素&#xff08;只推荐对LinkedList这样做&#xff09;。List也会生成一个ListIterator&#…

Lists 方法汇总

一、Lists.partition(List<T> list, int size) 将 list 集合按指定长度进行切分&#xff0c;返回新的List<List<T>>集合。 import com.google.common.collect.Lists; import org.junit.Test; import java.util.List;public class ListDemo {Testpublic voi…

LU分解的实现

LU分解是将矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。矩阵可以不是NxN的矩阵 一个可逆矩阵可以进行LU分解当且仅当它的所有子式都非零。如果要求其中的L矩阵&#xff08;或U矩阵&#xff09;为单位三角矩阵&#xff0c;那么分解是唯一的。同理可知&#xff0c;矩阵的L…

LU分解求线性方程组的解

LU分解是矩阵分解的一种&#xff0c;可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积。 LU分解可以用来求逆矩阵&#xff0c;解线性方程组等。本文将介绍LU分解求线性方程组的解。 1.定义 如果A是一个方阵&#xff0c;A的LU分解是将A分解成如下形式: 其中L,U分别为…

矩阵分析——LU分解

LU分解初步 矩阵的LU分解主要用来求解线性方程组或者计算行列式。在使用初等行变换法求解线性方程组的过程中&#xff0c;系数矩阵的变化情况如下&#xff1a; 由上可知&#xff1a; &#xff0c;其中U就是上面矩阵A经过行变换后的上三角矩阵&#xff0c;Eij表示将i行元素与j行…