PageRank理论与实践及用户评分应用PeopleRank算法

时间:2020-12-08 18:48:04

PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一. Google用它来体现网页的相关性和重要性,在搜索引擎优化操作中是经常被用来评估网页优化的成效因素之一.PageRank适用于任何图或网络在任何域.因此,PageRank是现在经常使用在文献计量学,社会和信息网络分析,用于链接预测和推荐,甚至用于道路网络的系统分析,以及生物学,化学,神经科学,物理.

原理:

PageRank理论与实践及用户评分应用PeopleRank算法

由于存在一些出链为0,也就是那些不链接任何其他网页的网, 也称为孤立网页,使得很多网页能被访问到.因此需要对 PageRank公式进行修正,即在简单公式的基础上增加了阻尼系数(damping factor)d, d一般取值d=0.85.其意义是,在任意时刻,用户到达某页面后并继续向后浏览的概率. 1- d= 0.15就是用户停止点击,随机跳到新URL的概率的算法被用到了所有页面上,估算页面可能被上网者放入书签的概率.

最后,即所有这些被换算为一个百分比再乘上一个系数d.由于下面的算法,没有页面的

PageRank理论与实践及用户评分应用PeopleRank算法

PageRank理论与实践及用户评分应用PeopleRank算法

优缺点:

优点:

1、  在于它对互联网上的网页给出了一个全局的重要性排序,它使用链接来衡量整体受欢迎程度,而不是使用相关主题.

2、  算法的计算过程是可以离线完成的,这样有利于迅速响应用户的请求.

缺点:

1、  主题无关性,没有区分页面内的导航链接、广告链接和功能链接等,容易对广告页面有过高评价;

2、  旧的页面等级会比新页面高,因为新页面,即使是非常好的页面,也不会有很多链接,除非他是一个站点的子站点.

应用:

基于PageRank的理论,我们以每个微博账户的“关注”为链出链接,“粉丝”为链入链接,我们把这种以人为核心的关系,叫PeopleRank

,代码见http://blog.fens.me/hadoop-social-peoplerank/

#################################Matlab########################################

% Parameter M adjacency matrix where M_i,j represents the link from 'j' to 'i', such that for all 'j'

%     sum(i, M_i,j) = 1

% Parameter d damping factor

% Parameter v_quadratic_error quadratic error for v

% Return v, a vector of ranks such that v_i is the i-th rank from [0, 1]

function [v] = rank2(M, d, v_quadratic_error)

N = size(M, 2); % N is equal to either dimension of M and the number of documents

v = rand(N, 1);

v = v ./ norm(v, 1);   % This is now L1, not L2

last_v = ones(N, 1) * inf;

M_hat = (d .* M) + (((1 - d) / N) .* ones(N, N));

while(norm(v - last_v, 2) > v_quadratic_error)

last_v = v;

v = M_hat * v;

% removed the L2 norm of the iterated PR

end

end %function

##################################R语言########################################

Library(“igraph”)

page.rank (graph, algo = c("prpack", "arpack", "power"),

vids = V(graph), directed = TRUE, damping = 0.85,

personalized = NULL, weights = NULL, options = NULL)

g2 <- make_star(10)

page_rank(g2)$vector