如何应用遗传算法来减少数据集中的属性

时间:2016-02-13 10:10:52

标签: matlab optimization genetic-algorithm rapidminer

我有一个包含10个属性的数据集,然后我想减少数据集中的属性,因为我想应用遗传算法,但我对这个概念有点困惑所以你能给我任何一个例子。

3 个答案:

答案 0 :(得分:0)

如果您的目标是仅选择最相关的属性,那么您肯定可以依赖遗传算法,其中您的遗传表示(也称为“遗传密码”或“染色体”)是二进制字符串。这意味着某个属性可以存在(选中)或不存在(未选中)。

您的遗传密码确实是长度为10的二进制字符串,您可以通过运行以下循环来选择最佳属性集:

  1. 导入原始数据集
  2. 从数据集中选择重要特征(由遗传密码给出)
  3. 根据步骤#2(*)中选定的功能缩小数据集(在步骤#1中导入)
  4. 训练并预测您的分类器
  5. 评估适应度函数(例如错误率)
  6. 转到步骤#2,直到收敛(即已创建最大代数)
  7. 因此,从更实际的角度来看,GA所做的是创建第一批N个体。对于每个人,由于这是第一个种群,遗传密码在Matlab中默认为纯随机(或者您可以编写一个解释如何选择初始种群的函数),并为每个个体执行步骤#3,#4和#评估了5个。一旦每个个体与某个适合度值匹配,GA就通过遗传算子(主要是交叉,精英和选择)创建下一代(即下一代个体的遗传密码)。对于下一代个体,这样的遗传密码从上一代中的“最佳”(即,如果您的问题是最小化问题的最低适应值)开始评估。您可能想要检查遗传算子以及它们如何工作以更好地理解这种“繁殖”过程。

    如果您在Matlab中使用ga()函数,则输入参数nvars将等于10; IntCon参数的值为[1:10],因为您希望所有参数都为0或1;输入参数option,即函数gaoptimset()的输出,将具有以下参数:上限是具有10个的向量,而下限是具有10个零的向量。 ga()函数将您的问题视为最小化问题,因此我建议将错误率用作适应度函数(或其他旨在最小化的函数)。
    要指定二进制填充,您也可以依赖PopulationType中的gaoptimset()输入,但我从未使用它,因此我建议您阅读此函数的帮助(使用gaoptimset()即可同时指定人口中的个人数量以及GA在停止之前创建的世代数......以及许多其他参数!)。

    (*)注意:缩小数据集并不一定意味着您实际删除了遗传算法标记为0的列(属性)。这可能会破坏模式之间的差异/距离评估。在评估相异性度量时,您可以使用遗传密码作为模式的权重:10个特征模式元素乘以10位遗传密码,并且将乘以零的特征将没有任何重要性(权重)在相异性度量中。

答案 1 :(得分:0)

RapidMiner Studio在默认存储库中附带了一些遗传算法示例。

//样品/进程/ 04_Attributes / 10_EvolutionaryFeatureSelection //样品/进程/ 04_Attributes / 12_EvolutionaryWeighting //样品/进程/ 06_Meta / 06_EvolutionaryParameterOptimization

<?php //Only display 3 posts in the loop $args = array( 'posts_per_page' => '3', ); frontpage_query = new WP_Query($args); if ($frontpage_query->have_posts()) : while (have_posts()) : $frontpage_query->the_post(); ?> <?php get_template_part( 'parts/loop', 'frontpage-grid' ); ?> <?php endwhile; endif; ?> 运算符可能是要使用的运算符。如果您查看此运算符的帮助,则可以从那里加载示例进程。此过程选择最佳属性以最大化分类模型的性能。

答案 2 :(得分:0)

我相信你可以使用二进制遗传算法特征选择来解决你的问题。

http://www.mathworks.com/matlabcentral/fileexchange/46961-binary-genetic-algorithm-feature-selection-zip

也许此文件可以帮助您解决问题。他们甚至将他们的论文包含在进一步理解的代码中。