plot_critical_difference¶
- plot_critical_difference(scores, labels, highlight=None, lower_better=False, test='wilcoxon', correction='holm', alpha=0.1, width=6, textspace=1.5, reverse=True, return_p_values=False)[source]¶
根据[1]中描述的方法绘制平均排名和派系。
此函数总结了在多个数据集上评估的多个估计器的相对性能。生成的图表显示了每个估计器在数轴上的平均排名。估计器通过实线分组,称为团。一个团代表一组估计器,其中在性能上没有显著差异(请参阅下面的注意事项)。请注意,这些图表本身并不是目的,而是形成估计器性能描述的一部分。
输入是每个估计器在每个问题上的汇总性能度量,其中列是估计器,行是数据集。这可以是任何度量,例如准确率/误差、F1、负对数似然、均方误差或兰德分数。
该算法首先计算所有估计器在所有问题上的排名(平均排名以处理平局),然后根据平均排名对估计器进行排序。接着,它形成群组。原始的临界差异图[1]使用事后Neymeni检验[Rbf00f587966d-4]来找到临界差异。然而,如[Rbf00f587966d-3]所讨论的,这种事后检验对测试中包含的估计器敏感:“例如,如果池中包含算法C、D、E,A和B之间的差异可能被声明为显著;如果池中包含算法F、G、H,则可能不显著。”我们的默认选项是基于成对Wilcoxon符号秩检验来寻找群组。
在执行多次成对测试以寻找团时存在两个问题:如何进行多重测试的调整,以及是执行单侧测试还是双侧测试。已知Bonferroni调整是保守的。因此,默认情况下,我们基于[1]中描述的对照测试和[Rbf00f587966d-2]中推荐的以及[Rbf00f587966d-5]中提出的使用比Bonferroni更不保守的调整的顺序方法来进行团查找。
我们使用单侧Wilcoxon符号秩检验进行所有成对测试,并使用Holm校正来调整alpha值,这涉及通过将alpha除以估计器数量减1来减少alpha。
假设我们有四个估计器,A、B、C和D,按平均排名排序。从A开始,我们测试平均排名相等的零假设,反对A的平均排名小于B的备择假设,显著性水平为alpha/(n_estimators-1)。如果我们拒绝零假设,那么我们停止,A不在一个集团中。如果我们不能拒绝零假设,我们测试A与C,继续直到我们拒绝零假设或我们已经测试了所有估计器。假设我们发现A与B是显著的。我们不为A形成集团。
然后我们继续使用第二好的估计器B作为控制来形成一个团。假设我们发现B和C之间没有差异,B和D之间也没有任何差异。我们已经为B形成了一个团:[B, C, D]。在第三次迭代中,假设我们也发现C和D之间没有差异,因此形成了第二个团,[C, D]。我们找到了两个团,但[C,D]包含在[B, C, D]中,因此是多余的。在这种情况下,我们将返回一个单一的团,[B, C, D]。
这不是一个没有问题的启发式方法:如果排名最高的估计器A明显优于B但与C没有显著差异,这不会在图中反映出来。因此,我们建议在表格中报告p值,并探索其他展示结果的方法,如成对图。在存档数据集上比较估计器只能一般性地指示整体性能,这种比较应被视为探索性分析,而不是设计实验来测试先验假设。
部分代码改编自这里: https://github.com/hfawaz/cd-diagram
- Parameters:
- scoresnp.array
形状为 (n_datasets, n_estimators) 的估计器的性能分数。
- labelslist of estimators
包含估计器名称的列表。顺序应与分数相同
- highlightdict, default = None
一个包含标签和HTML颜色的字典,用于高亮显示。顺序应与分数相同。
- lower_betterbool, default = False
表示对于分数结果来说,是否越小越好。例如,如果传递的是错误而不是准确率,请将
lower_better设置为True。- teststring, default = “wilcoxon”
用于形成小团体的测试方法,可以是“nemenyi”或“wilcoxon”
- correction: string, default = “holm”
多重测试的校正方法,其中之一为“bonferroni”、“holm”或“none”。
- alphafloat, default = 0.1
统计差异检验的临界值。
- widthint, default = 6
宽度(英寸)。
- textspaceint
图形两侧的空间(以英寸为单位)用于方法名称(默认值:1.5)。
- reversebool, default = True
如果设置为‘True’,最低等级在右侧。
- return_p_valuesbool, default = False
是否返回p值的成对矩阵。
- Returns:
- figmatplotlib.figure.Figure
- axmatplotlib.axes.Axes
- p_valuesnp.ndarray (optional)
如果 return_p_values 为 True,则返回一个 (n_estimators, n_estimators) 矩阵,其中包含成对 Wilcoxon 符号秩检验的未调整 p 值。
参考文献
机器学习研究杂志 7:1-30, 2006. .. [Rbf00f587966d-2] García S. 和 Herrera F., “关于‘在多个数据集上对分类器进行统计比较’的扩展,用于所有成对比较。” 机器学习研究杂志 9:2677-2694, 2008. .. [Rbf00f587966d-3] Benavoli A., Corani G. 和 Mangili F “我们真的应该使用基于平均排名的后验测试吗?” 机器学习研究杂志 17:1-10, 2016. .. [Rbf00f587966d-4] Nemenyi P., “无分布多重比较”。 博士论文,普林斯顿大学,1963年。 .. [Rbf00f587966d-5] Holm S., “一种简单的顺序拒绝多重测试程序。” 斯堪的纳维亚统计杂志,6:65-70, 1979.
示例
>>> from aeon.visualisation import plot_critical_difference >>> from aeon.benchmarking.results_loaders import get_estimator_results_as_array >>> methods = ["IT", "WEASEL-Dilation", "HIVECOTE2", "FreshPRINCE"] >>> results = get_estimator_results_as_array(estimators=methods) >>> plot = plot_critical_difference(results[0], methods, alpha=0.1) >>> plot.show() >>> plot.savefig("cd.pdf", bbox_inches="tight")