networkx.algorithms.similarity.simrank_similarity

simrank_similarity(G, source=None, target=None, importance_factor=0.9, max_iterations=100, tolerance=0.0001)[源代码]

返回图中节点的simrank相似性 G .

simrank是一个相似性度量,它表示“如果两个对象被相似的对象引用,则它们被认为是相似的。” 1.

论文中的伪代码定义是:

def simrank(G, u, v):
    in_neighbors_u = G.predecessors(u)
    in_neighbors_v = G.predecessors(v)
    scale = C / (len(in_neighbors_u) * len(in_neighbors_v))
    return scale * sum(simrank(G, w, x)
                       for w, x in product(in_neighbors_u,
                                           in_neighbors_v))

在哪里? G 是图表, u 是源头, v 是目标,而且 C 是介于0和1之间的浮点衰减或重要性因子。

确定节点相似性的simrank算法定义于 2.

参数
  • GNETWorkX图 )--网络图

  • 来源node )--如果指定了此选项,则返回的字典将映射每个节点 v 在图中的相似性 sourcev .

  • 目标node )--如果两者都是 sourcetarget 是指定的,之间的相似度值 sourcetarget 返回。如果 target 已指定,但 source 不是,此参数被忽略。

  • importance_factor浮动 )--间接邻居相对于直接邻居的相对重要性。

  • max_iterations整数 最大迭代次数。

  • 容忍浮动 )--用于检查收敛性的误差容限。当算法的迭代发现相似度值的变化不超过这个数量时,算法停止。

返回

相似性 ——如果 sourcetarget 都是 None ,这将返回字典,其中键是节点对,值是节点对的相似性。如果 source 不是 None 但是 target 这将返回字典映射节点到 source 还有那个节点。如果两者都不是 source 也不 targetNone ,这将返回给定节点对的相似性值。

返回类型

dictionary or float

实际案例

如果图的节点从零到 n - 1 在哪里 n 是图形中的节点数,可以根据此函数的返回值创建simrank矩阵,其中节点数是矩阵的行和列索引:

>>> import networkx as nx
>>> from numpy import array
>>> G = nx.cycle_graph(4)
>>> sim = nx.simrank_similarity(G)
>>> lol = [[sim[u][v] for v in sorted(sim[u])] for u in sorted(sim)]
>>> sim_array = array(lol)

引用

1

https://en.wikipedia.org/wiki/SimRank

2

杰赫和威多姆。”Simrank:结构上下文相似性的度量”,见KDD'02:第八届ACM SIGKDD知识发现和数据挖掘国际会议论文集,第538-543页。ACM出版社,2002年。