Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于遗传算法的特征选择:通过自然选择过程确定最优特征集

基于遗传算法的特征选择:通过自然选择过程确定最优特征集

作者头像
deephub
发布于 2021-09-15 06:25:09
发布于 2021-09-15 06:25:09
2.7K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

遗传算法是一种基于自然选择的优化问题的技术。在这篇文章中,我将展示如何使用遗传算法进行特征选择。

虽然 scikit-learn 中有许多众所周知的特征选择方法,但特征选择方法还有很多,并且远远超出了scikit-learn 提供的方法。特征选择是机器学习的关键方面之一。但是因为技术的快速发展,现在是信息大爆炸的时代,有多余的可用数据,因此通常会出现多余的特征。许多特征都是多余的。它们会为模型增加噪音,并使模型解释出现问题。

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

遗传算法

本篇文章使用了“sklearn-genetic”包:

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

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

特征选择

选择特性是一个NP-Hard问题(所有NP问题都能在多项式时间复杂度内归遇到的问题)。给定一组特征,最优配置是这些特征的集合或子集。这种方法是离散选择。在可能性排列的情况下,确定最优特征集的成本是非常高的。

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

从这个种群中,使用目标任务的预测模型对子集进行评估。一旦确定了种群的每个成员,就会进行竞赛以确定哪些子集将延续到下一代。下一代由竞赛获胜者组成并进行交叉(用其他获胜者的特征更新获胜特征集)和变异(随机引入或删除一些特征)。

大致的步骤如下:

  1. 产生初始种群
  2. 对种群中的每个成员进行评分
  3. 通过竞赛选择子集进行繁殖
  4. 选择要传递的遗传物质(特征)
  5. 应用突变
  6. 以上步骤重复多次,每一次成为一代(generation)

该算法运行一定数量的代之后,群体的最优成员就是选定的特征。

实际操作

实验基于 UCI 乳腺癌数据集,其中包含 569 个实例和 30 个特征。使用这个数据集,我测试了几个分类器的所有特征、遗传算法的特征子集以及使用卡方检验的五个特征进行比较。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.datasets import load_breast_cancer
from genetic_selection import GeneticSelectionCV
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as npdata = load_breast_cancer()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
X = df.drop(['target'], axis=1)
y = df['target'].astype(float)estimator = DecisionTreeClassifier()
model = GeneticSelectionCV(
    estimator, cv=5, verbose=0,
    scoring="accuracy", max_features=5,
    n_population=100, crossover_proba=0.5,
    mutation_proba=0.2, n_generations=50,
    crossover_independent_proba=0.5,
    mutation_independent_proba=0.04,
    tournament_size=3, n_gen_no_change=10,
    caching=True, n_jobs=-1)
model = model.fit(X, y)
print('Features:', X.columns[model.support_])

GeneticSelectionCV

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

对于初始种群的每个成员,使用目标度量来衡量一个分数。此度量是指定的估算器的性能。

进行竞赛选择以确定哪些成员将继续到下一代。竞赛中的成员数量由“tournament_size”设置。竞赛规模是根据评分指标从总体中选出的几个成员相互竞争。获胜者被选为下一代的父母。

参加竞赛的成员人数应该很少。当值比较大时,通常选择当前最好的成员。此行为不会导致选择任何较弱的成员。对于较弱的成员,虽然提供了暂时的性能提升,但最终这会导致整体性能的降低,因为较弱的选项没有得到改进的机会。

自然选择

在自然选择中,遗传信息存储在染色体中。在繁殖过程中一些遗传物质从父母传给孩子。然后孩子包含来自父母双方的遗传物质。此属性用参数“crossover_proba”表示。指定的概率表示从一个生成交叉到下一个生成的机会。还有一个参数“crossover_independent_proba”,它是一个特征将交叉到子节点的概率。

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

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

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

结果

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

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

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

总结

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
独家 | 基于Python的遗传算法特征约简(附代码)
本教程主要使用numpy和sklearn来讨论如何使用遗传算法(genetic algorithm,GA)来减少从python中的Fruits360数据集提取的特征向量。
数据派THU
2019/05/15
2.2K0
独家 | 基于Python的遗传算法特征约简(附代码)
干货 | 遗传算法(Genetic Algorithm) (附代码及注释)
本文目录 01遗传算法定义 02生物学术语 03问题导入 04大体实现 05具体细节 06代码实现 字数 6739 字 阅读 预计阅读时间20分钟 01 什么是遗传算法? 1.1 遗传算法的科学定义
用户1621951
2018/06/11
26.7K0
进化算法中的遗传算法(Genetic Algorithms)
进化算法是一类基于自然进化原理的优化算法,通过模拟生物进化过程中的选择、交叉和变异等操作,来求解复杂问题。遗传算法(Genetic Algorithms)是进化算法中最为经典和常用的一种方法。本文将介绍遗传算法的基本原理、核心操作和应用领域,以及一些优化技巧。
大盘鸡拌面
2023/09/29
1K0
遗传算法入门_遗传算法流程示意图
  遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。
全栈程序员站长
2022/09/20
1.2K0
遗传算法入门_遗传算法流程示意图
数学建模--智能算法之遗传算法
遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传学原理的优化技术,它模仿自然界中的生物进化过程,通过一系列操作(如选择、交叉、变异等)来寻找最优解。其基本思想是将种群中的所有个体的表现型映射为数值即编码,并利用随机化技术对一个被编码的种群进行迭代优化,从而逐步逼近问题的最优解。
用户11315985
2024/10/16
6010
数学建模--智能算法之遗传算法
教程 | 遗传算法的基本概念和实现(附Java实现案例)
选自Medium 作者:MallawaarachchiFollow 机器之心编译 参与:俞云开、蒋思源 基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。该算法反映了自然选择的过程,即最适
机器之心
2018/05/08
1.3K0
教程 | 遗传算法的基本概念和实现(附Java实现案例)
有关遗传算法的一个简单入门的例子(java语言实现)
摘要:本报告提出了一个能体现遗传算法原理的例子,并侧重于java语言的编程实现,结果较好地完成了算法的要求。基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索算法。算法反映了自然选择的过程,即最适者被选定繁殖,并产生下一代。
Reborn Lee
2020/06/29
1.4K0
【优化算法】遗传算法(Genetic Algorithm) (附代码及注释)
遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
短短的路走走停停
2019/05/14
28K2
【优化算法】遗传算法(Genetic Algorithm) (附代码及注释)
遗传算法简单实例_遗传算法的特点有哪些
为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各 个主要执行步骤。 例:求下述二元函数的最大值:
全栈程序员站长
2022/11/04
1.6K0
遗传算法简单实例_遗传算法的特点有哪些
大白话讲解遗传算法
种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。
IT阅读排行榜
2018/08/16
2K0
大白话讲解遗传算法
Python高级算法——遗传算法(Genetic Algorithm)
遗传算法是一种启发式搜索算法,模拟自然选择和遗传机制,用于在解空间中寻找优化问题的解。它通过模拟基因的变异、交叉和选择操作,逐代演化产生新的解,最终找到全局最优解。本文将深入讲解Python中的遗传算法,包括基本概念、算法步骤、编码方法以及使用代码示例演示遗传算法在实际问题中的应用。
Echo_Wish
2023/12/18
2.7K0
遗传算法python(含例程代码与详解)「建议收藏」
遗传算法简称GA(Genetic Algorithms)模拟自然界生物遗传学(孟德尔)和生物进化论(达尔文)通过人工方式所构造的一类 并行随机搜索最优化方法,是对生物进化过程**“优胜劣汰,适者生存”**这一过程进行的一种数学仿真。
全栈程序员站长
2022/09/30
3.6K0
遗传算法python(含例程代码与详解)「建议收藏」
用遗传算法求解函数
用遗传算法求解函数f(x) = x + 10sin(5x) + 7cos(4x) 在区间[0,9]的最大值。
Stanley Sun
2020/08/11
1.5K0
用遗传算法求解函数
近期爆火的Meta Learnjng,遗传算法与深度学习的火花,再不了解你就out了(附github代码)!
url:[https://arxiv.org/pdf/1703.01513](https://arxiv.org/pdf/1703.01513)
机器学习算法工程师
2018/07/26
7460
近期爆火的Meta Learnjng,遗传算法与深度学习的火花,再不了解你就out了(附github代码)!
元启发式算法 | 遗传算法(GA)解决TSP问题(Python实现)
遗传算法(Genetic Algorithm, GA),是一种通过模拟生物自然进化过程的随机搜索算法,主要思想是模拟生物进化论中自然选择和遗传学机理的生物进化过程。废话不多说,看看具体的实现过程。
学弱猹
2021/08/10
2.9K0
元启发式算法 | 遗传算法(GA)解决TSP问题(Python实现)
干货 | 嘿!你和遗传算法的距离也许只差这一文(附C++代码和详细代码注释)
这是数据魔术师的第5篇算法干货文 ▲ 一 什么是遗传算法? 遗传算法(Genetic Algorithm,简称GA)起源于对生物系统所进行的计算机模拟研究,是一种随机全局搜索优化方法,它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象,从任一初始种群(Population)出发,通过随机选择、交叉和变异操作,产生一群更适合环境的个体,使群体进化到搜索空间中越来越好的区域,这样一代一代不断繁衍进化,最后收敛到一群最适应环境的个体(Individual),从
用户1621951
2018/04/19
4.1K1
干货 | 嘿!你和遗传算法的距离也许只差这一文(附C++代码和详细代码注释)
遗传算法系列之一:遗传算法简介
该文介绍了遗传算法的基本概念、应用和实现方法,特别强调了遗传算法在解决优化问题方面的优势。同时,文章还探讨了遗传算法的发展历史和现状,以及其在实际应用中可能遇到的问题和挑战。
AlgorithmDog
2018/01/08
2.2K0
遗传算法系列之一:遗传算法简介
K邻近 – k-nearest neighbors | KNN
遗传算法借鉴了生物学中的遗传原理,是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
easyAI
2019/12/18
7630
详解R语言中的遗传算法
前言 人类总是在生活中摸索规律,把规律总结为经验,再把经验传给后人,让后人发现更多的规规律,每一次知识的传递都是一次进化的过程,最终会形成了人类的智慧。自然界规律,让人类适者生存地活了下来,聪明的科学家又把生物进化的规律,总结成遗传算法,扩展到了更广的领域中。 本文将带你走进遗传算法的世界。 目录 遗传算法介绍 遗传算法原理 遗传算法R语言实现 1. 遗传算法介绍 遗传算法是一种解决最优化的搜索算法,是进化算法的一种。进化算法最初借鉴了达尔文的进化论和孟德尔的遗传学说,从生物进化的一些现象发展起来,这些现象
CDA数据分析师
2018/02/08
2.9K0
详解R语言中的遗传算法
基于达尔文进化论的遗传算法,还能帮你破解同事的密码?| 附代码
李林 编译自 SICARA blog 量子位 出品 | 公众号 QbitAI 量子位今天编译整理的这篇文章,全面地介绍了遗传算法(genetic algorithm),从它的起源和目标,到如何用pyt
量子位
2018/03/27
7980
基于达尔文进化论的遗传算法,还能帮你破解同事的密码?| 附代码
推荐阅读
相关推荐
独家 | 基于Python的遗传算法特征约简(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验