我面临以下问题。 我有一个系统能够根据他们的异常分数产生一些操作的排名。为了提高性能,我实现了遗传算法来执行特征选择,使得最异常的操作出现在第一个位置。我正在做的不是特征选择,因为我没有使用二进制变量,而是在0-1之间浮动变量,其总和等于1.
目前,我有50代人口200人。我使用系统本身作为评估函数,我使用真正的正率评估解决方案的质量,计算前N个位置出现的异常操作数量(其中N是异常操作的数量)。然后作为操作员的均匀交叉,我改变个体细胞的值以进行突变。当然,每次我检查以确定个人的总和是1.最后,我使用精英主义来保存当时最好的解决方案。
我观察到一个特征具有非常高的值,这通常很重要,但并非总是如此,这导致其他特征的值非常低。我怀疑我的GA过度拟合。 你能帮我找到一个好的停止标准吗?
答案 0 :(得分:12)
遗传算法和编程中的过度拟合是一个大问题,目前正在GP社区的研究重点,包括我自己。大多数研究的目标是遗传编程和分类/回归模型的演变,但它也可能与您的问题有关。有些论文可能会对你有所帮助(我也与之合作):
您可以通过在scholar.google.com中搜索他们的标题来找到论文(前两个直接以pdf格式)。
基本上,所有论文都使用的是,仅使用训练数据的子集来指导演化和每代(随机)改变该子集(对于一代中的所有个体使用相同的子集)的想法。有趣的是,实验表明,该子集越小,过度拟合就越少,直到仅使用单个元素子集。论文使用了这个想法,并通过一些调整(如在完整数据集和子集之间切换)进行扩展。但正如我在开始时所说的,所有这些都是针对符号回归(或多或少)而不是特征选择。
我个人曾经尝试过另一种方法(再次通过遗传编程进行符号回归) - 使用训练数据的子集(例如一半)来推动进化(即适应性),但是“最好的解决方案”使用剩余训练数据的结果确定。过度拟合的重要性要小得多。