【发布时间】:2016-03-10 15:34:50
【问题描述】:
我有一个包含 10 个属性的数据集,然后我想减少数据集中的属性,因为我想应用遗传算法,但我对这个概念有点困惑,所以请你给我任何例子。
【问题讨论】:
标签: matlab optimization genetic-algorithm rapidminer
我有一个包含 10 个属性的数据集,然后我想减少数据集中的属性,因为我想应用遗传算法,但我对这个概念有点困惑,所以请你给我任何例子。
【问题讨论】:
标签: matlab optimization genetic-algorithm rapidminer
如果您的目标是仅选择最相关的属性,您当然可以依赖遗传算法,其中您的遗传表示(也称为“遗传密码”或“染色体”)是二进制字符串。这意味着某个属性可以存在(选择)或不存在(未选择)。
您的遗传密码确实是长度为 10 的二进制字符串,您可以通过运行以下循环来选择最佳属性集:
所以 GA 所做的,更实际地说,是创建N 个人的第一批人口。对于每个个体,由于这是第一个种群,因此默认情况下,遗传密码在 Matlab 中是完全随机的(或者您可以编写一个解释如何选择初始种群的函数),并且对于每个个体,步骤 #3、#4 和 # 5个被评估。一旦每个个体都匹配到一定的适应度值,遗传算法就会通过遗传算子(主要是交叉、精英和选择)创建下一代(即下一代个体的遗传密码)。对于下一代个体,这些遗传密码是从上一代的“最佳”个体开始评估的(即,如果您的问题是最小化问题,则为最低适应度值)个体。您可能需要检查遗传算子以及它们是如何工作的,以便更好地了解这个“生殖”过程。
如果您在 Matlab 中使用 ga() 函数,则输入参数 nvars 将等于 10; IntCon 参数将具有值 [1:10],因为您希望它们全部为 0 或 1;输入参数option(函数gaoptimset() 的输出)将具有以下参数:上限是一个包含10 个1 的向量,而下限是一个包含10 个零的向量。 ga() 函数将您的问题视为最小化问题,因此我建议将错误率用作适应度函数(或其他您旨在最小化的函数)。
要指定二进制种群,您也可以依赖gaoptimset() 中的PopulationType 输入,但我从未使用过它,所以我建议您阅读此函数的帮助(使用gaoptimset(),您也可以指定您的种群中的个体以及 GA 在停止之前将创建的代数......以及许多其他参数!)。
(*) 注意:缩小数据集并不一定意味着您实际上删除了遗传算法标记为0 的列(属性)。这可能会弄乱模式之间的差异/距离评估。在评估相异性度量时,您可以使用遗传密码作为模式的权重:10 特征模式元素乘以 10 位遗传密码,并且将乘以零的特征将没有任何重要性(权重)在相异性度量中。
【讨论】:
RapidMiner Studio 在默认存储库中附带了一些遗传算法示例。
//Samples/processes/04_Attributes/10_EvolutionaryFeatureSelection //样本/流程/04_Attributes/12_EvolutionaryWeighting //Samples/processes/06_Meta/06_EvolutionaryParameterOptimization
Optimize Selection (Evolutionary) 运算符可能是要使用的运算符。如果您查看此操作员的帮助,则可以从那里加载示例流程。此过程选择最佳属性以最大化分类模型的性能。
【讨论】:
我相信您可以使用二元遗传算法特征选择来解决您的问题。
也许这个文件可以帮助您解决问题。他们甚至包括他们关于代码的论文以供进一步理解。
【讨论】: