验证CD算法排名¶
注意
一旦从给定网络中提取出一组替代聚类,是否有方法根据一组目标适应度函数选择最佳的一个?
假设你在给定的图G上运行了一组社区发现算法X,并且你为每个获得的聚类计算了一组适应度分数Y。
有没有办法根据Y表示的质量对获得的聚类进行排名?
是否有可能验证所获得排名的统计显著性?
我们是否可以在比较不同的聚类时做同样的事情(例如,使用NMI、NF1、ARI、AMI…)?
不用担心,cdlib
已经为你准备好了!
(是的,我们知道社区检测是一个不适定问题,对于这个问题,没有免费的午餐可以期待……然而,我们在这里并不追求一个通用的排名!)
按适应度评分排名¶
- class cdlib.evaluation.FitnessRanking(graph: Graph, partitions: list)¶
- bonferroni_post_hoc() list ¶
使用通过排名测试获得的枢轴量执行Bonferroni-Dunn事后检验。 检验控制方法(最佳排名聚类)的排名与其他每种方法不同的假设。
- Returns:
一个命名元组列表,报告最佳排名聚类与其他聚类之间的成对统计显著比较(以z值、p值、调整后的p值为准)
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.demon(g, 0.25) >>> coms3 = algorithms.label_propagation(g) >>> coms4 = algorithms.angel(g, 0.6) >>> rk = evaluation.FitnessRanking(g, [coms2, coms, coms3, coms4]) >>> rk.rank(evaluation.fraction_over_median_degree) >>> rk.rank(evaluation.edges_inside) >>> rk.rank(evaluation.cut_ratio) >>> rk.rank(evaluation.erdos_renyi_modularity) >>> rk.rank(evaluation.newman_girvan_modularity) >>> rk.rank(evaluation.modularity_density) >>> rnk, p_value = rk.friedman_ranking() >>> pc = rk.bonferroni_post_hoc()
- References:
O.J. Dunn, 多重均值比较, 美国统计协会杂志 56 (1961) 52–64.
- friedman_ranking() [<class 'list'>, <class 'float'>] ¶
执行弗里德曼排名检验。 检验假设,在一组k个相关样本组中(其中k >= 2),至少有两组代表具有不同中位数值的总体。
- Returns:
一个元组,其第一个元素是一个字典,为每个Clustering对象分配一个排名,而第二个是与排名相关的p值。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.demon(g, 0.25) >>> coms3 = algorithms.label_propagation(g) >>> coms4 = algorithms.angel(g, 0.6) >>> rk = evaluation.FitnessRanking(g, [coms2, coms, coms3, coms4]) >>> rk.rank(evaluation.fraction_over_median_degree) >>> rk.rank(evaluation.edges_inside) >>> rk.rank(evaluation.cut_ratio) >>> rk.rank(evaluation.erdos_renyi_modularity) >>> rk.rank(evaluation.newman_girvan_modularity) >>> rk.rank(evaluation.modularity_density) >>> rnk, p_value = rk.friedman_ranking()
- References:
弗里德曼,使用排名以避免在方差分析中隐含的正态性假设,《美国统计协会杂志》32(1937)674–701。
D.J. Sheskin, 参数和非参数统计程序手册. crc 出版社, 2003, 测试 25: 弗里德曼双向秩方差分析
- rank(scoring_function: Callable[[Graph, object], object]) [<class 'str'>, <class 'dict'>] ¶
对所有需要排名的聚类对象计算指定的评分函数。
- Parameters:
scoring_function – 来自 cdlib.evaluation 的适应度函数
- Returns:
一个元组,其第一个元素是scoring_function名称,而第二个元素是一个字典,字典的键是聚类名称,值是计算得到的分数。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.demon(g, 0.25) >>> coms3 = algorithms.label_propagation(g) >>> coms4 = algorithms.angel(g, 0.6) >>> rk = evaluation.FitnessRanking(g, [coms2, coms, coms3, coms4]) >>> rk.rank(evaluation.fraction_over_median_degree)
- topsis() [<class 'list'>, None] ¶
TOPSIS(Technique for Order of Preference by Similarity to Ideal Solution)是一种多标准决策分析方法。 TOPSIS基于的概念是,选择的替代方案应具有与正理想解(PIS)最短的几何距离,以及与负理想解(NIS)最长的几何距离。
- Returns:
一个元组,其第一个元素是排名字典,为每个聚类对象分配一个TOPSIS分数,而第二个元素是None(以保持与friedman_ranking的一致性)。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.demon(g, 0.25) >>> coms3 = algorithms.label_propagation(g) >>> coms4 = algorithms.angel(g, 0.6) >>> rk = evaluation.FitnessRanking(g, [coms2, coms, coms3, coms4]) >>> rk.rank(evaluation.fraction_over_median_degree) >>> rk.rank(evaluation.edges_inside) >>> rk.rank(evaluation.cut_ratio) >>> rk.rank(evaluation.erdos_renyi_modularity) >>> rk.rank(evaluation.newman_girvan_modularity) >>> rk.rank(evaluation.modularity_density) >>> rnk, _ = rk.topsis()
- References:
Hwang, C.L.; Yoon, K. (1981). 多属性决策方法与应用. 纽约: Springer-Verlag.
Yoon, K. (1987). “离散妥协情况的和解”. 运筹学会杂志. 38 (3): 277–286. doi:10.1057/jors.1987.44.
方法¶
|
对所有需要排名的聚类对象计算指定的评分函数。 |
通过相似度到理想解的偏好排序技术(TOPSIS)是一种多标准决策分析方法。 |
|
执行弗里德曼排名测试。 |
|
使用通过排名测试获得的枢轴量执行Bonferroni-Dunn事后检验。 |
通过聚类相似性进行排名¶
- class cdlib.evaluation.ComparisonRanking(partitions: list)¶
- bonferroni_post_hoc() list ¶
使用通过排名测试获得的枢轴量执行Bonferroni-Dunn事后检验。 检验控制方法(最佳排名聚类)的排名与其他每种方法不同的假设。
- Returns:
一个命名元组列表,报告最佳排名聚类与其他聚类之间的成对统计显著比较(以z值、p值、调整后的p值为准)
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.kclique(g, 2) >>> coms3 = algorithms.label_propagation(g) >>> rk = evaluation.ComparisonRanking([coms, coms2, coms3]) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_LFK) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_MGH) >>> rk.rank(evaluation.omega) >>> rnk, p_value = rk.friedman_ranking() >>> pc = rk.bonferroni_post_hoc()
- References:
O.J. Dunn, 多重均值比较, 美国统计协会杂志 56 (1961) 52–64.
- friedman_ranking() [<class 'list'>, <class 'float'>] ¶
执行弗里德曼排名检验。 检验假设,在一组k个相关样本组中(其中k >= 2),至少有两组代表具有不同中位数值的总体。
- Returns:
一个元组,其第一个元素是一个字典,为每个Clustering对象分配一个排名,而第二个是与排名相关的p值。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.kclique(g, 2) >>> coms3 = algorithms.label_propagation(g) >>> rk = evaluation.ComparisonRanking([coms, coms2, coms3]) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_LFK) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_MGH) >>> rk.rank(evaluation.omega) >>> rnk, p_value = rk.friedman_ranking()
- References:
弗里德曼,使用排名以避免在方差分析中隐含的正态性假设,《美国统计协会杂志》32(1937)674–701。
D.J. Sheskin, 参数和非参数统计程序手册. crc 出版社, 2003, 测试 25: 弗里德曼双向秩方差分析
- rank(comparison_function: Callable[[object, object], object])¶
对所有需要排名的聚类对象计算指定的比较函数。
- Parameters:
scoring_function – 来自 cdlib.evaluation 的适应度函数
- Returns:
一个元组,其第一个元素是scoring_function名称,而第二个元素是一个字典,字典的键是聚类名称,值是计算得到的分数。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.kclique(g, 2) >>> coms3 = algorithms.label_propagation(g) >>> rk = evaluation.ComparisonRanking([coms, coms2, coms3]) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_LFK)
- topsis() [<class 'list'>, None] ¶
TOPSIS(Technique for Order of Preference by Similarity to Ideal Solution)是一种多标准决策分析方法。 TOPSIS基于的概念是,选择的替代方案应具有与正理想解(PIS)最短的几何距离,以及与负理想解(NIS)最长的几何距离。
- Returns:
一个元组,其第一个元素是排名字典,为每个聚类对象分配一个TOPSIS分数,而第二个元素是None(以保持与friedman_ranking的一致性)。
- Example:
>>> import networkx as nx >>> from cdlib import evaluation >>> from cdlib import algorithms >>> g = nx.karate_club_graph() >>> coms = algorithms.louvain(g) >>> coms2 = algorithms.kclique(g, 2) >>> coms3 = algorithms.label_propagation(g) >>> rk = evaluation.ComparisonRanking([coms, coms2, coms3]) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_LFK) >>> rk.rank(evaluation.overlapping_normalized_mutual_information_MGH) >>> rk.rank(evaluation.omega) >>> rnk, _ = rk.topsis()
- References:
Hwang, C.L.; Yoon, K. (1981). 多属性决策方法与应用. 纽约: Springer-Verlag.
Yoon, K. (1987). “离散妥协情况的和解”. 运筹学会杂志. 38 (3): 277–286. doi:10.1057/jors.1987.44.
方法¶
|
计算指定的比较函数,以对所有需要排名的聚类对象进行排名。 |
通过相似度到理想解的偏好排序技术(TOPSIS)是一种多标准决策分析方法。 |
|
执行弗里德曼排名测试。 |
|
使用通过排名测试获得的枢轴量执行Bonferroni-Dunn事后检验。 |