networkx.algorithms.graph_hashing.weisfeiler_lehman_subgraph_hashes
的用法。用法:
weisfeiler_lehman_subgraph_hashes(G, edge_attr=None, node_attr=None, iterations=3, digest_size=16)
按节点返回子图哈希字典。
字典按节点键控到越来越大的诱导子图中的散列列表,其中包含关键节点的 2*k 边内的节点,用于增加整数 k 直到包括所有节点。
该函数迭代地聚合和散列每个节点的邻域。这是通过用其散列的 1 跳邻域聚合为每个节点替换其前一次迭代中的标签来实现的。然后将新节点标签附加到每个节点的节点标签列表中。
为了在每个步骤聚合节点
edge_attr
参数,则每个相邻节点的标签都以该属性的值作为前缀,沿着从该邻居到节点 的连接边。然后对生成的字符串进行哈希处理,以将此信息压缩为固定的摘要大小。 的邻域,与 相邻的节点的所有标签都被连接起来。如果设置了因此,在 距离影响任何给定的散列节点标签。因此,我们可以说,在节点 的深度 处,我们有一个由 -hop 邻域 引起的子图的散列。
可用于创建通用Weisfeiler-Lehman图内核,或生成图或节点的特征,例如在图中生成‘words’,如‘graph2vec’算法中所示。详细信息分别参见[1]和[2]。
同构子图的哈希值是相同的,并且可以强有力地保证非同构图将获得不同的哈希值。详细信息请参见[1]。
如果没有提供节点或边属性,则将每个节点的度数用作其初始标签。否则,节点和/或边标签用于计算散列。
- G: graph:
要散列的图。可以具有节点和/或边属性。也可以没有属性。
- edge_attr: string, default=None:
边属性字典中用于散列的键。如果为 None,则忽略边标签。
- node_attr: string, default=None:
节点属性字典中用于散列的键。如果没有,并且没有给出edge_attr,则使用节点的度数作为标签。
- iterations: int, default=3:
要执行的邻居聚合数。对于较大的图表,应该更大。
- digest_size: int, default=16:
用于散列节点标签的 blake2b 散列摘要的大小(以位为单位)。默认大小为 16 位
- node_subgraph_hashes:dict
一个字典,每个键由 G 中的一个节点给出,每个值由子图给出的哈希值从键节点开始按深度顺序排列。
参数:
返回:
注意:
要在不需要子图哈希时对整个图进行哈希,请使用
weisfeiler_lehman_graph_hash
以提高效率。哈希之间的相似性并不意味着图之间的相似性。
参考:
- 1(1,2)
Shervashidze, Nino, Pascal Schweitzer, Erik Jan Van Leeuwen, Kurt Mehlhorn, and Karsten M. Borgwardt. Weisfeiler Lehman Graph Kernels. Journal of Machine Learning Research. 2011. http://www.jmlr.org/papers/volume12/shervashidze11a/shervashidze11a.pdf
- 2
Annamalai Narayanan, Mahinthan Chandramohan, Rajasekar Venkatesan, Lihui Chen, Yang Liu and Shantanu Jaiswa. graph2vec: Learning Distributed Representations of Graphs. arXiv. 2017 https://arxiv.org/pdf/1707.05005.pdf
例子:
在不同的图中寻找相似的节点: >>> G1 = nx.Graph() >>> G1.add_edges_from([ … (1, 2), (2, 3), (2, 4), (3, 5 ), (4, 6), (5, 7), (6, 7) … ]) >>> G2 = nx.Graph() >>> G2.add_edges_from([ … (1, 3), ( 2, 3), (1, 6), (1, 5), (4, 6) ... ]) >>> g1_hashes = nx.weisfeiler_lehman_subgraph_hashes(G1, iterations=3, digest_size=8) > >> g2_hashes = nx.weisfeiler_lehman_subgraph_hashes(G2, 迭代次数=3, digest_size=8)
即使 G1 和 G2 不是同构的(它们的边数不同),G1 中的节点 1 和 G2 中的节点 5 的深度为 3 的哈希序列是相似的:
>>> g1_hashes[1] ['a93b64973cfc8897', 'db1b43ae35a1878f', '57872a7d2059c1c0'] >>> g2_hashes[5] ['a93b64973cfc8897', 'db1b43ae35a1878f', '1716d2a4012fa4bc']
前 2 个 WL 子图哈希匹配。由此我们可以得出结论,这些节点周围的 4 跳邻域很可能是同构的:每次迭代都会聚合 1 跳邻域,这意味着深度 的哈希受到 跃点内的每个节点的影响。
然而,6 个跃点的邻域不再是同构的,因为它们的第 3 个散列不匹配。
这些节点可能是被分类在一起的候选者,因为它们的局部拓扑相似。
相关用法
- Python NetworkX weisfeiler_lehman_graph_hash用法及代码示例
- Python NetworkX weighted_projected_graph用法及代码示例
- Python NetworkX weakly_connected_components用法及代码示例
- Python NetworkX write_graph6用法及代码示例
- Python NetworkX within_inter_cluster用法及代码示例
- Python NetworkX write_pajek用法及代码示例
- Python NetworkX write_sparse6用法及代码示例
- Python NetworkX write_graphml用法及代码示例
- Python NetworkX write_edgelist用法及代码示例
- Python NetworkX waxman_graph用法及代码示例
- Python NetworkX windmill_graph用法及代码示例
- Python NetworkX write_gml用法及代码示例
- Python NetworkX write_gexf用法及代码示例
- Python NetworkX write_multiline_adjlist用法及代码示例
- Python NetworkX write_adjlist用法及代码示例
- Python NetworkX wiener_index用法及代码示例
- Python NetworkX write_weighted_edgelist用法及代码示例
- Python NetworkX write_gpickle用法及代码示例
- Python NetworkX negative_edge_cycle用法及代码示例
- Python NetworkX voronoi_cells用法及代码示例
- Python NetworkX numerical_edge_match用法及代码示例
- Python NetworkX inverse_line_graph用法及代码示例
- Python NetworkX LFR_benchmark_graph用法及代码示例
- Python NetworkX DiGraph.__contains__用法及代码示例
- Python NetworkX average_degree_connectivity用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.graph_hashing.weisfeiler_lehman_subgraph_hashes。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。