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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。