首页 > 编程知识 正文

遗传算法中怎么添加约束条件,特征选择matlab程序

时间:2023-05-05 03:10:49 阅读:39603 作者:2079

遗传算法是一种基于自然选择的优化问题技术。 本文展示了如何使用遗传算法选择特征。

scikit-learn有很多众所周知的特征选择方法,但特征选择方法还有很多,远远超出了scikit-learn提供的方法。 特征选择是机器学习的重要方面之一。 但是,由于技术的迅速发展,现在是信息大爆炸的时代,由于有额外的可用数据,通常会出现额外的特征。 很多特点是多余的。 模型受到干扰,模型的解释出现问题。

我们面临的问题是确定哪些特征与问题相关。 我们的目标是具有高质量的特征。

遗传算法本文使用了“sklearn-genetic”包:

该软件包与现有的sklearn模型兼容,为遗传算法的特征选择提供了很多功能。

本文利用遗传算法进行特征选择。 但是遗传算法也可以用于超参数的优化。 这些步骤非常简单和一般化,因此适用于许多不同的领域。

特征选择特性是NP-Hard问题(所有NP问题在多项式时间复杂度中面临的问题)。 给定一组特征后,最佳配置将是这些特征的集合或子集。 这种方法是离散的选择。 对于可能的排列,确定最佳特征集的成本非常高。

遗传算法采用基于进化的方法确定最佳集。 特征选择的第一步是基于可能的特征子集生成总体(种群)。

根据该种群,利用目标任务的预测模型评价子集。 确定种群的每个成员后,将进行一场竞赛,以确定哪些子集将延续到下一代。 新一代由竞赛冠军组成,交叉(用其他冠军的特征更新冠军特征集),变异)随机引入或删除一些特征)。

大致步骤如下

生成初始种群并对种群中的各成员评分,在竞赛中多次重复选择子集进行繁殖、选择要传递的遗传物质(特征)的以上步骤,每次到世代(generation )时,该算法运行一定数量的世代后进行收集

实际操作实验基于UCI乳腺癌数据集,其中包括569个实例和30个特征。 利用该数据集,测试并比较了几种分类器的所有特征、遗传算法特征子集和采用卡方检验的5个特征。

以下是用于使用遗传算法最多选择五个特征的代码。

froms klearn.datasetsimportload _ breast _ cancerfromgenetic _ selectionimportgeneticselectioncvfromsklearn.treimportdedetic _breast_cancer () df=PD.dataframe ) data.data,columns=data.feature_names ) df [ ' target ' ]=data.tarata axis=1) y=df('target ' ).astype ) float ) estimator=decisiontreeclassifier ) model=geneticselectioncv ) estima n_population=100,crossover_proba=0.5,mutation_proba=0.2,n_generations=50,crootion_proba=0.2

初始种群(大小为“n_population”)是从特征集的样本空间随机生成的。 这些集合的范围受参数max_features限制,该参数设置每个特征子集的最大大小。

对于初始种群的各成员,使用目标测量值测量得分。 此度量是指定评估工具的性能。

举行竞赛以确定哪些成员将延续到下一代。 竞赛的成员数由tournament_size设置。 竞赛规模由根据评分指标从总体中选出的几位成员相互竞争。 优胜者被选为下一代父母。

参加竞赛的成员人数应该很少。 如果值较大,通常选择当前最好的成员。 此行为不会选择弱成员。 对于较弱的成员,性能会暂时提高,但最终由于没有机会改善较弱的选项,整体性能会降低。

GeneticSelectionCV

在自然选择中,遗传信息存储在染色体中。 在繁殖过程中一些遗传物质从父母传给孩子。 而且孩子含有来自父母双方的遗传物质。 此属性用参数“crossover_pr”

oba”表示。指定的概率表示从一个生成交叉到下一个生成的机会。还有一个参数“crossover_independent_proba”,它是一个特征将交叉到子节点的概率。

进化的一个关键方面是突变。变异降低了搜索陷入局部最优被卡住的风险。在每一代中除了交叉之外,还添加了一个随机突变。突变发生的概率由参数“mutation_prob”设置。此参数与“mutation_independent_proba”结合,这是向特征集添加特征的机会。

值得注意的是,将此概率设置得太高会将算法转换为随机选择过程。因此将此值设置在相对较低的水平。在每一代中随机引入特征可以有效地作为遗传过程的正则化。

此处使用的遗传搜索算法还有一个“n_gen_no_change”参数,用于监控种群中最好的成员是否在几代中没有发生变化。在这种情况下,搜索是否找到了一个最佳选择。是否考虑增加突变或交叉概率以进一步改变选择。

结果

遗传与动人的茉莉选择的结果如下所示。还列出了使用所有特性的基准性能。结果来自交叉验证,使用准确性作为度量标准,使用的特征数量在括号中显示。

虽然这些结果不是决定性的,但它们显示了遗传算法的好处。 模型性能基于遗传算法的特征子集,该子集始终优于基线模型和动人的茉莉子集。 逻辑回归模型是一个例外,其结果仍然具有可比性。

此外,产生的最佳特征子集小于五个特征的最大值。 具有较少特征的模型最终比较大的模型更受青睐,因为它们更简单且更易于解释。

总结

遗传算法非常通用,适用于广泛的场景。

这篇文章探讨了如何使用 sklearn-genetic 包将遗传算法用于特征选择。 这些算法也已被证明在超参数搜索和生成式设计中是有效的。

虽然不像 sklearn 中现成的方法那么传统,但遗传算法提供了一种独特而实用的特征选择方法。 这些算法优化的方式与大多数其他特征选择方法有很大不同。 该过程基于纯自然选择方法。

我鼓励数据科学家花时间在他们的工作中理解和实施遗传算法。

作者:友好的冬瓜 Warnes

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。