Algorithm 基于遗传算法的稀疏参数选择

Algorithm 基于遗传算法的稀疏参数选择,algorithm,genetic-algorithm,data-mining,Algorithm,Genetic Algorithm,Data Mining,我面临一个参数选择问题,我想用遗传算法(GA)解决这个问题。我应该在3000个可能的参数中选择不超过4个。使用二元染色体表示似乎是一种自然选择。评估功能将惩罚过多的“选定”属性,如果属性的数量可接受,则评估选择 问题是,在这些稀疏条件下,遗传算法很难改善种群。无论是平均健身成本,还是“最差”个体的健身水平,都不会随着世代而提高。我所看到的只是最佳个人得分的轻微(甚至微小)提高,我想这是随机抽样的结果 使用参数的索引对问题进行编码也不起作用。这很可能是因为染色体是定向的,而选择问题不是(即染色体[

我面临一个参数选择问题,我想用遗传算法(GA)解决这个问题。我应该在3000个可能的参数中选择不超过4个。使用二元染色体表示似乎是一种自然选择。评估功能将惩罚过多的“选定”属性,如果属性的数量可接受,则评估选择

问题是,在这些稀疏条件下,遗传算法很难改善种群。无论是平均健身成本,还是“最差”个体的健身水平,都不会随着世代而提高。我所看到的只是最佳个人得分的轻微(甚至微小)提高,我想这是随机抽样的结果

使用参数的索引对问题进行编码也不起作用。这很可能是因为染色体是定向的,而选择问题不是(即染色体[1,2,3,4];[4,3,2,1];[3,2,4,1]等是相同的)

你会建议什么问题


如果这很重要,我会使用。

我对PyEvolve不太熟悉,但从我对遗传算法的记忆来看,你需要考虑4个步骤

  • 绒毛膜体评估(你可能已经弄清楚了)
  • 染色体初始化
  • 染色体交叉
  • 染色体突变
  • 我想你可以用列表来做这件事。您需要重载一些运算符,但看起来一件简单的事情是保留列表表示,只需在返回染色体之前对它们进行数字排序

    我需要更多地了解你的问题,但这里是我的建议。因为参数的数量是可变的,所以需要对染色体中的参数数量给出某种概率分布。这里我假设1,2,3,4是一个均匀随机数,但是如果你更喜欢的话,你可以尝试其他的方法。我将把这个分布称为P\n

  • 初始化。用(至少)3000条染色体为你的种群播种。把这些叫做c_1,…,c_3000。从P_n中画n_j。把j放入c_j。从剩余参数中选择具有均匀随机分布的剩余n_j-1参数
  • 交叉。假设我们有两条染色体。C_1和C_2。我们将创建(并返回)染色体C_3。以1/2的概率从{n_1,n_2}中选择n_3。现在将C_1和C_2的参数放入一个列表中(并使它们唯一,因此,如果C_1和C_2都包含参数1,那么它只在列表中出现一次)。从关节列表中提取n_3参数并将其放入染色体C_3
  • 突变。给定染色体C_1,从P_n中画出n_1*。如果n_1*小于n_1,则从C_1中随机删除元素,直到有n_1*个元素。如果n_1*=n_1,则从C_1中随机选择1个元素,并用从非C_1中随机选择的参数替换它。如果n_1*>n_1,则随机将元素添加到C_1,直到其大小为n_1*

  • 现在,有很多方法可以做到这一点,所以请做对您的问题最有意义的事情。

    我认为由于参数数量的限制,奇异值分解()在这里可能更合适。

    您需要更具体一些。模型选择(即您的参数选择问题)非常困难。你的第二和第三段告诉我,你认为你没有看到足够的混合(即参数空间的探索)。是这样吗?是的,这正是我认为的“从3000个中选择不超过4个”似乎不是遗传问题,你能解释一下你在做什么吗。请更正:“现在将C_1和C_3的参数放在一个列表中”到:现在将C_1和C_2的参数放在一个列表中(注意C_2而不是C_3)是的。你是不是通过这种方式对参数空间进行了很好的探索?谢谢你,莱夫。你的建议对我很有吸引力。这种方法被描述(出版)了吗这是我编造的,但肯定是基于类似的问题。你能联系我吗:lists\u borisgorelik.net