评估与基准测试

社区发现算法的评估并非易事。 cdlib 实现了两种评估策略:

  • 内部通过适应度分数进行评估;

  • 外部通过分区比较进行评估。

此外,cdlib 集成了标准的合成网络基准带有注释的真实网络,从而允许根据真实情况测试识别的社区。

最后,cdlib 还提供了一种方法,可以在给定的输入图上生成排名聚类结果算法。

注意

以下列表与cdlibGitHub主分支中可用的CD评估方法对齐。

内部评估:适应度分数

适应度函数允许总结计算出的社区集合的特征。cdlib实现了以下质量评分:

avg_distance(graph, communities, **kwargs)

平均距离。

avg_embeddedness(graph, communities, **kwargs)

社区内节点的平均嵌入度。

average_internal_degree(graph, community[, ...])

社区集合的平均内部度数。

avg_transitivity(graph, communities, **kwargs)

平均传递性。

conductance(graph, community[, summary])

指向社区外部的总边体积的比例。

cut_ratio(graph, community[, summary])

现有边(在所有可能的边中)离开社区的比例。

edges_inside(graph, community[, summary])

社区内部的边数。

expansion(graph, community[, summary])

每个社区节点指向集群外部的边的数量。

fraction_over_median_degree(graph, community)

社区节点中内部度高于中位度值的比例。

hub_dominance(graph, communities, **kwargs)

中心主导地位。

internal_edge_density(graph, community[, ...])

社区集合的内部密度。

normalized_cut(graph, community[, summary])

Cut-Ratio的归一化变体

max_odf(graph, community[, summary])

社区节点指向社区外部的边的最大比例。

avg_odf(graph, community[, summary])

社区节点指向社区外部的边的平均比例。

flake_odf(graph, community[, summary])

在S中,指向社区内部的边数少于指向社区外部的边数的节点比例。

scaled_density(graph, communities, **kwargs)

缩放密度。

significance(graph, communities, **kwargs)

显著性估计了在随机图中出现密集社区分区的可能性。

size(graph, communities, **kwargs)

大小是社区中节点的数量

surprise(graph, communities, **kwargs)

Surprise 是一种统计方法,提出了一种质量度量,假设顶点之间的边根据超几何分布随机出现。

triangle_participation_ratio(graph, community)

属于三元组的社区节点的比例。

purity(communities)

纯度是社区内节点携带的最频繁标签的频率的乘积

在适应度函数中,一个定义良好的度量家族是基于模块化的:

erdos_renyi_modularity(graph, communities, ...)

Erdos-Renyi 模块度是 Newman-Girvan 模块度的一个变体。

link_modularity(graph, communities, **kwargs)

为具有重叠社区的有向图设计的质量函数。

modularity_density(graph, communities[, lmbd])

模块化密度是几种旨在缓解基于模块化度量的分辨率限制问题的提议之一。

modularity_overlap(graph, communities[, weight])

确定图G上分区C的重叠模块性。

newman_girvan_modularity(graph, communities, ...)

计算分区内社区边的比例与根据零模型分布的预期此类边数之间的差异。

z_modularity(graph, communities, **kwargs)

Z-modularity 是为了避免分辨率限制而提出的标准模块化的另一种变体。

一些测量将返回一个FitnessResult实例,该实例包含了计算指标的最小值/最大值/平均值/标准差。

FitnessResult(min, max, score, std)

外部评估:分区比较

比较不同的图分区以评估它们的相似性通常很有用。 cdlib 实现了以下分区比较分数:

adjusted_mutual_information(first_partition, ...)

两个聚类之间的调整互信息。

mi(first_partition, second_partition)

此函数计算两个聚类之间的互信息(MI)。

rmi(first_partition, second_partition[, ...])

此函数计算两个聚类之间的简化互信息(RMI)。

normalized_mutual_information(...)

两个聚类之间的归一化互信息。

overlapping_normalized_mutual_information_LFK(...)

两个聚类之间的重叠归一化互信息。

overlapping_normalized_mutual_information_MGH(...)

两个聚类之间的重叠归一化互信息。

variation_of_information(first_partition, ...)

两个节点分区之间的信息变化。

rand_index(first_partition, second_partition)

此函数计算两个聚类之间的兰德指数。

adjusted_rand_index(first_partition, ...)

调整后的兰德指数以考虑机会因素。

omega(first_partition, second_partition)

重叠、完全覆盖、网络聚类的相似性指数。

f1(first_partition, second_partition)

计算输入分区中最佳算法匹配的平均F1分数。

nf1(first_partition, second_partition)

计算输入分区中最佳算法匹配的归一化F1分数。

southwood_index(first_partition, ...)

此函数计算两个聚类之间的Southwood指数。

rogers_tanimoto_index(first_partition, ...)

此函数计算两个聚类之间的Rogers和Tanimoto指数。

sorensen_index(first_partition, second_partition)

此函数计算两个聚类之间的Sorensen。

dice_index(first_partition, second_partition)

此函数计算两个聚类之间的Czekanowski。

czekanowski_index(first_partition, ...)

此函数计算两个聚类之间的Czekanowski指数。

fowlkes_mallows_index(first_partition, ...)

此函数计算两个聚类之间的Fowlkes和Mallows指数

jaccard_index(first_partition, second_partition)

此函数计算两个聚类之间的Jaccard指数。

sample_expected_sim(first_partition, ...[, ...])

此函数计算从六种随机模型之一绘制的聚类之间所有成对比较的预期相似度。

overlap_quality(first_partition, ...)

此函数计算两个(重叠)聚类之间的重叠质量。

geometric_accuracy(first_partition, ...)

此函数计算两个(重叠)聚类之间的几何精度。

classification_error(first_partition, ...)

此函数计算两个聚类之间的Jaccard指数。

ecs(first_partition, second_partition[, ...])

以元素为中心的聚类相似性。

一些测量将返回一个MatchingResult实例,该实例将计算出的指数的平均值和标准差值结合在一起。

MatchingResult(score, std)

合成基准测试

外部评估分数可以有效地用于比较同一网络的不同聚类,并评估识别的节点聚类在多大程度上与已知的真实分区相匹配。

为了促进这种标准的评估任务,cdlib 提供了一组标准的合成网络生成器,这些生成器提供了拓扑社区的真实标注。

特别是,cdlib 提供了以下基准测试:

  • static 社区发现;

  • 动态 社区发现;

  • 功能丰富(即节点属性)的社区发现。

所有详细信息可以在专用页面上找到。

带有注释社区的社交网络

尽管将拓扑分区与注释的“语义”分区进行评估并不是最安全的路径之一 [Peel17]cdlib 原生集成了具有真实社区的中等规模网络数据集。

由于这些数据集的规模不可忽视,我们设计了一个简单的API来透明地从专用的远程存储库中收集它们。

有关远程数据集的所有详细信息可以在专用页面上找到。

[Peel17]

Peel, Leto, Daniel B. Larremore, 和 Aaron Clauset. “关于元数据和网络社区检测的真相。” 《科学进展》 3.5 (2017): e1602548.