无法将我的遗传算法推广到新数据

Cannot generalize my Genetic Algorithm to new Data

我编写了一个 GA 来模拟一段时间(5 年)内的少数股票 (4)。 GA 能够快速找到训练数据的最佳解决方案令人印象深刻,但我也知道这主要是因为它在训练阶段容易过度拟合。

但是,我仍然认为我可以采取一些预防措施,并对同一时期的一组看不见的测试股票进行某种预测。

我采取的一项预防措施是: 当同一天可以购买多只股票时,GA 只从列表中购买一只,并随机选择这只。我认为这种随机性可能有助于避免过度拟合?

即使过拟合还在发生,难道在GA的初代还没有过拟合的机会,不应该没有吗?

请注意,我知道没有免费午餐定理证明(我相信)没有完美的参数集可以为两个不同的数据集产生最佳输出。如果我们更进一步,这个没有免费午餐的定理是否也禁止泛化?

下图说明了这一点。 -> 蓝线是 GA 输出。 -> 红线是训练数据(由于前面提到的随机性略有不同) -> 黄线是顽固的测试数据,不具有泛化性。事实上,这是我能制作的最讨人喜欢的图表..

y轴是利润,x轴是根据各自的利润(在y轴上)从最差到最好(从左到右)排序的交易策略

到目前为止我收到的一些最佳建议(感谢 seotternerd)是关注前几代并增加训练示例的数量。下图有 12 个训练库而不是 4 个,并且只显示前 200 代(而不是 1,000 代)。再一次,这是我能制作的最讨人喜欢的图表,这次选择压力适中。它看起来确实好一点,但也不是很好。红线为测试数据

过度拟合的问题在于,在单个数据集中,区分过度拟合与在一般情况下实际变得更好是非常具有挑战性的。在许多方面,这更像是一门艺术而不是一门科学,但这里有一些一般准则:

  • GA 将学会完全按照您对健身的要求进行操作。如果你告诉它真正擅长预测一系列股票,它就会做到。但是,如果你不断交换不同的股票来进行预测,你可能会更成功地将其推广。有几种方法可以做到这一点。可能在减少过度拟合方面取得最有希望的结果的方法是对总体施加空间结构并在不同单元格中对不同测试用例进行评估,如 SCALP algorithm 中所示。您也可以按时间切换测试用例,但我用这种方法得到的结果比较复杂。
  • 你说得对,过拟合在早期应该不是什么问题。一般来说,你 运行 GA 的时间越长,越有可能过拟合。通常,人们倾向于假设在死记硬背过拟合之前先学习一般规则。然而,我不认为我真的见过这个严格的研究 - 我可以想象一个场景,其中过度拟合比找到它首先发生的一般规则要容易得多。不过,我不知道这有多普遍。提前停止也会降低 GA 找到更好的通用解决方案的能力。
  • 使用更大的数据集(四只股票并不多)将使您的 GA 不易过度拟合。
  • 随机性是一个有趣的想法。它肯定会损害 GA 寻找通用规则的能力,但它也应该减少过拟合。在不了解您的算法细节的情况下,很难说哪个会胜出。
  • 关于没有免费的午餐定理,这是一个非常有趣的想法。我不是 100% 确定,但我认为它在某种程度上确实适用于此 - 更好地拟合某些数据会使你的结果更适合其他数据,这是必要的。然而,尽管可能的股票行为范围很广,但它比一般所有可能的时间序列的范围要窄得多。这就是为什么可以使用优化算法的原因 - 我们正在处理的给定问题往往会产生相对于整个 space 可能数据相对紧密地聚集在一起的数据。因此,在我们真正关心的那组输入中,有可能变得更好。通常,您的工作能力存在某种上限,并且您可能已经达到了数据集的上限。但是泛化在一定程度上是可能的,所以我不会就此放弃。

底线:我认为改变测试用例最有希望(虽然我有偏见,因为这是我的主要研究领域之一),但它也是最具挑战性的解决方案,在实现方面。因此,作为更简单的解决方法,您可以尝试尽快停止进化或增加数据集。