如何检查修改后的遗传算法是否明显优于原始算法?

机器算法验证 t检验 遗传算法 多重比较
2022-03-04 15:45:23

我的问题涉及如何能够断言“改进的”进化算法确实得到了改进(至少从统计学的角度来看),而不仅仅是随机运气(考虑到这些算法的随机性,这是一个问题)。

假设我正在处理一个标准 GA(之前)和一个“改进的”GA(之后)。我有一套 8 个测试问题。

我重复运行这两种算法,例如 10 次(?)通过 8 个测试问题中的每一个,并记录需要多少代才能提出解决方案。我将从相同的初始随机种群开始(使用相同的种子)。

我是否会使用配对 t 检验来验证每个测试问题的平均值之间的任何差异(希望是改进)是否具有统计学意义?我应该为每个测试/对运行这些算法超过 10 次吗?

我应该注意哪些陷阱?我假设我可以将这种方法用于任何(进化)算法比较。

还是我真的走错了路?我基本上是在寻找一种方法来比较进化算法的两种实现,并报告一个与另一个相比的工作情况。

谢谢!

4个回答

尽管我有大约 200 个测试用例,但我使用配对 t 检验将我的算法与 GA 进行比较。您可以使用非参数替代方法,例如 Wilcoxon 秩检验。无论您使用什么来测试统计显着性,请记住“现实生活”中的显着性。如果您的算法提供的性能改进低于测量限制,或低于任何实际利益,那么即使它在统计上显着(即“好”p 值),也没关系。

您不会使用配对样本 t 检验。这样做的原因是,不能假设特定的随机种子以相同的方式偏向两种算法的结果,即使该随机种子仅用于生成种群而不用于后续操作,例如变异和选择。换句话说,逻辑上可能的是,在一种算法下,给定的种群将进化得比该算法的平均值更好,但在另一种算法下会以相反的方式表现。如果您有理由相信两种算法的种子和性能之间存在类似的联系,您可以使用 Pearson 相关系数来比较每个种子在两种测试中的性能。但是,默认情况下,我会假设没有联系,尤其是在您拥有相当多的人口的情况下。

就运行超过 10 次而言,当然更多的样本总是更好,尽管您的计算资源显然可能是一个限制因素。生成功率曲线可能是一个好主意,它将向您显示在您的 alpha 水平上统计显着性所需的差异大小与 SD 和 n 之间的关系。换句话说,在给定的 n 和 SD 下,差异必须有多大?http://moon.ouhsc.edu/dthompso/CDM/power/hypoth.htm <-- 功率曲线信息见页面底部。

最后,如果您正在运行一个实际上具有已定义停止点的遗传算法,就像您的那样,您可以对找到解决方案所需的代数进行简单的非配对 t 检验。否则,量化算法性能往往会变得有点棘手

就陷阱和算法效率对其他问题的普遍性而言,在将算法移植到其他问题时,您真的不能将算法的有效性视为理所当然。以我的经验,遗传算法通常必须针对您应用它们的每个新问题进行相当多的调整。话虽如此,根据您的 8 项测试集的多样性,它们可能会为您提供一些关于您的结果的可概括性以及它们可概括的应用范围的指示。

这可能不是您想听到的,但据我所知,新算法只是与基准函数上的旧算法进行了比较。

例如这里所做的: Efficient Natural Evolution Strategies, (Schaul, Sun Yi, Wierstra, Schmidhuber)

我使用 t 检验(非配对,即独立)来比较我的遗传算法的 10 次运行与爬山算法的 10 次运行。我进行了一次 t 检验以查看找到的最佳解决方案的适应度之间是否存在显着差异,并进行了另一项 t 检验以查看完成时间之间是否存在显着差异。我用这个在线计算器来做这件事。剪切和粘贴选项非常方便。