【问题标题】:Cannot generalize my Genetic Algorithm to new Data无法将我的遗传算法推广到新数据
【发布时间】:2015-04-27 22:14:37
【问题描述】:

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

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

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

即使过拟合还在发生,不应该在最初几代的 GA 中不存在,因为它还没有机会过拟合吗?

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

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

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

到目前为止,我收到的一些最佳建议(感谢 seaotternerd)是专注于前几代并增加训练示例的数量。下图有 12 个训练库存,而不仅仅是 4 个,并且只显示了前 200 代(而不是 1000 代)。同样,这是我能制作的最讨人喜欢的图表,这一次选择压力中等。它当然看起来好一点,但也不是很棒。红线是测试数据。

【问题讨论】:

  • y 轴代表交易策略,这些策略根据获利多少进行排序(x 轴)。因此,交易策略会随着您从左到右而改进。我希望这是有道理的。
  • 您确定没有切换 X 轴和 Y 轴吗?似乎每个 X 值都有不同的 Y 值,这让我认为利润在 Y 上。
  • 对不起,你是对的。 X = 策略,Y = 利润。哦!
  • 好的,现在说得通了。

标签: statistics genetic-algorithm prediction generalization


【解决方案1】:

过拟合的问题在于,在单个数据集中,除了在一般情况下实际上变得更好之外,很难区分过拟合。在许多方面,这更像是一门艺术而不是一门科学,但这里有一些一般准则:

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

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

【讨论】:

  • 感谢您证实了我的一些怀疑并提供了一些新建议。头皮听起来很有趣。我尝试将代数从 1000 减少到 200,并将训练库的数量从 4 增加到 12。可能有非常小的改进,但仅通过观察很难判断。
  • 我害怕那个。第二张图令人鼓舞的一点是,测试数据集上的表现似乎与训练集上的表现相关。当然,两者都非常低。一些更传统的 GA 改进调整可能会有所帮助(例如,您是否已经没有多样性了?有一些解决方案)。但这通常被认为是一个难题,因此可能没有一个很好的简单解决方案。如果你试试 SCALP 或类似的东西,我很想知道它是怎么回事!我认为它应该得到更多的关注。
猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 2017-10-02
  • 2011-01-11
  • 2020-10-08
  • 2019-02-23
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
相关资源
最近更新 更多