一文读懂遗传算法工作原理(附Python实现)

频道:生活应用 日期: 浏览:55

遗传算法原理_遗传算法数据科学应用_遗传算法应用生活实例

机器之心编译

参与:晏奇、黄小天

最近Analyticsvidhya网站发布了一篇标题为《遗传算法入门及其在数据科学中的应用》的文章,作者Shubham Jain通过自身经历,用浅显易懂的表述对遗传算法进行了系统而精炼的介绍,同时展示了该算法在不同领域的实际运用情况,特别强调了遗传算法在数据科学领域的具体实施方法。

简介

日前,我开始着手处理一个具体难题——大型商场的销售状况问题。运用了几个基础模型,并完成了一些特征加工,随后我在排名榜上位列第 219 位。

遗传算法数据科学应用_遗传算法原理_遗传算法应用生活实例

成绩还算理想,不过我仍希望进一步提升表现。为此,我着手探寻能够提升排名的改进措施。最终,我确实发现了一种有效途径,这种方法被称作遗传算法。将此方法运用到超市销售案例分析中,我的得分迅速攀升,最终在排行榜上位列顶尖位置。

遗传算法原理_遗传算法应用生活实例_遗传算法数据科学应用

确实,我单凭遗传算法,就由最初的 219 人直接跃升至第 15 位,这难道不令人惊叹吗?只要认真阅读完这篇文章,你同样能够熟练运用遗传算法,并且当你将它运用到你正在处理的问题上时,会发现其效果会有显著改善。

目录

1、遗传算法理论的由来

2、生物学的启发

3、遗传算法定义

4、遗传算法具体步骤

5、遗传算法的应用

6、实际应用

7、结语

1、遗传算法理论的由来

我们先从查尔斯·达尔文的一句名言开始:

能够存活下来的,通常不是力量最雄厚的物种,也不是头脑最灵光的物种,而是最能融入环境的物种。

你可能在思考:这个论述与遗传算法有何关联?事实上,遗传算法的全部思想正是源于这个论断。

让我们用一个基本例子来解释 :

我们设想一个场景,此刻你是一位君主,为了让你的国度远离祸患,你推行了一系列律法,

你选出所有的好人,要求其通过生育来扩大国民数量。

这个过程持续进行了几代。

你将发现,你已经有了一整群的好人。

这个情形虽然并非现实,但我选用它旨在让你掌握要领。换言之,我们调整原始数据(诸如:人口),便能得到更理想的成果(诸如:更优越的国家)。此刻,我料想你已对核心思想略知一二,觉得遗传算法的内涵应当与生物科学关联。接下来,我们简要探讨几个关键点,以便串联起整体认知。

2、生物学的启发

你一定记得那句话:生命体都以细胞为基本单位。由此可见,任何生物的每一个细胞内部,都包含着一套完全相同的遗传物质。这种遗传物质,是由脱氧核糖核酸构成的复杂结构。

遗传算法应用生活实例_遗传算法原理_遗传算法数据科学应用

这些染色体在传统角度下,能够用包含零与一的序列来描述开元棋官方正版下载,每个字符分别对应不同的基因信息。

遗传算法原理_遗传算法数据科学应用_遗传算法应用生活实例

一条染色体包含基因,基因是 DNA 的基础构造,DNA 上的每个基因负责决定一个特定特征,例如头发或眼睛的色泽,请你阅读下文前,先回顾一下这些生物学知识,这部分内容到此结束,接下来,我们探讨一下遗传算法究竟是什么。

3、遗传算法定义

首先我们回到前面讨论的那个例子,并总结一下我们做过的事情。

首先,我们设定好了国民的初始人群大小。

然后,我们定义了一个函数,用它来区分好人和坏人。

再次,我们选择出好人,并让他们繁殖自己的后代。

最终,这些子孙取代了先前民众中的某些恶人,并且持续进行此类更迭。

遗传算法运作方式确实如此,它主要是在一定程度上模仿进化过程。

所以,要明确界定遗传算法,可以视其为一个改进方案,旨在探寻特定条件,依据这些条件便能获得最优结果或数值。该算法的运作原理借鉴生物学科,详细步骤参见图示。

遗传算法原理_遗传算法应用生活实例_遗传算法数据科学应用

那么现在我们来逐步理解一下整个流程。

4、遗传算法具体步骤

为了让说明更加清晰,我们先来认识一下广为人知的组合优化课题「背包问题」。如果你感到困惑,这里有一个我个人的阐释方式。

比如,你打算外出旅行一个月,然而你仅能携带一个承重为三十公斤的背包。现在你有若干必备物品,每件物品都对应着特定的「生存价值」(详细数据将在下表展示)。所以,你的任务是在背包的重量限制内,尽可能提升整体的「生存价值」。

遗传算法应用生活实例_遗传算法数据科学应用_遗传算法原理

4.1 初始化

此处我们借助遗传算法处理背包难题,首要步骤是构建整体框架,整体框架内由多个独立单元组成,每个独立单元都携带一套独特的基因序列。

我们清楚,染色体能够转化为二进制序列,其中,1 表示后续位置的基因是存在的,而0 则表明基因已经缺失。作者在此运用染色体与基因的概念来处理先前的背包难题,特定节点的基因对应背包问题表格中的物件,例如首位节点代表睡袋,那么该染色体的首个基因即体现这一物件。

遗传算法数据科学应用_遗传算法应用生活实例_遗传算法原理

现在,我们将图中的 4 条染色体看作我们的总体初始值。

4.2 适应度函数

现在,我们开始评估前两个染色体的适应度值,其中涉及 A1 染色体

100110

而言,有:

遗传算法应用生活实例_遗传算法原理_遗传算法数据科学应用

类似地,对于 A2 染色体

001110

来说,有:

遗传算法应用生活实例_遗传算法数据科学应用_遗传算法原理

我们觉得,染色体里生存分数越高,说明它越能适应环境。

因此,由图可知,染色体 1 适应性强于染色体 2。

4.3 选择

此刻,能够从整体里挑选出合适的基因链,让它们彼此『结合』,繁衍出新的后代了。这是实施挑选过程的基本思路,不过如此一来,基因链在几代之后彼此间的相异程度会降低,丧失了丰富性。所以,我们通常采用「轮盘赌选择法」(Roulette Wheel Selection method)。

遗传算法应用生活实例_遗传算法原理_遗传算法数据科学应用

设想一个圆盘,现在将其划分成若干区段,这些区段的数量对应着全部染色体的数目。每条染色体在圆盘上占据的范围大小,会依据其适应度值进行相应比例的分配。

遗传算法应用生活实例_遗传算法数据科学应用_遗传算法原理

基于上图中的值,我们建立如下「轮盘」。

遗传算法原理_遗传算法数据科学应用_遗传算法应用生活实例

此刻,这个轮盘开始转动,我们将依据图中那个固定的指示点,选定轮盘上被它指向的部分作为首个亲本,接着,对第二个亲本也执行相同的步骤,有时我们会在过程中设定两个固定的指示点,就像图里展示的那样

遗传算法数据科学应用_遗传算法应用生活实例_遗传算法原理

运用这种技术,我们能在单次操作里得到两个亲本个体,我们将此技术命名为「随机普遍选择法」。

4.4 交叉

先前环节已筛选出具备繁殖能力的父本基因链,所谓配子结合,在生物学上即表示繁衍过程。接下来针对第 1 条与第 4 条基因链(经由前一步骤选定),实施配子结合,具体形态如下图所示

遗传算法原理_遗传算法数据科学应用_遗传算法应用生活实例

这是最基础的杂交方式,我们称之为「单点杂交」。在此过程中,我们随机确定一个杂交位点,接着,将此位点两侧的基因片段在配子之间进行互换,由此创造出新的后代个体。

设置两个交叉点,这种方法称作「多点交叉」,参见图示。

遗传算法数据科学应用_遗传算法应用生活实例_遗传算法原理

4.5 变异

从生命科学的角度审视此事,那么要知道:经由前述演变繁衍的后代,其特征是否与亲代一致呢?答案并非如此。在子代发育期间,其内部遗传物质会经历若干更迭,因而显现出与双亲相异的性状。此现象称作「变异」,它指的是染色体制造中出现的偶然性改变,正因如此,群落内才会形成丰富性。

下图为变异的一个简单示例:

遗传算法原理_遗传算法应用生活实例_遗传算法数据科学应用

基因发生改变后,我们就获得了全新生物,物种演变也就到此结束,整体流程见下图,

遗传算法应用生活实例_遗传算法原理_遗传算法数据科学应用

完成「遗传变异」环节后开元ky888棋牌官方版,我们借助适应度函数检测新生成的后代,当函数确认其符合标准时,就用这些个体替换掉那些表现不佳的基因型,这里面有个疑问,我们究竟该依据什么尺度来判定后代已经达到最理想的适应程度呢?

一般来说,有如下几个终止条件:

在进行 X 次迭代之后,总体没有什么太大改变。

我们事先为算法定义好了进化的次数。

当我们的适应度函数已经达到了预先定义的值。

现在,我假定你已大致掌握了遗传算法的核心思想,接下来,我们将其运用到数据科学的实际情境中去。

5、遗传算法的应用

5.1 特征选取

设想一下,在数据科学竞赛中,你如何挑选对目标变量预测有显著影响的特点呢?你通常会评估模型中各个特点的重要性,然后人为确定一个界限,选取重要性超过这个界限的特点。

目前,是否存在某种途径能够更有效地应对这一挑战?事实上,在解决特征挑选工作方面,遗传算法堪称顶尖的方法之一。

我们先前解决背包问题的思路完全适用于当前情境。首先,我们着手构建「染色体」的总体框架,这里的染色体本质上是一系列二进制数字,其中「1」代表模型采纳了某个特征,「0」则意味着模型舍弃了该特征。

然而,存在一个差异,就是我们的评估指标需要调整。这个评估指标是本次竞赛准确性的衡量标准。换言之,染色体的预测结果越精确,就能表明它的评价越好。

我现在料想你已对这方法略有所知了。接下来,我不会立刻阐释这个难题的应对步骤,而是要引导大家先运用 TPOT 库来达成这个目标。

5.2 用 TPOT 库来实现

这部分就是你最初阅读本文时心中最终期望达成的那个目的。也就是:达成。现在我们先简要了解一下 TPOT 库,它是依据 scikit-learn 库构建的。该库运用的是树形传递优化技术。下面展示的是一种基础的传递构造。

遗传算法应用生活实例_遗传算法原理_遗传算法数据科学应用

图中那个灰色的部分是借助 TPOT 库自动完成的。完成这一部分自动处理的方法是运用遗传算法。

我们不作详尽阐释,仅直接实践。要运用 TPOT 库,必须先配置 TPOT 构建所依赖的若干 python 库。接下来迅速完成这些安装工作:

安装深度进化算法工具包,升级检查模块,以及进度条库

安装deap软件包,接着更新检查工具,然后添加tqdm库

# installling TPOT

pip install tpot

这里,我选用了 Big Mart Sales(数据集地址:https://datahack.analyticsvidhya.com/contest/practice-problem-big-mart-sales-iii/)这个数据集,为后续工作做筹备,我们先迅速获取训练和测试数据,具体用到的 python 代码如下:

# import basic libraries

首先加载必要的库,包括numpy, pandas和matplotlib.pyplot, 并设置matplotlib inline模式以便在notebook中直接显示图形开元ky888棋牌官网版,接着从sklearn库中导入preprocessing和mean_squared_error用于数据预处理和计算均方误差,最后准备进行数据预处理步骤

### mean imputations

train

‘Item_Weight’

.fillna((train

‘Item_Weight’

.mean()), inplace= True)test

‘Item_Weight’

.fillna((test

‘Item_Weight’

.mean()), inplace= True)

脂肪含量仅分为两种类型

train

‘Item_Fat_Content’

= train

‘Item_Fat_Content’

.replace(

‘low fat’, ‘LF’

‘Low Fat’, ‘Low Fat’

) train

‘Item_Fat_Content’

= train

‘Item_Fat_Content’

.replace(

‘reg’

‘Regular’

) test

‘Item_Fat_Content’

= test

‘Item_Fat_Content’

.replace(

‘low fat’, ‘LF’

‘Low Fat’, ‘Low Fat’

) test

‘Item_Fat_Content’

= test

‘Item_Fat_Content’

.replace(

‘reg’

‘Regular’

) train

‘Outlet_Establishment_Year’

= 2013- train

‘Outlet_Establishment_Year’

test

‘Outlet_Establishment_Year’

= 2013- test

‘Outlet_Establishment_Year’

train

‘Outlet_Size’

使用空值填充为‘Small’,并且将更改应用到原数据集上

‘Outlet_Size’

用空值替换为‘Small’,并使更改生效在训练集上

‘Item_Visibility’

= np.sqrt(train

‘Item_Visibility’

)test

‘Item_Visibility’

= np.sqrt(test

‘Item_Visibility’

)col =

商品出口规模,销售网点地理位置,店铺经营类型,商品脂肪含量

test

‘Item_Outlet_Sales’

将测试集添加到训练集中,针对每一列,进行组合操作

= number.fit_transform(combi

.astype( ‘str’)) combi

= combi

转换数据类型为对象类型后的训练集等于组合数据集

:train.shape

test = combi

train.shape

test删除了名为“Item_Outlet_Sales”的列,操作影响原数据集,该列不再保留。

## removing id variables

tpot_train = train.drop(

识别出口径代号,明确物品种类,确定物品编号

轴方向为1的tpot测试集,等于测试数据集删除指定列后的结果

‘Outlet_Identifier’, ‘Item_Type’, ‘Item_Identifier’

,axis= 1)target = tpot_train

‘Item_Outlet_Sales’

tpot_train删除了名为“Item_Outlet_Sales”的列,操作是在原数据集上进行,不再保留原始数据集。

最终借助tpot库来构建模型

从tpot库中导入TPOTRegressor模块,将tpot_train和target进行训练集和测试集的划分,划分比例为75%和25%,分别赋值给X_train, X_test, y_train, y_test,使用TPOTRegressor创建一个机器学习模型,设置进化代数为5,种群大小为50,详细输出级别为2,用该模型对训练数据进行拟合,输出模型在测试数据集上的得分,将训练得到的最佳模型流程导出为tpot_boston_pipeline.py文件

遗传算法原理_遗传算法应用生活实例_遗传算法数据科学应用

当这些代码执行完毕,tpot_exported_pipeline.py 文件中就会包含执行路径优化的 python 代码片段。经过观察,ExtraTreeRegressor 模型能够最有效地处理该问题。

进行预测,借助经过tpot优化的流程

tpot_pred由tpot对tpot_test进行预测得出,sub1是一个数据框,其数据来源于tpot_pred

将sub1的索引设置为从零到测试数据长度的整数序列,每个数值递增,并在末尾增加一个额外的数值

sub1将列名‘0’更改为‘Item_Outlet_Sales’,sub1完成这一操作

‘Item_Identifier’

= test

‘Item_Identifier’

sub1

‘Outlet_Identifier’

= test

‘Outlet_Identifier’

sub1.columns =

商品销售额,商品唯一编号,店铺唯一编号

sub1 = sub1

物品识别码,店铺识别码,商品销售额

将数据保存为名为tpot的文件,不包含行索引

若你递交了这份表格,便会察觉先前承诺的内容尚未全部兑现。这难道意味着我在欺瞒大家么?绝非如此。事实上,TPOT 工具遵循一项基本准则。倘若你未让 TPOT 长时间执行,它便无法为你所面临的情况寻得最优解决方案。

因此,需要提升算法的迭代次数,端起一杯咖啡到户外散散步,剩下的工作就让 TPOT 来完成。不仅如此,这个工具也能用于解决分类类的任务。更多细节请查阅这个网址:http://rhiever.github.io/tpot/。除了竞赛场合,日常生活中也有很多地方可以运用遗传算法。

6、 实际应用

遗传算法实际应用广泛。列举部分案例,不过受限于篇幅,无法逐项阐述。

6.1 工程设计

工程构想高度倚重数字构造与推演,如此方能令构思阶段既迅速又划算。基因法则能在此处加以改善,并产生一个极好的成效。

相关资源:

网友留言(0)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。