Neural network 遗传算法:适应度函数不能正常工作
我有一个包含(m x n)m个实例和n个特征的二进制数据集,其中m>>n。还有一个目标变量或类属性,也是二进制的。我想用遗传算法做特征选择。我决定在GA中使用0/1字符串,其中,如果未选择特征,则为0,如果选择特征,则为1。我生成了随机的K组位字符串。因此,这些位串中的每K表示可能的特征选择。为了开发适应度函数,我用这些K个特征集(模型)中的每一个训练神经网络,然后根据单独验证集的精度,我为每个模型创建了适应度函数:-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)
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等方法)还是非线性方法(使用神经网络)?我还要看看你建议的启发式实验。既然你说你的实例比特性多,那么特性选择真的那么重要吗?