我有一个(m×n)m个实例的二进制数据集和n个具有m>>的特征。 ñ。并且有一个目标变量或类属性,也是二进制。我想用遗传算法进行特征选择。我决定在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次GA。每次迭代都进行了20次进行,并尝试检查适应度函数的增长方式。但是,适应度函数没有显着变化。在GA中,通常预期适应度函数会增长然后稳定,但此处它的增长非常小。
例如,这是其中一次迭代的示例输出: -
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小时) 谁能提出进一步的建议,哪里可能出错?!
答案 0 :(得分:0)
您可以使用linear-discriminant analysis (LDA)作为验证模型而不是神经网络。训练要快得多,但当然不能代表非线性关系。你试过genetic programming吗?它内置了功能选择,因为它尝试构建模型并同时选择功能。你可以给HeuristicLab一个尝试,它有一个非常强大的遗传编程实现,也包括分类。