pagerank算法实现matlab,浅谈PageRank的matlab实现

越来越发现自己学习太不深入了,什么都只懂点皮毛,对于别人的思想没有理解透彻,看来学习还是要深入的,别人的东西要完全理解才能变成自己的。最近开始研究机器学习的算法,今天心血来潮看了下PageRank,思想还是比较简单的,可是要把思想完全理解并用算法实现,对于我这个菜鸟还是花了点时间的。

1.PageRank思想简介

互联网中的页面是以页面的PageRank来判断其重要性的,值越大越体现其重要性。而页面之间是相互联系的,一个页面可能被多个页面链接,一个页面也可能指向多个页面,从而形成了一个有向图,页面表示有向图的顶点,有向边表示链接,w(i,j)=1表示页面i存在指向页面j的超链接,否则w(i,j)=0。如果页面A存在指向其他页面的超链接,就将A的PageRank的份额平均地分给其所指向的所有页面,一次类推。虽然PageRank会一直传递,但总的来说PageRank的计算是收敛的,下面给出其迭代公式(1-1):

PRn(A)=(1-d)+d*(∑PRn-1(Ti)/C(Ti))(1-1)(页面的初始PageRank均设为1)

%PRn(A)

表示页面A的n次迭代后的PageRank,PRn-1(Ti) 表示页面Ti的n-1的PageRank。

%C(Ti)

表示页面Ti的链接数。

%d

表示阻尼系数(0

2.PageRank算法描述

实际应用中可以采用幂法来计算PageRank,假如总共有m个页面,计算如(1-2)所示:

r=A*x(1-2)其中A=d*P+(1-d)*(e*e'/m)

%r表示当前迭代后的PageRank,它是一个m行的列向量,x是所有页面的PageRank初始值。

%P由有向图的邻接矩阵变化而来,P'为邻接矩阵的每个元素除以每行元素之和得到。

%e是m行的元素都为1的列向量。tyuuyuyfuu

幂法计算过程如下:

x

r=A*x;

if(||r-x||

return r;%r为最终的PageRank

else

x=r;goto 2;

3.PageRank算法的maltab实现代码

%pagerank

P1=[0 1 1

0;0 0 0 1; 1 0 0 0;1 1 1 0];%链接的有向图的邻接矩阵表示

P=[];

[n,n]=size(P1);%n表示页面数

for

i=1:n

P=[P;P1(i,:)/sum(P1(i,:))];%将M1的数据除以每行数据之和

end

d=0.5;%阻尼系数

sigma=0.0001;%收敛阈值

e=ones(n,1);

A=d*P'+(1-d)*((e*e')/n);

%x=ones(n,1);

x=rand(n,1)

%页面的pagerank初始值

r=A*x;%pagerank的计算公式

while(norm(r-x)>=sigma);%判断是否收敛

x=r;

r=A*x;

end

r

%收敛之后得到最后的pagerank,并输出

输出结果:

x =

0.7431 0.3922

0.6555

0.1712

r =

0.5568

0.4640

0.4640

0.4773

另一组结果如下:

x =

0.7060

0.0318

0.2769

0.0462

r =

0.3011

0.2509

0.2509

0.2581

通过结果发现页面的重要性与PageRank的初始值无关,虽然当x不同时,得到的r的值也不同,但是页面的重要性排序保持不变。

4.总结

在理解PageRank算法时,对于其中的数学公式我进行了分析,明白了r=A*x的意义,也明白了为什么A的取值是那样的。下面的将自己的理解介绍如下:

r=A*x=d*P*x+(1-d)*(e*e'/m)*x (1)

PRn(A)=(1-d)+d*(∑PRn-1(Ti)/C(Ti)) (2)

P1表示有向图的邻接矩阵,P1的第i行中的非零元素表示页面i中链接页面,第j列中的非零元素表示指向页面j的页面,将P1的每个元素除以每行元素之和转置得到P,P的第i行元素表示的就是指向页面i其他页面给页面i的PageRank份额1/C(Ti)。用矩阵表示就是d*P*x,结果也就是(2)的后部分值。而(1)中的后部分表示的是每个页面分出d份额的PageRank之后的PageRank,为了表示成矩阵形式才有了(e*e')/m的表达,这一部分的矩阵表示也就是(2)中的1-d。

还有一个论文(http://www.cnblogs.com/FengYan/archive/2011/11/12/2246461.html)介绍PageRank,主要思想都差不多,上面的思想用到了阻尼系数d,就相当于这个论文中的C,而论文中的逃脱因子E(E(i)表示第i个网页的逃脱因子)是为了解决Rank

sink,我觉得类似与上面的(1-d)*(e*e'/m)*x,对于这一点比较我不是很确定。

总的来说,对于PageRank还算进行了比较深入的了解。对于海量页面数的相关处理是实际问题的难点,由于我对于分布式处理几乎是0基础,所以还有待好好学习。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值