python - NetworkX中Page Rank函数的参数“权重”有什么作用?
问题描述
根据这篇文章,加权有向图的权重会影响图的页面排名。我已经尝试了该帖子中的代码:
from networkx.algorithms.link_analysis.pagerank_alg import pagerank_numpy
ddd=nx.DiGraph()
ddd.add_weighted_edges_from([('A','B',0.5),('A','C',0.5)])
print(pagerank_numpy(ddd))
ddd['A']['C']['weight']=1
print(pagerank_numpy(ddd))
>>> {'A': 0.2597402597402597, 'B': 0.37012987012987014, 'C': 0.37012987012987014}
>>> {'A': 0.2597402597402599, 'B': 0.3333333333333334, 'C': 0.40692640692640686}
但是,同时,pagerank_numpy
有一个参数叫做weight
. 根据文档:
weight (key, optional) -- 用作权重的边缘数据键。如果 None 权重设置为 1。
在上面的例子中,weight
没有设置,但似乎没有将权重都设置为 1。那么,这个参数weight
究竟是做什么的呢?
NetworkX 版本:2.1
解决方案
PageRank 算法根据网络上的随机游走为节点分配权重。我们可以通过偏向行走以比其他边缘更多地遵循某些边缘来修改算法。为此,我们对网络的边缘进行加权。Networkx 对边权重非常灵活。我们可以有权重,其名称是'weight'
or'scale_factor'
或'relative_frequency'
我们想要命名的任何字符串。所以 PageRank 算法需要知道使用哪个名字。
这就是您在向算法传递weight
参数时告诉算法的内容。如果没有得到,它将所有边都视为权重为 1。
推荐阅读
- java - 什么事件会使等待线程执行另一个线程已经运行的同步方法?
- java - 根据 url 的 request.body 输出创建字典,然后在 VF 页面中打印
- java - 从@ExceptionHandler 重定向不起作用
- google-apps-script - Google表格:如何找到每列的最后一行?
- java - 通过自定义按钮将数据从 JDialog 传递到框架
- sql-server - 如何在 SQL Server 中将 try_convert 与可为空的字段进行比较
- rxjs - 将 sequelize Promise 转换为可观察的结果以复制数组
- php - 如何通过联系表 7 获取 woocommerce 产品标题
- javascript - 避免在超链接上添加事件监听器
- android - 程序类型已经存在:android.arch.core.internal.SafeIterableMap$1