机器学习手记[8]--Python Networkx库中PageRank算法实现源码分析

本文深入分析了Python Networkx库中的PageRank算法实现,探讨了如何处理dangling nodes和spider traps问题,并介绍了三种不同的PageRank计算方法:pagerank、pagerank_numpy和pagerank_scipy。
摘要由CSDN通过智能技术生成


网上对Page算法讲解的很多,实现代码也很多很杂, 所以为了找到一个更高质量的PageRank算法的实现,
我阅读了Python Networkx库上自带的pagerank方法的源码。部分多余内容我删除了,有兴趣可以直接下这个库查看源码

源码的地址在http://networkx.github.io/download.html

具体的pagerank代码我已经上传到网盘在http://pan.baidu.com/s/1ntOafH3


PageRank算法最主要的地方在于对两个问题的解决,一个是dangling nodes,一个是spider trap
前者是说,没有引用其他网页的链接,用图角度的理解就是出度为0。
后者是说,进入到一个网页或者几个网页,这个单个网页,或者几个网页之间相互引用,这样资源进去后就一直在里面转,出不来了,造成rank sink问题。

对于dangling nodes,我们可以计算他们的PR贡献值,然后均分给所有节点
对于spider trap,需要用心灵漂移的方式去解决。

Networkx库里面,主要有三种计算PageRank的方法(PS为什么是三种,我直观觉得是因为这是三个人写的,因为连某些效果完全相同的初始化语句,三个写的都不一样)

1 pagerank函数
  以图结构为基础
  通过迭代收敛方法计算PR值(PageRank值)

2 pagerank_numpy函数
  将图转换为numpy邻接矩阵,
  通过google_matrix和numpy矩阵计算
  通过计算最大特征值对应的主特征向量,即为所求PR值

3 pagerank_scipy函数
  将图转换为sparse稀疏矩阵
  通过迭代收敛方法计算PR值


"""PageRank analysis of graph structure. """
#    BSD license.
#    NetworkX:http://networkx.lanl.gov/
import networkx as nx

@not_implemented_for('multigraph')
def pagerank(G, alpha=0.85, personalization=None,
             max_iter=100, tol=1.0e-6, nstart=None, weight='weight',
             dangling=None):
    """Return the PageRank of the nodes in the graph.
    Parameters
    -----------
    G : graph
        A NetworkX graph. 在PageRank算法里面是有向图
    alpha : float, optional
        稳定系数, 默认0.85, 心灵漂移teleporting系数,用于解决spider trap问题
    personalization: dict, optional
      个性化向量,确定在分配中各个节点的权重
      格式举例,比如四个点的情况: {1:0.25,2:0.25,3:0.25,4:0.25}
      默认个点权重相等,也可以给某个节点多分配些权重,需保证权重和为1.
    max_iter : integer, optional
        最大迭代次数
    tol : float, optional
        迭代阈值
    nstart : dictionary, optional
        整个网络各节点PageRank初始值
    weight : key, optional
      各边权重

    dangling: dict, optional
      字典存储的是dangling边的信息
      key   --dangling边的尾节点,也就是dangling node节点
      value --dangling边的权重
      PR值按多大程度将资源分配给dangling node是根据personalization向量分配的
      This must be selected to result in an irreducible transition
      matrix (see notes under google_matrix). It may be common to have the
      dangling dict to be th
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值