SEO优化 > SEO资讯 / PageRank算法之Google详解
PageRank算法PageRank算法是谷歌曾经独步天下的“倚天剑”,该算法由Larry Page和Sergey Brin在斯坦福大学读研时发明的,论文点击下载: The PageRank Citation Ranking: Bringi...
PageRank算法
PageRank算法是谷歌曾经独步天下的“倚天剑”,该算法由Larry Page和Sergey Brin在斯坦福大学读研时发明的,论文点击下载: The PageRank Citation Ranking: Bringing Order to the Web。
本文首先通过一些参考文献引出问题,然后给出了PageRank的几种实现算法,最后将其推广至在MapReduce框架下如何实现PageRank算法。
PageRank的核心思想有2点:
1.如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是pagerank值会相对较高;
2.如果一个pagerank值很高的网页链接到一个其他的网页,那么被链接到的网页的pagerank值会相应地因此而提高。
下面是一张来自WikiPedia的图,每个球代表一个网页,球的大小反应了网页的pagerank值的大小。指向网页B和网页E的链接很多,所以B和E的pagerank值较高,另外,虽然很少有网页指向C,但是最重要的网页B指向了C,所以C的pagerank值比E还要大。
参考内容:
1.Wiki about PageRank
2.Google 的秘密- PageRank 彻底解说 中文版
3.数值分析与算法 Page 161 应用实例:Google的PageRank算法
4.Numeric Methods with Matlab 或者中文翻译版本Matlab数值计算
5.使用 MapReduce 思想计算 PageRank Page 62 PageRank和马尔可夫链
问题背景
来自参考内容3
2.数学建模
来自参考内容3,理解网页连接矩阵$G$,马尔科夫过程(“网上冲浪”),转移矩阵$A$,概率$p$为用户点击当前网页中的某个链接地址的概率(一般都为0.85)。
最后得到一个等式$Ax=x$,这实际上就是求矩阵$A$的特征值为1的特征向量!
下面的内容使用圆盘定理解释了1是矩阵$A$的主特征值,所以我们可以使用幂法来求解。
关于幂法的详细介绍参考另一篇文章Numerical Methods Using Matlab: 第三章 矩阵特征值和奇异值求解
3.求解PageRank
假设有如上图右侧所示的网页链接模型。
(1) 幂法
wiki上有一个PageRank的简便算法,它不考虑转移概率,而是采用的是迭代的方式,每次都更新所有网页的pagerank值,更新的方式就是将每个网页的pagerank值平摊分给它指向的所有网页,每个网页累计所有指向它的网页平摊给它的值作为它该回合的pagerank值,直到全部网页的pagerank值收敛了或者满足一定的阈值条件就停止。
后面的MapReduce框架下PageRank算法的实现就采用了这个思想。考虑转移概率的情况和这个算法类似,乘上一个转移概率再加上一个随机跳转的概率。
根据上面的思想,下面Matlab代码实现可以得到各个网页的PageRank值。
得到的向量$x$保存了各个网页的pagerank值,虽然链接数目一样,但是网页①比网页④和网页⑤都高,而网页②的pagerank值第二高,因为网页①链接到了它上面,相当于沾了网页①的光。
这篇文章给出该算法的一个Python版本实现,该博主使用第三方模块python-graph,python-graph模块实现了很多图算法,该模块的使用示例,使用前需要先安装,代码如下:
Python版本的算法实现:
经过32次迭代之后得到的结果如下,和前面的结果一致:
(2) 利用马尔可夫矩阵的特殊结构
来自参考内容4,其中$delta=frac{1-p}{n}$
也就是将矩阵$A$进行分解,并不需要显示求出矩阵$A$,然后便是求解一个线性方程组即可。
(3) 巧妙解法:逆迭代算法
巧妙利用Matlab中的精度误差导致原本是一个奇异矩阵的$I-A$变成一个非奇异矩阵,运行时只是会有些警告提示,但是运行结果和其他算法一样。
最后,附上参考内容4中给出的一份好代码,用于模拟随机冲浪生成矩阵$G$的代码
4.MapReduce框架下PageRank算法的实现
利用前面wiki上的迭代(或者幂法)的思想来实现MapReduce框架下PageRank算法很简单,可以先阅读下参考内容5。
这篇文章using-mapreduce-to-compute-pagerank更加详细,可以参考
以下是我的大数据的一次作业,要求是参考wiki上的简便算法,实现MapReduce框架下的PageRank算法。给的数据集是Twitter的用户之间的关系,可以看做是网页之间的关系,但是助教没要求写代码以及运行这个数据集(有1G多),所以下面只是一个Python版本的理想可行版本,并没有通过实际大数据集的验证,另外,博主暂时还不太会Python的mapreduce框架中的一些函数,所以实现的是一个简明的可以测试的PageRank算法。
1.输入输出格式
map函数的输入是<节点,从该节点引出的边列表>,其中节点是一个类,包含了其当前的pagerank值,输出是<节点,反向节点pagerank值/反向节点引出边的总数>;
reduce函数的输入是<节点,反向节点pagerank值/反向节点引出边的总数>,输出是<节点,从该节点引出的边列表>,其中节点包含了其更新后的pagerank值。
伪代码: [一时犯二写了个英文形式的 ]
2.示例演示
假设用户1,2,3,4是如下图所示的关系:
假设有2个mapper(A和B)和1个reducer(C),初始时4个节点的pagerank值都是0.25
其中,关于用户1和2的数据被mapperA读取并处理,关于用户3和4的数据被mapperB读取并处理 [经验证,即使一个用户的数据是由不同的mapper来读取的,最终收敛到的结果差不多]
map的输入输出结果如下:
reduce的输入输出结果如下,输入是2个mapper的输出,输出的结果中更新了节点的pagerank值
reducer处理完了之后又将它的结果输入给mapper处理,直到迭代的次数超过了设定值或者两次迭代之后得到的所有节点的pagerank值之差的总和(也可以是取二范数)小于设定的阈值。
3.示例的实验结果
(1)首先是使用Matlab采用幂法的方式计算出在p=1.0的情况下示例得到的结果 [它的主要作用是验证后面python版本的正确性]
matlab源码如下:
结果为:
(2)matlab版本的page rank没有采用mapreduce的思想进行迭代,所以我另外写了一个python版本的利用mapreduce思想实现的pagerank算法(注:我并没有使用python的map和reduce函数去实现,而是使用更加容易明白的实现),使用的阈值为0.0001,最多迭代的次数为100次。
得到的结果为如下,总共迭代了15次
上面的结果和Matlab用幂法得到的pagerank值差别很小,可以认为是正确的,所以说明了使用这种mapreduce输入输出格式的正确性。
OK,差不多了,希望对需要理解PageRank算法的人有帮助!
猜你喜欢
- 2019-06-17 移动代码适配 虚拟空间怎么添加Vary HTTP标头
- 2019-04-02 推广人员都容易走入的渠道筛选误区,你是否也迷茫过
- 2018-11-28 做seo的常见误区,都是比较常见但非常重要的点
- 2018-10-17 【百度搜索下载站质量规范】推荐!
- 2018-06-08 网站的整个建站流程你知道吗?来学学把
- 2018-05-21 自媒体伪原创应该怎么做
- 2018-05-17 淘宝商品的seo应该怎么做?
- 2018-05-16 老域名在SEO中的优势
- 2018-05-09 做seo为何总是差强人意
- 2018-05-08 网站设计架构与SEO的关系
- 搜索
-
- 10-17【百度搜索下载站质量规范】推荐!
- 05-13做网络推广,常用的哪些途径
- 04-11【SEO优化过程】一个网站的优化历程
- 03-31网站建设需要注意的几大事项,少走弯路!
- 03-272018年门户网站如何进行优化?八大技巧!
- 03-18站长:我为什么要放弃wordpress
- 03-15黑帽真牛,吊打百度各种算法,百度工程师看到都会哭了
- 01-07如何去掉织梦网站首页后面的index.html
- 12-27网站logo审核和首页展示之间的微妙关系
- 11-09百度搜索资源平台上线,业内大佬送祝福!
- 10-19百度推出《闪电算法》,看看官方如何解读?
- 09-25Seo 网站优化之软文优化
- 09-13seo人员必备浏览器插件SEO工具
- 09-05【SEO优化知识总纲导图】+优化心得!
- 08-28七夕虐狗-这是一个不正经的SEO篇章
- 08-25什么样的页面不受欢迎?你一定要知道
- 08-25我的SEO工作历程,每天进步一点点
- 08-24网站迁移后对重新开始seo的见解
- 08-24分享我做seo的经历和总结
- 08-23关于一些公司对seo新人的误导
- 08-22转载文章的站排在前面怎么办!
- 01-252017年移动端有多重要?你想不到!
- 01-22你的网站外链需要做到广泛地发布
- 01-18教你写出原创好文章,让流量飞扬!
- 01-17你所不知道的目标关键词,它又如何布局?
- 01-15如何在百度搜索推广拓展关键词?
- 01-14从SEOer角度来看待一个网站成长
- 01-14对于网站改版的情况我们应有什么措施?
- 01-14我在公司一年的SEO优化心得
- 01-12我的八年站长之路,不断学习SEO专业知识!
- 2020℃已收录的文章能不能修改?
- 1697℃nofollow可以这样使用
- 1371℃百度站长平台:xml格式sitemap的基础制作方法
- 1346℃如何对图片处理更有利于谷歌SEO?
- 1279℃Google搜索引擎引入AI算法 搜什么都帮你找得到
- 1263℃链接提交方式及效果讲解
- 1261℃移动搜索获得良好展现的注意事项
- 1256℃SEO学习:(六)怎么样剖析关键字的价值?
- 1253℃如何提升网站的UV量
- 1253℃百度算法更新与收录变化历史记录
- 1236℃哪一些外链建设渠道对于网站优化最有帮助
- 1235℃高级更新网站内容的方法
- 1231℃【移动搜索】如何让百度准确地识别页面类型
- 1226℃社交分享化外链有用吗?
- 1222℃百度超链算法升级 2015年
- 1222℃从“商业推广”到“广告”,百度搜狗被调查背后付费商业广告何去何从?
- 1217℃为什么网站的名次越优化越往下掉?
- 1215℃Baiduspider抓取过程中涉及的网络协议详解
- 1210℃SEO篇章解答快照更新慢的影响
- 1200℃谷歌排名算法因素,社交信号不作为引起
- 1182℃网站文章内的内链要不要做?
- 1180℃百度新搜索升级,Baidu Spider3.0都有哪些功能
- 1179℃谷歌调整算法,打击应用安装广告的网站
- 1177℃SEO优化不要沉溺于技术而要寻找用户和搜索引擎直接的平衡点
- 1176℃网站排名下降原因总结
- 1171℃苹果、谷歌等巨头拒绝美国政府调用数据
- 1167℃搜索引擎优化效果显著提升的方法都有哪些
- 1163℃带你了解谷歌智能算法RankBrain
- 1163℃解密如何正确识别Baiduspider移动ua
- 1159℃Spider抓取系统的基本框架详解
- 11-07新站上线前的流程该注意哪些事项?
- 11-02记一次seo人员渗透同行网站,看我如何拿下客户账号
- 10-31360搜索引擎蜘蛛IP段更新公布(官方)
- 10-01你知道做百度知道的技巧吗?来看看吧!
- 09-19新站怎么样稳当的度过沙盒效应一段时间
- 09-19哪一些外链建设渠道对于网站优化最有帮助
- 09-19关键字的权重主要存在于那些地方
- 09-19优质外链和垃圾外链的有意思分解
- 09-19搜索引擎网站判定胜负网页品质重点参照的参变量
- 09-19SEO学习:(六)怎么样剖析关键字的价值?
- 09-19SEO学习:(七)网站关键词的应用和布局
- 09-19SEO学习:(八)域名有关知识
- 09-15企业网站seo:现在做外链还有没有效果
- 09-15搜索引擎优化如何走出外链建设的误区
- 09-15SEO优化页面权重分配算法及传递规律
- 09-15黑帽seo神器黑侠外推蜘蛛池V1.3完整破解版
- 09-152016年6月份百度搜索引擎这是干嘛了?srcid=101 到底是神马?
- 09-15seoer需要从哪些角度去挖掘用户的需求
- 09-15网站优化排名如何布局内链才能将SEO做到最好?
- 09-15百度新搜索升级,Baidu Spider3.0都有哪些功能
- 09-15资源不可用却已产生地址的链接,千万不要返回404
- 09-09百度遭代理商逆击:好在转型还有时间
- 09-09搜狗发布语音交互引擎“知音” 支持多轮交互实时纠错
- 09-09受不了百度谷歌?安利做了自己的搜索引擎
- 09-09SEO优化不要沉溺于技术而要寻找用户和搜索引擎直接的平衡点
- 09-09Google搜索引擎引入AI算法 搜什么都帮你找得到
- 09-09官方解读:CDN对网站在搜索引擎中的影响
- 09-09魏则西事件后 搜索引擎该怎样监管
- 09-09内外力交织下 百度搜索引擎的“自我进化”
- 09-09SEO优化之百度搜索引擎研究
- 标签列表