Neural network 遗传算法:适应度函数不能正常工作

Neural network 遗传算法:适应度函数不能正常工作,neural-network,genetic-algorithm,fitness,Neural Network,Genetic Algorithm,Fitness,我有一个包含(m x n)m个实例和n个特征的二进制数据集,其中m>>n。还有一个目标变量或类属性,也是二进制的。我想用遗传算法做特征选择。我决定在GA中使用0/1字符串,其中,如果未选择特征,则为0,如果选择特征,则为1。我生成了随机的K组位字符串。因此,这些位串中的每K表示可能的特征选择。为了开发适应度函数,我用这些K个特征集(模型)中的每一个训练神经网络,然后根据单独验证集的精度,我为每个模型创建了适应度函数:- fitness=tradeoffk*Valacc+(1-tradeoffk)

我有一个包含(m x n)m个实例和n个特征的二进制数据集,其中m>>n。还有一个目标变量或类属性,也是二进制的。我想用遗传算法做特征选择。我决定在GA中使用0/1字符串,其中,如果未选择特征,则为0,如果选择特征,则为1。我生成了随机的K组位字符串。因此,这些位串中的每K表示可能的特征选择。为了开发适应度函数,我用这些K个特征集(模型)中的每一个训练神经网络,然后根据单独验证集的精度,我为每个模型创建了适应度函数:-

fitness=tradeoffk*Valacc+(1-tradeoffk)*(ones(no_of_models,1)*n-featSel)/maxFeat;
该适应度函数类似于通过训练的特征数量(featSel)和神经网络报告的验证精度之间的折衷。我将不同的值设置为tradeoffk,如0.5、0.2和0.8

我对遗传算法进行了10次迭代,每次迭代进行20次,并试图检查适应度函数是如何增长的。然而,适应度函数没有显著变化。在遗传算法中,通常期望适应度函数增长,然后稳定,但在这里,它增长非常缓慢

例如,这是其中一个迭代的示例输出:-

gen=001  avgFitness=0.808   maxFitness=0.918
gen=002  avgFitness=0.808   maxFitness=0.918
gen=003  avgFitness=0.815   maxFitness=0.918
gen=004  avgFitness=0.815   maxFitness=0.918
gen=005  avgFitness=0.817   maxFitness=0.918
gen=006  avgFitness=0.818   maxFitness=0.918
gen=007  avgFitness=0.818   maxFitness=0.918
gen=008  avgFitness=0.819   maxFitness=0.918
gen=009  avgFitness=0.819   maxFitness=0.918
gen=010  avgFitness=0.819   maxFitness=0.918
gen=011  avgFitness=0.819   maxFitness=0.918
gen=012  avgFitness=0.819   maxFitness=0.918
gen=013  avgFitness=0.819   maxFitness=0.918
gen=014  avgFitness=0.819   maxFitness=0.918
gen=015  avgFitness=0.819   maxFitness=0.918
gen=016  avgFitness=0.819   maxFitness=0.918
gen=017  avgFitness=0.819   maxFitness=0.918
此外,神经网络需要花费大量时间进行训练(20代人的训练时间超过2小时)
有谁能提出进一步的建议吗?可能哪里出了问题

您可以使用验证模型代替神经网络。训练要快得多,但当然不能表示非线性关系。你试过了吗?当它尝试构建模型并同时选择特征时,它确实内置了特征选择。您可以尝试一下,它有一个非常强大的遗传编程实现,还包括分类。

好的。我不确定数据是线性关系还是非线性关系,我只知道它是一个二进制数据集,类变量也是二进制的。那么GA在这种情况下工作得好吗?您将如何对数据进行建模?您应该使用线性方法(因此可以使用LDA等方法)还是非线性方法(使用神经网络)?我还要看看你建议的启发式实验。既然你说你的实例比特性多,那么特性选择真的那么重要吗?