最近在学习知识图谱,涉及到:PageRank算法、马尔科夫模型

马尔科夫模型:https://blog.csdn.net/pipisorry/article/details/46618991

PageRank算法

一、什么是PageRank

利用网页简单的超链接来计算网页的分值,从而给网页进行排名的一种算法。Google用它来体现网页的相关性和重要性,在搜索引擎优化操作中是经常用来评估网页优化的成效因素之一。

它的思想是模拟一个悠闲的上网者,上网者首先随机选择一个网页打开,然后在这个网页上呆了几分钟后,跳转到该网页所指向的链接,这样无所事事、漫无目的地在网页上跳来跳去,PageRank就是估计这个悠闲的上网者分布在各个网页上的概率。

二、PageRank模型

互联网的网页可以看做是一个有向图,其中网页是节点,如果网页A有链接到网页B,则存在一条有向边A-->B,下面是一个简单的例子:

这个简单的网络中只有四个网页,如果当前在A网页,由于A有3条出链,则上网者将会各以1/3的概率跳转到B、C和D。所以如果一个网页有k条出链,那么该网页跳转到任意一个出链上的概率时1/k,同理D到B、C的概率各为1/2,而B到C的概率为0 。访问一个网页的概率由链接到它的所有网页的概率来决定,例如网页A由B、C两个网页链接,则:

每个网页的访问概率可以用一个向量进行表示,则所有网页的跳转概率可以用户一个用转移矩阵来表示,当一个网络中有n个网页结点时,则转移矩阵M是一个n x n的方阵。因此上面示例图对应的转移矩阵如下:

(列:第一列为A->A,A->B,A->C,A->D     第二列为B->A,B->B,B->C,B->D)

初始时,假设上网者在每一个网页的概率都是相等的,即,于是初始的概率分布就是一个所有值都为1/n的n维列向量,用去右乘转移矩阵,就可以得到下一步对每个网页的访问概率

之后的过程就是一个不断的迭代过程,用得到的网页访问概率去右乘转移矩阵,直到达到一个收敛的状态。可以发现,这是一个马尔科夫过程,即当前的状态仅由它前一个状态来决定。

三、终止点问题

我们知道,要满足马尔科夫过程的收敛性,需要具备一个条件,即图需要是强连通的。(强连通图(Strongly Connected Graph)是指在有向图G中,如果对于每一对vi、vj,vi≠vj,从vi到vj和从vj到vi都存在路径,则称G是强连通图。)

而互联网上的网页不满足强连通的特性,因为有一些网页不指向任何网页,所以当上网者到达这类网页时他将没法跳到其他网页,因此一直迭代下去,会导致所有网页的访问概率都为0;

如上所示,网页C不指向任何一个网页,其对应的转移矩阵为:

用初始的访问概率右乘转移矩阵,然后一直迭代下去,则最终所有的访问概率都变为0:

四、陷进问题

另外一个问题是陷进问题,即有些网页不存在指向其他网页的连接,但是存在指向自己的连接,如图所示:

我们可以发现,当上网者跑到C网页后,就像跳进了陷阱,再也不能从C中出来了,这将导致概率分布值全部转移到C网页上来,其对应的转移矩阵为:

用初始的访问概率右乘转移矩阵,然后一直迭代下去,则所有的概率都会转移到网页C:

五、解决终止点问题和陷进问题

上述的问题只是特殊的情况,为了更好的理解PageRank算法的原理而已。实际上Google提出的PageRank算法分为两部分,另一部分是由一定的概率跳转到一个随机的网页,这样就能避免终止点问题和陷阱问题。

其中一般取为0.85,现在我们来计算带陷阱问题的网络的概率分布:

重复迭代下去,得到:

下面是网页i的重要程度的公式,其中d是一个概率,in(i)表示所有指向网页i的网页。

这公式的思想是模拟一个随机冲浪者的浏览网页的行为,公式左边部分表示该冲浪者以(1-d)/N的概率从浏览器输入url的方式访问到网页i,公式右边部分表示从其他指向网页i的网页跳转过来的。多次迭代后,所有网页的重要性值会收敛

用概率转移的方式表示,公式如下

六、复杂度问题

上述的网络只有四个结点,直接用矩阵乘法进行是十分快捷的。但是真实的网络中有上千万个网页结点,如果还是直接用矩阵乘法进行计算,时间复杂度就太高了。因此很多有关PageRank算法的博客都提到了Map-Reduce的计算,这里后续进行补充...

七、个性化PageRank算法

个性化PageRank算法的目标是要计算所有节点相对于用户u的相关度。从用户u对应的节点开始游走,每到一个节点都以1-d的概率停止游走并从u重新开始,或者以d的概率继续游走,从当前节点指向的节点中按照均匀分布随机选择一个节点往下游走。这样经过很多轮游走之后,每个顶点被访问到的概率也会收敛趋于稳定,这个时候我们就可以用概率来进行排名了。

从公式可以看出,个性化的pagerank跟传统pagerank不同的是,每次重新游走时,总是从用户u节点开始。另外,每个节点权重初始化时,个性化的pagerank是这样子的,假如对用户u推荐,则对用户u节点初始化为1,其他节点都初始化为0。

个性化PageRank的计算可以用bookmark-coloring算法,参考文献

Bookmark-coloring algorithm for personalized PageRank

具体的算法原理后期补充...

参考:pagerank以及个性化的pagerank算法:https://blog.csdn.net/lingerlanlan/article/details/46991167

个性化PageRank算法相关推荐

  1. PageRank的基本原理以及个性化PageRank在推荐系统的应用

    阅读LBSN中的位置推荐的一些文献时,遇到了一种用个性化PageRank算法来进行位置推荐的算法,虽然之前也大致了解过PageRank算法,但不细致,这次特意做一个整理总结. PageRank算法 一 ...

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

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

  3. hadoop上的pageRank算法

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

  4. [转]PageRank算法

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

  5. 张洋:浅析PageRank算法

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

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

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

  7. 数据挖掘十大经典算法之——PageRank 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  8. PageRank算法并行实现

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

  9. pagerank算法实现matlab,Matlab 入门及PageRank算法求解.ppt

    Matlab 入门及PageRank算法求解 矩阵运算 + 矩阵加 - 矩阵减 * 矩阵乘 / 矩阵左除 \ 矩阵右除 ^ 矩阵幂 维数相同才能加减:方 阵才能求幂. 注意左乘,右乘. a\b?求a* ...

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

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

最新文章

  1. 一文看懂Java微服务架构,WEB2.0,垂直架构,分布式架构,微服务架构
  2. python 网页cookie的使用
  3. 处理业务代码中循环遍历出现的性能问题
  4. hadoop centos 安装
  5. 【数据分析】百度内部报告解析00后移动互联网行为
  6. Cpp / shared_ptr 配置删除器的方法
  7. import librosa出错解决方案
  8. jQuery导入Eclipse后报错解决方法
  9. 聊聊React的路由React-Router、react-router-dom
  10. python 重启同一个程序_Python – 在重启之间保存程序的状态?
  11. php_steam,Steam 帐户使用 - Steam Support
  12. js获取并设置lt;pgt;lt;/pgt;的显示的值。
  13. C++二叉排序树代码实现
  14. Spring ioc 详解
  15. 视频号如何发表视频呢?
  16. 【C++】关键字restrict的作用
  17. 7-50 近似求PI (15分)
  18. MFC 的 Picture Control 加载 BMP/PNG 图片的方法
  19. Java中AudioFileStream_iOS音频学习一之AudioFileStream
  20. Error querying database. Cause: java.sql.SQLException:

热门文章

  1. 红帽子linux命令界面,红帽子_Linux_命令全解
  2. 【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池
  3. 网站微调是什么意思?能带来什么作用?
  4. notimplementedexception
  5. linux设置ps1命令行
  6. LeetCode热门100之 无重复字符的最长子串
  7. 清华大学C++课程学习笔记——第五章 数据共享与共享数据的保护
  8. 电脑文档背景保护色--豆沙绿
  9. 讓TQ2440也用上設備樹(1)
  10. Mac上利用iTunes制作铃声