1

我有一个包含 (mxn) 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 次 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 小时)谁能提供进一步的建议,它可能哪里出错了?!

4

1 回答 1

0

您可以对验证模型使用线性判别分析 (LDA)而不是神经网络。训练起来要快得多,但当然不能代表非线性关系。你试过基因编程吗?它确实具有内置的特征选择,因为它试图同时构建模型和选择特征。你可以试试HeuristicLab,它有一个非常强大的遗传编程实现,还包括分类。

于 2013-05-20T22:29:11.360 回答