PageRank算法的实现一

PageRank算法的思想比较容易理解,基于被许多好的网页链接的网页一定是好的网页的思想。

PageRank算法

用邻接矩阵来表示网页的连接状态。

矩阵A=(1-d)*q+d*p;

A:网页的PageRank值

q:矩阵,每个值都为1/m,表示每个网页都有m个链接出去的选择,概率为1/m

p:概率转移矩阵

d:阻尼系数,d*p表示在随机模型中网页将自身的份额的PageRank值平均分给每个外链

计算过程

1, 若网页i存在一个指向网页j的连接,则pij=1,否则pij=0;可以得到矩阵p

2,然后将每一行除以该行数字之和

3,p=p',进行转置,即为概率转移矩阵

4,根据公式,计算A的初始值

5,Aa=a,令a的初始值为全1的列向量,进行迭代,迭代结果的a即为相应的pagerank值

6,进行归一化

源码

function ek=pagerank(p,d,e)
%p:连接矩阵
%d:分配分数
%e:误差值
x=sum(p,2);
y=sum(p,1);
n=size(p,1);
for i=1:n
    p(i,:)=p(i,:)/x(i);
end
%概率转移矩阵
p=p';
o=ones(n);
A=d*p+(1-d)*o/sum(sum(p'))
e0=ones(n,1);
ek=zeros(n,1);
s=norm(e0-ek);%计算欧式距离
i=0;
%幂法迭代
while(s>e)
    ek=A*e0;
    s=norm(e0-ek);
    e0=ek;
    i=i+1;
end
disp(['迭代次数为',num2str(i),'次']);
disp(['最后的Rank结果为:']);
ek
end


结果:

g =

     0     1     1     0     1     1     0
     1     0     1     1     0     0     0
     1     0     0     1     1     0     0
     1     0     0     0     1     0     0
     1     0     0     1     0     1     1
     0     0     0     0     1     0     0
     1     0     0     0     0     0     0

>> pagerank(g,0.5,0.01)

A =

    0.0714    0.2381    0.2381    0.3214    0.1964    0.0714    0.5714
    0.1964    0.0714    0.0714    0.0714    0.0714    0.0714    0.0714
    0.1964    0.2381    0.0714    0.0714    0.0714    0.0714    0.0714
    0.0714    0.2381    0.2381    0.0714    0.1964    0.0714    0.0714
    0.1964    0.0714    0.2381    0.3214    0.0714    0.5714    0.0714
    0.1964    0.0714    0.0714    0.0714    0.1964    0.0714    0.0714
    0.0714    0.0714    0.0714    0.0714    0.1964    0.0714    0.0714

迭代次数为5次
最后的Rank结果为:

ek =

    1.5137
    0.6890
    0.8039
    0.9353
    1.4961
    0.8755
    0.6865


 

你可能感兴趣的:(PageRank算法的实现一)