pagerank算法
来源:互联网 发布:网络语言tr是什么意思 编辑:程序博客网 时间:2024/05/16 09:56
pagernk是对网页排名的算法,计算每一个网页的PageRank值,然后根据这个值(概率)的大小对网页的重要性进行排序。
思想:被大量高质量网页引用(链接)的网页也是高质量的网页。
比如网页Y被X1,X2,X3,X4四个网页所链接,且这四个网页的权重分别为0.001,0.01, 0.02, 0.04,则网页Y的rank值为 0.01 + 0.02 + 0.03 + 0.04 = 0.071
最简单的pagerank模型:
这个案例中,有四个节点,对于A节点,它有1/3的概率访问B,C,D,这3表示A的出度为3,对于B节点,它有1/2的概率访问A和D,等等。。以一个4*4的矩阵存入两两之间访问的概率
这个矩阵的每一列表示该节点访问其他节点概率,每一行表示他被其他节点分别访问的概率,假设上网者访问每一个网页的概率相等,即1/4, 比如通过其他节点访问A的概率为
[0 1/2 1 0] *[1/4 1/4 1/4 1/4]T = 9/24
所以第一步
注意矩阵M中M[i][j]不为0表示用一个链接从j指向i,M的第一行乘以V0,表示累加所有网页到网页A的概率即得到9/24。得到了V1后,再用V1去右乘M得到V2,一直下去,最终V会收敛,即Vn=MV(n-1),上面的图示例,不断的迭代,最终V=[3/9,2/9,2/9,2/9]’:
对于一些有自环或者非强连通图,请点开
http://blog.jobbole.com/71431/
ps :如果我这个是个有价值网页,那么上面链接价值就增加了
接下来我将用python 里面一个强大的库igraph 将下面图的pagerank值求出
import csvimport numpy as npfrom operator import itemgetterfrom igraph import Graph as IGraphf = open('/Users/tangweize/Desktop/net.data')edges = []for line in f.readlines(): u, v = [i for i in line.strip().split(',')] edges.append((u, v))print(edges)''''[('1', '2'), ('1', '3'), ('2', '3'), ('3', '7'), ('4', '5'), ('4', '6'), ('5', '6'),('6', '7'), ('7', '8'), ('8', '9'), ('9', '10'), ('9', '11'), ('10', '11'), ('8', '12'), ('12', '13'), ('12', '14'), ('13', '14')]'''f.close()g = IGraph.TupleList(edges, directed=False, vertex_name_attr='name') #加入边,创建IGraph对象。pg = g.pagerank() #直接调用g里面的pagerank算法pgvs = []for p in zip(g.vs, pg): pgvs.append({'name': p[0]['name'], 'pg' : p[1]})print(sorted(pgvs, key = lambda k: k['pg']))
0 0
- PageRank算法
- PageRank算法
- PageRank 算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- PageRank算法
- pagerank算法
- PageRank算法
- PageRank算法
- PageRank 算法
- PageRank算法
- poj 2892 Tunnel Warfare(树状数组+二分)
- 很久没更新日志,这个日子有意义
- 《Pro git》学习笔记
- 链表中倒数第k个结点
- UIFramework之Unity4.x AssetBundle打包策略
- pagerank算法
- 格子问题
- 简单Java类实训四进阶篇(重难点)
- sdut_java_小学数学
- Redis源码解析【SDS】
- java 学习笔记6
- 判断一个含多种括号的字符串是否匹配正确 (如(([]))正确,[[(()错误)
- 剑指offer 39.二叉树的深度
- 条件循环控制语句