文章目录

  • Random Walk
  • Random walk with start(RWR)
  • RWR的实现
    • 数学表达
    • classic实现
    • RWR的快速实现
      • Off-line流程
      • On-line查询流程
      • Λ ~ \tilde{\Lambda} Λ~的含义
    • !!!简化后的快速实现
      • off-line部分
      • on-line部分
      • 低秩近似的实现
        • 1. 特征值分解
        • !!!2. 分区低秩近似

Random Walk

随机过程中定义的随机游走是每过一个单位时间,游走点固定向左或向右移动一个单位

推广到多维,一般情况下是:
对于点 x 0 ∈ R N x_0\in R^N x0​∈RN,每个单位时间内:

  1. 随机生成一个n维向量 u u u
  2. 将其标准化为 u ′ = u ∑ i = 1 n u i 2 u'=\frac{u}{\sqrt{\sum_{i=1}^nu_i^2}} u′=∑i=1n​ui2​ ​u​
  3. 以可变步长 λ \lambda λ为幅度进行一次随机游动,即 x 1 = x 0 + λ u ′ x_1=x_0+\lambda u' x1​=x0​+λu′

对于图结构的数据,random walk是指,在一张图的任意一个顶点:

  • 遍历者以概率1-a游走到这个定点的邻居
  • 遍历者以a的概率跳跃到途中的任意一个顶点

这样的游走会以频率的方式体现出graph中每一个顶点被访问到的概率。

Random walk with start(RWR)

随机游走算法可以利用于检测整个图的概率分布,而RWR算法以及它的各种变体:

  • 在CV研究中适用于图像分割
  • 在graph结构中则适用于基于图结构中的一个base node,构建出它的邻居节点的分布情况。这一算法广泛应用于图结构的数据采样。

它的基本思想是:

  • 从一个或一系列base node开始遍历一张图
  • 在任意一个节点以1-a的概率移动到一个随机选择的邻点,以a概率跳回起点

RWR的实现

基于经典文章:Fast RandomWalk with Restart and Its Applications

符号定义:

数学表达

Input: The normalized weighted matrix W ~ \tilde{W} W~ and the starting vector e i ⃗ \vec{e_i} ei​ ​
Output: The ranking vector r i ⃗ \vec{r_i} ri​ ​

对于从指定位置( e i ⃗ \vec{e_i} ei​ ​)出发期望的遍历点位置 r i ⃗ \vec{r_i} ri​ ​,它的值表示为:
r i ⃗ = c W ~ r i ⃗ + ( 1 − c ) e i ⃗ \vec{r_i}=c\tilde{W}\vec{r_i}+(1-c)\vec{e_i} ri​ ​=cW~ri​ ​+(1−c)ei​ ​ (1)

从中可以计算出
r i ⃗ = ( 1 − c ) ( 1 − c W ~ ) − 1 e i ⃗ = ( 1 − c ) Q − 1 e i ⃗ \vec{r_i}=(1-c)(1-c\tilde{W})^{-1}\vec{e_i}\\ =(1-c)Q^{-1}\vec{e_i} ri​ ​=(1−c)(1−cW~)−1ei​ ​=(1−c)Q−1ei​ ​
可以看出在实际图含义上它是随机游动的,但是 r i ⃗ \vec{r_i} ri​ ​是数值累计的。

classic实现

  • OnTheFly
    最基础的方法是按照(1)式递归收敛求解(条件一般是是 r i ⃗ \vec{r_i} ri​ ​的L2范数的变化小于一定阈值 ξ 1 \xi_1 ξ1​或指达到了指定的迭代次数m)。它被称为OnTheFly方法。这种方法在数据库较大时比较耗时。
    优化点: r i ⃗ \vec{r_i} ri​ ​的分布存在局部性(这体现出了graph中节点的community性),所以只对存在了节点i的图的parition(注意,这个分割并不一定意味着完全不连通,只不过是距离较远参考意义很小)进行计算,其他的 r i j r_{ij} rij​显然可以直接置0.
  • PreCompute
    预先计算出 Q − 1 Q^{-1} Q−1,这种方法在数据库较大时比较耗空间。
    优化点:可以通过低秩近似来快速计算 Q − 1 Q^{-1} Q−1

RWR的快速实现

通过节点的locality,以及图的线性相关性,可以使用近似算法快速计算RWR。

Off-line流程

  1. 使用拉普拉斯正则化计算出 W ~ \tilde{W} W~
  2. 使用诸如METIS软件包等方法将图分割成k个partition(METIS简单实用可见https://metis.readthedocs.io/en/latest/)
  3. 将 W ~ \tilde{W} W~基于分割结果分为 W ~ = W 1 ~ + W 2 ~ \tilde{W}=\tilde{W_1}+\tilde{W_2} W~=W1​~​+W2​~​。其中 W 1 ~ \tilde{W_1} W1​~​包含全部partition内部的权重矩阵, W 2 ~ \tilde{W_2} W2​~​包含全部partition外部的权重矩阵,显然这二者交集为空。
  4. 按照partition序列将 W 1 ~ \tilde{W_1} W1​~​做成如下表示:
  5. 通过上述分解出的 W 1 ~ \tilde{W_1} W1​~​,计算 Q 1 , i − 1 Q_{1,i}^{-1} Q1,i−1​:
    Q 1 , i − 1 = ( 1 − c W 1 , i ~ ) − 1 Q_{1,i}^{-1}=(1-c\tilde{W_{1,i}})^{-1} Q1,i−1​=(1−cW1,i​~​)−1
  6. 将Q与W值按同样的方式进行排列,得到 Q 1 − 1 Q_1^{-1} Q1−1​:
  7. 对 W 2 ~ \tilde{W_2} W2​~​部分,做低秩近似:
    W 2 ~ = U S V \tilde{W_2}=USV W2​~​=USV(这里似乎可以另开一个线程去做)
  8. 计算parition间项 Λ ~ \tilde{\Lambda} Λ~:
    Λ ~ = ( S − 1 − c V Q 1 − 1 U ) − 1 \tilde{\Lambda}=(S^{-1}-cVQ_1^{-1}U)^{-1} Λ~=(S−1−cVQ1−1​U)−1

On-line查询流程

根据off-line计算的结果,直接计算 r i ⃗ \vec{r_i} ri​ ​:
r i ⃗ = ( 1 − c ) ( Q 1 − 1 e i ⃗ + c Q 1 − 1 U Λ ~ V Q 1 − 1 e i ⃗ ) \vec{r_i}=(1-c)(Q_1^{-1}\vec{e_i}+cQ_1^{-1}U\tilde{\Lambda}VQ_1^{-1}\vec{e_i}) ri​ ​=(1−c)(Q1−1​ei​ ​+cQ1−1​UΛ~VQ1−1​ei​ ​)

Λ ~ \tilde{\Lambda} Λ~的含义

这里实际上是利用舍曼-莫里森公式求解矩阵逆运算的一种方式:

https://zhuanlan.zhihu.com/p/44607246

!!!简化后的快速实现

在上述实现中,如果k=n,也即每个节点都分一个partition,那么显然 W 1 ~ = 0 , W 2 ~ = W ~ \tilde{W_1}=0,\tilde{W_2}=\tilde{W} W1​~​=0,W2​~​=W~,并且因此 Q 1 = I Q_1=I Q1​=I,这样可以对上述实现进行简化:

off-line部分

  1. 使用拉普拉斯正则化计算出 W ~ \tilde{W} W~
  2. 直接对正则化后的权重矩阵进行低秩近似:
    W ~ = U S V \tilde{W}=USV W~=USV
  3. node间项: Λ ~ = ( S − 1 − c V U ) − 1 \tilde{\Lambda}=(S^{-1}-cVU)^{-1} Λ~=(S−1−cVU)−1

on-line部分

查询计算: r i ⃗ = ( 1 − c ) ( e i ⃗ + c U Λ ~ V e i ⃗ ) \vec{r_i}=(1-c)(\vec{e_i}+cU\tilde{\Lambda}V\vec{e_i}) ri​ ​=(1−c)(ei​ ​+cUΛ~Vei​ ​)

低秩近似的实现

1. 特征值分解

特征值分解适用于拉普拉斯正则化处理的邻接矩阵,对其他方式处理的邻接矩阵,可以使用SVD分解

简单的实现是对W进行特征值分解:
W 2 ~ = U S U T V = U T \tilde{W_2}=USU^T\\V=U^T W2​~​=USUTV=UT
这样的方法可以减少50%的空间消耗,但是特征分解比较耗时。

!!!2. 分区低秩近似

如果将 W 2 ~ \tilde{W_2} W2​~​纵分为t个partition,name计算低秩近似的方法为:

  1. 构建 U ∈ R n × t U\in R^{n\times t} U∈Rn×t,其中 U i j = ∑ k ∈ i t h p a r t i t i o n W i k U_{ij}=\sum_{k\in i^{th}\ partition}W_{ik} Uij​=∑k∈ith partition​Wik​,也即U的第i列是W第i个partition的列向量的和。
  2. S = ( U T U ) − 1 S=(U^TU)^{-1} S=(UTU)−1
  3. V = U T W 2 ~ V=U^T\tilde{W_2} V=UTW2​~​

Random walk算法及其各种延伸、应用笔记相关推荐

  1. 重启随机游走算法(RWR:Random Walk with Restart)

    重启随机游走算法(RWR:Random Walk with Restart) 1 pagerank算法的基本原理 Pagerank算法是Google的网页排名算法,由拉里佩奇发明.其基本思想是民主表决 ...

  2. GNN笔记: random walk

    1 随机游走定义 所谓随机游走(random walk),就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径. 从一个顶点出发,然后按照一定的概率随机移动到一个邻居节点,并将该节点作为 ...

  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛(5)Random Walk 2(推式子+矩阵逆+矩阵乘)

    Random Walk 2 [2.4]Gauss-Jordan消元法求矩阵的逆 高斯消元求矩阵的逆,伴随单位矩阵一起消元即可. [A,I]→[I,A−1][\text A,\text I]\to [\ ...

  4. 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...

    世界上有些问题看似是随机的(stochastic),没有规律可循,但很可能是人类还未发现和掌握这类事件的规律,所以说它们是随机发生的. 随机漫步(Random  Walk)是一种解决随机问题的方法,它 ...

  5. Machine Learning with Graphs 之 Random Walk with Restarts and Personalized PageRank

    在一个推荐系统中,用一个二分图来代表用户以及商品,它们彼此之间用边连接,构成购买关系. 在图论中,二分图是一类特殊的图,又称为二部图.偶图.双分图.二分图的顶点可以分成两个互斥的独立集 U 和 V 的 ...

  6. 基于随机游走Random Walk的图节点Node表示

    前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于Random Walk的节点表示方 ...

  7. “随机漫步”(Random Walk)模拟演示

    (1).任务描述 有一类问题总称为"随机漫步"(Random Walk)问题,这类问题长久以来吸引着数学界的兴趣.所有这些问题即使是最简单的解决起来也是极其困难的.而且它们在很大程 ...

  8. Random Walk(随机行走)

    Random Walk(随机行走) 前言 本人对随机行走算法理解并不是非常透彻(甚至可以说是不理解),仅仅根据定义用python将随机行走进行实现出来,因此本文章一定漏洞百出,仅仅只能参考. 该程序是 ...

  9. 《Nature-Inspired Metaheuristic Algorithms》—— Random Walk

    1 什么是随机游走random walk? 随机游走是由一系列随机步骤组成的随机过程. 随机游走SN=每个连续随机步骤Xi的和. 也就是说在N次游走时的位置SN是由第一次.第二次-第N-1次游走之后再 ...

最新文章

  1. Blender液体烟与火VFX特效制作教程 Blender VFX Liquid Smoke Fire
  2. 简解Css - 多变的边框
  3. python subprocess.Popen 使用简介
  4. python_面向对象进阶之多继承
  5. 1分钟读懂直播和音视频通话的区别
  6. 【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...
  7. 多线程的全局变量与局部变量
  8. 如何用PPT编制方案 (2)PPT内容的逻辑表达
  9. 深入理解Webpack核心模块Tapable钩子[同步版]
  10. Java解析中文数字字符串
  11. 如何检测java安装成功_如何检查jdk是否安装成功
  12. 炫彩与WKE浏览器交互
  13. 六轴机器人轨迹规划之matlab画直线
  14. SPSS统计分析与行业应用案例详解
  15. 系统分析与设计——UML图总结
  16. 从零开始的JAVA反序列化漏洞学习(一)
  17. CC2530单片机入门学习
  18. H3CIE(WLAN)学习笔记(4)——PHY层协议
  19. js 判断2月份多少天
  20. 获取设备唯一编号替代IMEI新方案

热门文章

  1. .Net高并发解决思路【转载】
  2. 创建BundleID唯一标示符App IDs(又称套装id,appid,BundleID,包名)
  3. 周易六十四卦——复卦
  4. 利用 numpy 实现物理计算--物理向量符号与numpy数组的对应 ( jupyterlab 例子)
  5. SCCM 2007 R2 setp by setp(十一)-软件分发
  6. nanomsg.nng 在windows下的安装
  7. 惊世骇俗?人工智能完虐柯洁前你要知道这些事儿
  8. 996高薪,955底薪,你选哪个?互联网大厂的薪酬一览
  9. scrapy实战之爬取简书
  10. 远程无法访问syn服务器,ping回显请求超时time out故障处理过程