这个例子展示了如何使用PageRank算法对一组网站进行排名。尽管PageRank算法最初是为搜索引擎结果排序而设计的,但它也可以更广泛地应用于许多不同类型图中的节点。PageRank分数根据每个图节点与其他节点的连接方式给出了其相对重要性的概念。
从理论上讲,PageRank分数是随机点击每个网站上链接的人到达任何特定页面的有限概率。因此,得分高的页面在网络中具有较高的连接和可发现性,随机上网的人更有可能访问该页面。
在PageRank算法的每一步中,每个页面的分数都会根据以下内容进行更新:
r = (1-P)/n + P*(A'*(r /d) + s/n);
r
是PageRank分数的向量。
P
是一个标量阻尼因子(通常为0.85),它是随机冲浪者点击当前页面上的链接,而不是继续在另一个随机页面上的概率。
一个“
是图的邻接矩阵的转置。
d
是一个包含图中每个节点的出度的向量。d
设置为1
对于没有出边的节点。
n
是图中节点的标量数。
年代
是没有链接的页面的PageRank分数的标量和。
换句话说,每个页面的排名在很大程度上是基于链接到它的页面的排名。这个词‘* (r / d)
选取链接到图中每个节点的源节点的分数,并根据这些源节点的出站链路总数进行标准化。这确保了PageRank分数的总和始终是1
.例如,如果节点2连接到节点1、3和4,那么它就传输1/3
在算法的每次迭代中,每个节点的PageRank得分。
创建一个图,说明每个节点如何将其PageRank评分分配给图中的其他节点。
S = {“一个”“一个”“一个”“b”“b”“c”' d '' d '' d '};T = {“b”“c”' d '' d '“一个”“b”“c”“一个”“b”};G =有向图(s,t);标签= {/ 3的/ 3的/ 3的《b / 2》《b / 2》“c”' d / 3 '' d / 3 '' d / 3 '};p = plot(G,“布局”,“分层”,“EdgeLabel”、标签);高亮(p,[1 1 1],[2 3 4],“EdgeColor”,‘g’)高光(p,[2 2],[1 4],“EdgeColor”,“r”)突出(p, 3、2、“EdgeColor”,“米”)标题(“节点间PageRank评分传输”)
的中心
函数包含一个计算PageRank分数的选项。
创建并绘制包含六个节点的有向图,代表虚构的网站。
S = [1 1 2 2 3 3 3 4 5];T = [2 5 3 4 4 5 6 1 1];名称= {“http://www.example.com/alpha”,“http://www.example.com/beta”,...“http://www.example.com/gamma”,“http://www.example.com/delta”,...“http://www.example.com/epsilon”,“http://www.example.com/zeta”};G =有向图(s,t,[],names)
G =有向图属性:边:[9x1表]节点:[6x1表]
情节(G,“布局”,“分层”,...“NodeLabel”, {“α”,“β”,“伽马”,“δ”,‘ε’,“ζ”})
计算该图的PageRank中心性得分。的跟随概率(也称为阻尼因子)0.85
.
pr =中心性(G,“pagerank”,“FollowProbability”, 0.85)
公关=6×10.3210 0.1706 0.1066 0.1368 0.2008 0.0643
查看每个页面的PageRank分数和学位信息。
G.Nodes.PageRank = pr;G. nodes . indegree = indegree(G);G. nodes . outdegree = outdegree(G);G.Nodes
ans =6×4表名字PageRank入度出度 __________________________________ ________ ________ _________ {' 0.32098 http://www.example.com/alpha '} 2 2 0.17057 {' http://www.example.com/beta '} 1 2 {' http://www.example.com/gamma '} 0.10657 - 1 3 {' http://www.example.com/delta '} 0.13678 - 2 1 {' http://www.example.com/epsilon '} 0.20078 - 2 1 {' http://www.example.com/zeta '} 0.06432 - 1 0
结果表明,它不仅仅是数量页面的链接决定了得分,也是质量.的α
而且γ
然而,两个网站的总分都是4α
两者的链接ε
而且β
这些大学的排名也很高。γ
只被链接到一个页面,β
,它位于列表的中间。因此,α
得分高于γ
通过算法。
将数据载入mathworks100.mat
看一下邻接矩阵,一个
.该数据是在2015年使用自动页面爬虫生成的。页面爬虫开始于//www.tatmou.com
并跟踪链接到后续网页,直到邻接矩阵包含100个独特网页的连接信息。
负载mathworks100.mat间谍(A)
用稀疏邻接矩阵创建一个有向图,一个
中包含的urlU
作为节点名。
G =有向图(A,U)
G =有向图属性:边:[632x1表]节点:[100x1表]
使用力布局绘制图形。
情节(G,“NodeLabel”{},“NodeColor”,[0.93 0.78 0],“布局”,“力”);标题(“链接到//www.tatmou.com的网站”)
计算图的PageRank分数,G
,采用200次迭代,阻尼因子为0.85
.将分数和学位信息添加到图的节点表中。
pr =中心性(G,“pagerank”,“MaxIterations”, 200,“FollowProbability”, 0.85);G.Nodes.PageRank = pr;G. nodes . indegree = indegree(G);G. nodes . outdegree = outdegree(G);
查看前25个结果分数。
G.Nodes (1:25,:)
ans =25×4表名字PageRank入度出度 ______________________________________________________________________________ ________ ________ _________ {' 14 {//www.tatmou.com} 0.044342 20 ' https://ch.mathworks.com '} 0.043085 20 14 {' https://cn.mathworks.com '} 0.043085 20 14 {' https://jp.mathworks.com '} 0.043085 20 14 {' https://kr.mathworks.com '} 0.043085 20 14 {' https://uk.mathworks.com '} 0.043085 20 14 {' https://au.mathworks.com '} 0.043085 20 14 {' https://de.mathworks.com '} 0.043085 20 14{'//www.tatmou.com/es' } 0.043085 20 14 {'//www.tatmou.com/fr' } 0.043085 20 14 {'//www.tatmou.com/in' } 0.043085 20 14 {'//www.tatmou.com/it' } 0.043085 20 14 {'//www.tatmou.com/nl' } 0.043085 20 14 {'//www.tatmou.com/se' } 0.043085 20 14 {'//www.tatmou.com/index.html%3Fnocookie%3Dtrue' } 0.0015 0 1 {'//www.tatmou.com/company/aboutus/policies_statements/patents.html'} 0.007714 6 6 ⋮
提取并绘制包含所有得分大于的节点的子图0.005
.根据PageRank分数为图节点着色。
H =子图(G,找到(G个节点。PageRank > 0.005));情节(H,“NodeLabel”{},“NodeCData”H.Nodes.PageRank,“布局”,“力”);标题(“链接到//www.tatmou.com的网站”) colorbar
排名靠前的网站的PageRank得分都非常相似,比如一个随机上网的人大约有4.5%的机会登陆每个网页。这一小群高度联系的页面在情节中心形成了一个小圈子。与这个中心集团相连的是几个较小的集团,它们彼此之间高度联系。
硅藻土,C。MATLAB实验.第七章:谷歌PageRank.MathWorks, Inc., 2011。