作者:Ahmed Gad

翻译:张睿毅

校对:丁楠雅

本文4700字,建议阅读15分钟。

本教程主要使用numpy和sklearn来讨论如何使用遗传算法(genetic algorithm,GA)来减少从python中的Fruits360数据集提取的特征向量。

标签:深度学习,特征工程,遗传算法,神经网络,numpy,python,scikit-learn

本教程主要使用numpy和sklearn来讨论如何使用遗传算法(genetic algorithm,GA)来减少从python中的Fruits360数据集提取的特征向量。

导言

在某些情况下,使用原始数据训练机器学习算法可能不是合适的选择。该算法在接受原始数据训练时,必须进行特征挖掘,以检测不同组之间的差异。但这需要大量的数据来自动执行特征挖掘。对于小数据集,数据科学家最好自己进行特征挖掘步骤,之后告诉机器学习算法要使用哪个特征集。

使用的特征集必须能代表数据样本,因此我们必须注意选择最佳特征。数据科学家建议使用一些类型的特征,这些特征似乎有助于根据以前的经验来表示数据样本。一些特征可以证明它们在表示样本时的稳健性,而其他特征则不能。

可能存在一些类型的特征,会降低分类问题的准确性或增加回归问题的误差,进而影响训练模型的结果。例如,特征向量中可能存在一些噪音元素,因此它们应该被删除。特征向量也可能包含2个或更多相关元素。只使用一个元素就可以替代另一个元素。为了删除这些类型的元素,有两个有用的步骤,即特征选择和约简。本教程重点介绍特征约简。

假设有3个特征f1、f2和f3,每个特征都有3个特征元素。因此,特征向量长度为3x3=9。特征选择只选择特定类型的特征,不包括其他类型的特征。例如,只需选择f1和f3并删除f3。特征向量长度变成了6而不是9。在特征约简中,可以排除每个特征的特定元素。例如,此步骤可能会在保留第二个元素的同时从f3中删除第一个和第三个元素。因此,特征向量长度从9减少到7。

在开始本教程之前,值得一提的是,它是我的LinkedIn配置文件中先前发布的2个教程的扩展。

第一个教程的标题是“使用numpy的人工神经网络实现Fruits360图像数据集的分类”。它首先从Fruits360数据集的4个类中提取长度为360的特征向量。然后,利用numpy从零开始构建人工神经网络(ANN),对数据集进行分类。

第一个教程可从以下网址获取:https://www.linkedin.com/pulse/artificial-neural-network-implementation-using-numpy-fruits360-gad其Github项目可从以下网址获得:https://github.com/ahmedfgad/NumPyAN

第二个教程是“使用遗传算法的人工神经网络优化”。建立并使用遗传算法对神经网络参数进行优化,以提高分类精度。

第二个教程可从以下网址获取:https://www.linkedin.com/pulse/artificial-neural-networks-optimization-using-genetic-ahmed-gad。其Github项目也可从以下网址获得:https://github.com/ahmedfgad/NeuralGeneti

本教程讨论了如何使用遗传算法来减少从长度360的Fruits360数据集中提取的特征向量。本教程首先讨论要遵循的步骤。其次通过使用NumPy和Sklearn在python实现这些步骤。

本教程的实现可在我的Github页面中找到:https://github.com/ahmedfgad/FeatureReductionGeneti

遗传算法从一个初始群体开始,该群体由若干染色体(即解决方法)组成,其中每个染色体都有一系列基因。使用适应函数,遗传算法选择最佳的解决方案作为父母来创建一个新的群体。在这样一个新的群体中,通过在双亲上应用两个操作,即杂交和变异来创建新的解决方案。当把遗传算法应用到一个给定的问题上时,我们必须确定基因的表示、合适的适应函数以及杂交和变异是如何应用的。接下来让我们看看运行原理。

更多关于遗传算法的信息

你可以从我准备的如下资源中读到关于遗传算法的更多知识:

1. 遗传算法优化介绍

https://www.linkedin.com/pulse/introduction-optimization-genetic-algorithm-ahmed-gad/https://www.kdnuggets.com/2018/03/introduction-optimization-with-genetic-algorithm.htmlhttps://towardsdatascience.com/introduction-to-optimization-with-genetic-algorithm-2f5001d9964b

2. 遗传算法优化-逐步示例

https://www.slideshare.net/AhmedGadFCIT/genetic-algorithm-ga-optimization-stepbystep-example

3. python中的遗传算法实现

https://www.linkedin.com/pulse/genetic-algorithm-implementation-python-ahmed-gad/https://www.kdnuggets.com/2018/07/genetic-algorithm-implementation-python.htmlhttps://towardsdatascience.com/genetic-algorithm-implementation-in-python-5ab67bb124a6https://github.com/ahmedfgad/GeneticAlgorithmPython

我在2018年还写了一本书,其中一章介绍了遗传算法。这本书的标题是“利用CNN进行深度学习的实用计算机视觉应用”,可在Springer上找到。

Springer链接:https://www.springer.com/us/book/978148424166

染色体的表达

遗传算法中的基因是染色体的组成部分。首先,我们需要确定染色体内的基因。为此,考虑到可能影响结果的每一种属性都应被视为一个基因。因为我们问题的目标是选择最好的一组特征元素,所以如果选择或不选择,每个特征元素都可能影响结果。因此,每个特征元素都被视为一个基因。染色体将由所有基因(即所有特征元素)组成。因为有360个特征元素,那么就有360个基因。一个很好的信息现在很清楚,染色体的长度是360。

在确定所选基因是什么之后,下一步就是确定基因的表达。有不同的表示形式,如十进制、二进制、浮点、字符串等。我们的目标是知道基因(即特征元素)是否在减少的特征集中被选择。因此,分配给基因的值应该反映它是否被选择。基于这种描述,很明显每个基因有两个可能的值。一个值表示该基因已被选中,另一个值表示未被选中。因此,二进制表示是最佳选择。当基因值为1时,将在减少的特征集中进行选择。当为0时,则忽略它。

总之,染色体将由360个基因组成,以二进制表示。根据下一个图,特征向量和染色体之间有一对一的映射。这是染色体中的第一个基因与特征向量中的第一个元素相连。当该基因的值为1时,这意味着选择了特征向量中的第一个元素。

适应函数

通过了解如何创建染色体,可以很容易地对初始种群进行随机初始化。初始化后,将选择父级。遗传算法基于达尔文的“适者生存”理论。这是目前选择的最佳解决方案进行组合,以产生更好的解决方案。通过保留好的解和消除坏的解,我们可以得到最优或半最优解。

选择双亲的标准是与每个解决方案(即染色体)相关联的适应值。适合度越高,解决方案越好。使用适应度函数计算适应度值。那么,在我们的问题中,最适合使用的功能是什么?我们问题的目标是创建一个约简的特征向量,以提高分类精度。因此,判断一个解是否好的标准是分类的准确性。因此,fitness函数将返回一个数字,指定每个解决方案的分类精度。精度越高,解决方案越好。

为了返回分类的准确度,必须有一个机器学习模型来通过每个解决方案返回的特征元素进行训练。对于这种情况,我们将使用支持向量分类器(SVC)。

数据集分为训练样本和测试样本。根据训练数据,SVC将使用人群中每个解决方案选择的特征元素进行训练。经过训练后,根据测试数据进行测试。

根据每个解的适合度值,我们可以选择其中最好的作为父母。这些父母被放在一起组合以产生后代,这将是下一代的新人口的成员。这种后代是通过对选定的亲本应用交叉和突变操作而产生的。让我们按照下面讨论的方式配置这些操作。

遗传和变异

基于适应度函数,我们可以筛选出当前群体中的最优解,即父辈。遗传算法假设匹配2个好的解决方案将产生第三个更好的解决方案。组合意味着从两个父母那里交换一些基因。使用遗传操作交换基因。有不同的方法可以应用这种操作。本教程使用单点交叉,其中一个点分割染色体。点前的基因取自一组解,点后的基因取自另一组解。

通过应用遗传,所有的基因都来自于以前的父母。在新的后代中没有引入新的基因。如果所有的父母都有一个坏基因,那么这个基因就会转移到后代身上。正因为如此,为了在后代中引入新的基因,采用了突变操作。在基因的二元表示中,突变是通过翻转一些随机选择的基因的值来实现的。如果基因值为1,则为0,反之亦然。

在产生后代之后,我们可以创造下一代的新种群。除了后代之外,这个群体还包括以前的父辈。

此时,将讨论所有步骤。接下来是用Python实现它们。注意,我以前写过一篇题为“Python中的遗传算法实现”的教程,用于在Python中实现遗传算法,我将修改它的代码来解决我们的问题。最好读一下。

利用Python实现

该项目分为两个文件。一个文件名为GA.py,它将遗传算法步骤的实现保存为函数。另一个文件是主文件,它只导入这个文件,并在循环中调用它的函数,该循环将迭代几代。

根据下面的代码,主文件首先读取从Fruits360数据集提取的特性。这些特性返回到数据输入变量中。有关提取这些功能的详细信息,请参阅本教程开头提到的2个教程。该文件还读取与数据输出变量中的样本相关联的类标签。

选择一些样本进行训练,其索引存储在train_indices变量中。同样,测试样本索引存储在test_indices变量中。

import numpyimport GAimport pickleimport matplotlib.pyplotf = open("dataset_features.pkl

python实现遗传算法实例_基于Python的遗传算法特征约简(附代码)相关推荐

  1. python 情感分析实例_基于Python的情感分析案例

    **情感分析 **又称为倾向性分析和意见挖掘 它是对带有情感色彩的主观性文本进行分析.处理.归纳和推理的过程 其中情感分析还可以细分为情感极性 倾向 分析 情感程度分析 主客观分析等. 情感极性分析的 ...

  2. python在律师上作中的实例_基于Python的律师信息查询接口调用代码实例

    基于Python的律师信息查询接口调用代码实例代码描述:基于Python的律师信息查询接口调用代码实例 代码平台:聚合数据 #!/usr/bin/python # -*- coding: utf-8 ...

  3. python开发语音录入_基于python实现语音录入识别代码实例

    这篇文章主要介绍了如何通过python实现语音录入识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 1.第一步录音存入本地 2.调用百度 ...

  4. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  5. autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  6. python语法元素测试_基于python全局设置id 自动化测试元素定位过程解析

    背景: 在自动化化测试过程中,不方便准确获取页面的元素,或者在重构过程中方法修改造成元素层级改变,因此通过设置id准备定位. 一.python准备工作: 功能:用自动化的方式进行批量处理. 比如,你想 ...

  7. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  8. python多叉树遍历_基于Python的多叉树遍历算法

    [ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...

  9. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

最新文章

  1. c语言航班订票管理系统源代码,简易C语言航空订票系统
  2. 改mysql修改界定符_dbvisualizer参数设置
  3. you-get 一个下载视频的好工具
  4. .ini文件中的PHP 5.6 error_reporting设置不起作用
  5. 第一阶段_第一部分_工具介绍
  6. java打印数组_Java中打印数组内容的方式有哪些?
  7. APP里如何添加本地文本
  8. 【转载保存】WebCollector 2.x 入门教程
  9. 【JavaScript学习】JavaScript对象创建
  10. LibreOffice去重复数据
  11. 【转】Apache Solr 访问权限控制
  12. iPhone 14系列贴膜曝光:将采用开孔屏方案 四边框极窄
  13. 搭建局域网HTTP FTP服务
  14. ibatis sql_Map中出现异常:Cause: java.lang.RuntimeException: JavaBeansDataExchange could not instantiate..
  15. UVA11424 GCD - Extreme (I)【欧拉函数打表】
  16. 工业控制pc是微型计算机,微型计算机工业控制.doc
  17. 工作总结—HMC5883L应用的一些说明
  18. 根据城市的名称获取省份的名称
  19. 怎么把html表格转化为excel,导出html到excel表格数据格式-如何将html转换成excel
  20. Android调查问卷的创建与提交

热门文章

  1. 蜗牛学院:《王者荣耀》的浪潮正渐平静,“吃鸡”战场的枪声,则悄然打响...
  2. 算法笔记-哈希表之冰淇淋购买问题(Ice Cream Parlor)
  3. linux怎么修改ens33文件,Linux修改网卡ens33为eth0以及centos7下修改动态IP为静态IP地址...
  4. 育碧同 Mozilla 联手开发 AI 代码助手
  5. 古典文学--本经阴符七术
  6. NVIDIA Tesla/Quadro和GeForce GPU比较
  7. 运用Javascript实现时间重置、进行时间加减计算
  8. mysql+存储一段文字_mysql怎么存储大段文字
  9. Win7家庭版开启Administrator管理员帐户的方法
  10. Swagger——世界上最流行的Api框架