networkx 有向图强连通_机器学习手记[8]--Python Networkx库中PageRank算法实现源码分析...

本文深入分析了Python Networkx库中的PageRank算法实现,包括dangling nodes和spider trap问题的解决方案。文章提供了三种不同的PageRank计算方法,并解释了每个方法的原理。
摘要由CSDN通过智能技术生成

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

网上对 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/

importnetworkxasnx@not_implemented_for('multigraph')defpagerank(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 : d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值