如何避免过度拟合遗传算法

时间:2015-01-04 11:00:03

标签: genetic-algorithm

我面临以下问题。 我有一个系统能够根据他们的异常分数产生一些操作的排名。为了提高性能,我实现了遗传算法来执行特征选择,使得最异常的操作出现在第一个位置。我正在做的不是特征选择,因为我没有使用二进制变量,而是在0-1之间浮动变量,其总和等于1.

目前,我有50代人口200人。我使用系统本身作为评估函数,我使用真正的正率评估解决方案的质量,计算前N个位置出现的异常操作数量(其中N是异常操作的数量)。然后作为操作员的均匀交叉,我改变个体细胞的值以进行突变。当然,每次我检查以确定个人的总和是1.最后,我使用精英主义来保存当时最好的解决方案。

我观察到一个特征具有非常高的值,这通常很重要,但并非总是如此,这导致其他特征的值非常低。我怀疑我的GA过度拟合。 你能帮我找到一个好的停止标准吗?

1 个答案:

答案 0 :(得分:12)

遗传算法和编程中的过度拟合是一个大问题,目前正在GP社区的研究重点,包括我自己。大多数研究的目标是遗传编程和分类/回归模型的演变,但它也可能与您的问题有关。有些论文可能会对你有所帮助(我也与之合作):

  • Gonçalves,Ivo和Sara Silva。 “在遗传编程中控制过度拟合的实验。”第15届葡萄牙人工智能会议论文集:人工智能进展,EPIA。卷。 84. 2011年。
  • Langdon,W。B.“最小化遗传编程测试。” RN 11.10(2011):1。
  • Gonçalves,Ivo,et al。 “用于遗传编程中过度拟合控制的随机抽样技术。”遗传编程。 Springer Berlin Heidelberg,2012。218-229。
  • Gonçalves,Ivo和Sara Silva。利用训练数据的交叉采样平衡遗传编程中的学习和过度拟合。施普林格柏林海德堡,2013年。

您可以通过在scholar.google.com中搜索他们的标题来找到论文(前两个直接以pdf格式)。

基本上,所有论文都使用的是,仅使用训练数据的子集来指导演化和每代(随机)改变该子集(对于一代中的所有个体使用相同的子集)的想法。有趣的是,实验表明,该子集越小,过度拟合就越少,直到仅使用单个元素子集。论文使用了这个想法,并通过一些调整(如在完整数据集和子集之间切换)进行扩展。但正如我在开始时所说的,所有这些都是针对符号回归(或多或少)而不是特征选择。

我个人曾经尝试过另一种方法(再次通过遗传编程进行符号回归) - 使用训练数据的子集(例如一半)来推动进化(即适应性),但是“最好的解决方案”使用剩余训练数据的结果确定。过度拟合的重要性要小得多。