一文读懂遗传算法基础知识与实际应用

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

最近,AnalyticsVidhya发表了一篇题为“遗传算法及其应用IndataScience的介绍”的文章。作者Shubham Jain出现了,并以易于理解的语言对遗传算法做出了全面的方法。简要概述并在多个字段中列出其实际应用。这重点是遗传算法的数据科学应用。机器的核心已编译了文章,请参阅原始文章链接的结尾。

介绍

几天前,我着手解决一个实用问题 - 大型超市的销售问题。使用了几个简单的模型来进行一些功能工程,我在排名中排名第219。

遗传算法在生活中的应用_应用遗传实例算法生活中的例子_遗传算法应用生活实例

尽管结果很好,但我仍然想做得更好。因此,我开始研究可以提高得分的优化方法。结果,我找到了一个,称为遗传算法。将其应用于超市销售问题之后,我的分数终于在排名中跃升至最高。

应用遗传实例算法生活中的例子_遗传算法在生活中的应用_遗传算法应用生活实例

没错,我仅用遗传算法直接从219跳到15位。太神奇了!我相信,在阅读本文后,您也可以非常自由地应用遗传算法,并且您会发现,当您将其用于处理问题时,效果也将大大改善。

目录

1。遗传算法理论的起源

2。启发生物学

3。遗传算法的定义

4。遗传算法的特定步骤

5。遗传算法的应用

6。实际应用

7。结论

1。遗传算法理论的起源

让我们从查尔斯·达尔文(Charles Darwin)的名言开始:

它不是可以生存的最强大和最聪明的物种,而是可以反应最佳变化的物种。

您可能想知道:这句话与遗传算法有什么关系?实际上,遗传算法的整个概念是基于此句子的。

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

让我们首先假设一个场景,现在您是一个国家的国王,为了拯救您的国家免于灾难,您已经实施了一套账单:

尽管此示例不太可能,但我用它来帮助您理解该概念。也就是说,如果我们更改输入值(例如人口),我们可以获得更好的输出价值(例如:更好的国家)。现在,我认为您对这一概念有一般的理解,并认为遗传算法的含义应与生物学有关。然后,我们将迅速查看一些小概念,以便我们可以将它们联系起来并理解它们。

2。启发生物学

我相信您仍然记得这句话:“牢房是所有生物的基石。”从中,我们可以看到,在任何生物的细胞中,都有相同的染色体。所谓的染色体是指由DNA组成的聚合物。

遗传算法应用生活实例_遗传算法在生活中的应用_应用遗传实例算法生活中的例子

传统上,这些染色体可以通过由数字0和1组成的字符串表示。

应用遗传实例算法生活中的例子_遗传算法在生活中的应用_遗传算法应用生活实例

染色体由基因组成,这些基因实际上是构成DNA的基本结构。 DNA上的每个基因都编码一个独特的特征,例如头发或眼睛的颜色。希望您会在继续阅读之前回想起这里提到的生物学概念。完成这一部分后,让我们看一下所谓的遗传算法实际上是什么?

3。遗传算法的定义

首先,让我们回到前面讨论的示例,并总结我们所做的事情。

首先,我们设定了人们的初始人口规模。

然后,我们定义一个功能,以区分好人和坏人。

同样,我们选择好人,让他们繁殖自己的后代。

最后,这些后代取代了原始公民的一些坏人,并继续重复这一过程。

这就是遗传算法实际工作的方式,也就是说,它基本上试图在某种程度上模拟进化过程。

因此,为了正式定义遗传算法,我们可以将其视为一种优化方法,可以尝试找到某些输入,并且有了这些输入,我们可以获得最佳的输出值或结果。遗传算法的工作方式也起源于生物学,有关特定过程,请参见下图:

遗传算法在生活中的应用_遗传算法应用生活实例_应用遗传实例算法生活中的例子

因此,现在让我们逐步了解整个过程。

4。遗传算法的特定步骤

为了使解释更加容易,让我们首先了解著名的组合优化问题“背包问题”。如果您还不了解,这是我的解释的一种版本。

例如,您将疯狂一个月,但是您只能携带重30公斤的背包。现在您有不同的必需品,每个项目都有自己的“生存点”(特别是在下表中给出)。因此开yun体育app官网网页登录入口,您的目标是在有限的背包重量下最大化您的“生存点”。

遗传算法应用生活实例_遗传算法在生活中的应用_应用遗传实例算法生活中的例子

4.1初始化

在这里,我们使用遗传算法来解决此背包问题。第一步是定义我们的整体。人口包含个体,每个人都有自己的一套染色体。

我们知道染色体可以表示为动态字符串。在这个问题中,1表示基因在下一个位置的存在,而0表示损失。 (翻译说明:作者借用染色体和基因来解决先前的背包问题,因此特定位置的基因表示上面背包问题表中的项目。 “基因”位置是该染色体的第一个“基因”。

遗传算法应用生活实例_应用遗传实例算法生活中的例子_遗传算法在生活中的应用

现在,我们将图中的4个染色体视为我们的总体初始值。

4.2健身功能

接下来,让我们计算前两个染色体的健身得分。对于A1染色体[100110],有:

遗传算法应用生活实例_应用遗传实例算法生活中的例子_遗传算法在生活中的应用

同样,对于A2染色体[001110],也有:

应用遗传实例算法生活中的例子_遗传算法应用生活实例_遗传算法在生活中的应用

对于这个问题,我们认为,当染色体含有更多的生存分数时,这意味着它更适应性。

因此,从数字可以看出,染色体1比染色体2更适应。

4.3选择

现在,我们可以开始从人群中选择合适的染色体,以使它们互相“交配”并产生自己的下一代。这是执行选择操作的一般想法,但这将导致以不同方式减少染色体,并失去多样性。因此,我们通常进行“轮盘旋转方法”。

遗传算法在生活中的应用_遗传算法应用生活实例_应用遗传实例算法生活中的例子

想象一下,有一个轮盘赌,现在我们将其分为M部分,其中M代表我们种群中的染色体数量。每个染色体在轮盘上占据的面积面积将根据健身评分按比例表示。

遗传算法应用生活实例_遗传算法在生活中的应用_应用遗传实例算法生活中的例子

基于上图中的值,我们创建以下“轮盘赌”。

遗传算法在生活中的应用_应用遗传实例算法生活中的例子_遗传算法应用生活实例

现在,车轮开始旋转,我们选择了由图中的固定点指向的区域作为第一位父。然后,对于第二个父母,我们也这样做。有时kaiyun全站网页版登录,我们会在途中标记两个固定指针,如下图所示:

遗传算法应用生活实例_应用遗传实例算法生活中的例子_遗传算法在生活中的应用

通过这种方法,我们可以在一轮中获得两个父母。我们使该方法成为“随机通用选择方法”。

4.4交叉

在上一步中,我们选择了可以产生后代的父母染色体。因此,从生物学的角度来看,所谓的“交叉”实际上是指繁殖。现在,让我们“交叉”染色体1和4(在上一步中选择),请参见下图:

遗传算法应用生活实例_遗传算法在生活中的应用_应用遗传实例算法生活中的例子

这是交叉的最基本形式,我们称之为“单点交叉”。在这里,我们随机选择一个相交点,然后在相交点之前和之后交叉隔离染色体部分,从而创建新的后代。

如果设置两个交叉点,则此方法称为“多点交叉”,请参见下图:

遗传算法在生活中的应用_遗传算法应用生活实例_应用遗传实例算法生活中的例子

4.5突变

如果我们现在从生物学的角度看这个问题,那么我们是否会问:上述过程产生的后代是否具有与父母相同的特征?答案是否定的。在后代的成长过程中,其身体中的基因有些变化,使它们与父母不同。我们称此过程为“突变”,可以定义为染色体上发生的随机变化。正是由于人口多样性的差异。

下图是突变的简单示例:

应用遗传实例算法生活中的例子_遗传算法应用生活实例_遗传算法在生活中的应用

突变完成后,我们是个新手,并且进化完成了。整个过程如下:

应用遗传实例算法生活中的例子_遗传算法应用生活实例_遗传算法在生活中的应用

经过一轮“遗传突变”,我们使用健身函数来验证这些新的后代。如果该功能确定它们足够合适,他们将使用它们来替换那些不够适合种群的染色体。这里有一个问题。我们应该使用哪些标准来判断后代已经达到最佳健身水平?

一般而言,有几种终止条件:

X迭代后,整体情况没有很大变化。

我们提前定义了算法的演变数量。

当我们的健身功能达到预定义的值时。

好的,现在我认为您基本上已经了解了遗传算法的关键点,因此现在让我们将其应用于数据科学方案。

5。遗传算法的应用

5.1功能选择

想象一下,每当您参加数据科学竞赛时,您都会使用哪些方法来选择对于预测目标变量很重要的特征?您经常对模型中功能的重要性做出判断,然后手动设置一个阈值,以选择其重要性高于此阈值的功能。

那么,有什么方法可以更好地解决这个问题吗?实际上,处理特征选择任务的最先进的算法之一是遗传算法。

我们以前处理背包问题的方法可以在此处充分应用。现在,让我们从建立“染色体”人群开始。这里的染色体仍然是数字的二进制字符串。 “ 1”是指模型包含此功能,“ 0表示模型不包括此功能。”

但是,有一个区别,也就是说,我们的健身功能需要更改。这里的健身功能应该是该竞赛准确性的标准。也就是说,如果染色体的预测值更准确,那么可以说这更舒适。

现在,我认为您对此方法有一点概念。接下来,我不会立即解释该问题的解决方案过程,但让我们首先使用TPOT库来实现它。

5.2使用TPOT库实现它

据信这部分是您第一次阅读本文时最终想要实现的目标。那就是:实现。因此,首先让我们快速查看TPOT库(基于树的管道优化技术,树递送优化技术),该技术是基于Scikit-Learn库构建的。下图显示了基本的转移结构。

应用遗传实例算法生活中的例子_遗传算法在生活中的应用_遗传算法应用生活实例

图中的灰色区域将使用TPOT库自动处理。需要遗传算法来实施本部分的自动处理。

我们不会在这里深入解释它,而是直接应用它。为了能够使用TPOT库,您需要首先安装一些构建的Python库。在这里,我们迅速安装它们:

# installing DEAP, update_checker and tqdm 
pip install deap update_checker tqdm
# installling TPOT 
pip install tpot

在这里,我使用了bigmartsales(数据集地址:)数据集。为了准备实施,我们首先快速下载培训和测试文件。以下是Python代码:

# import basic libraries
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
%matplotlib inline 
from sklearn import preprocessing 
from sklearn.metrics import mean_squared_error 
## preprocessing 
### mean imputations 
train['Item_Weight'].fillna((train['Item_Weight'].mean()), inplace=True)
test['Item_Weight'].fillna((test['Item_Weight'].mean()), inplace=True)
 ### reducing fat content to only two categories 
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'].fillna('Small',inplace=True)
test['Outlet_Size'].fillna('Small',inplace=True)
train['Item_Visibility'] = np.sqrt(train['Item_Visibility'])
test['Item_Visibility'] = np.sqrt(test['Item_Visibility'])
col = ['Outlet_Size','Outlet_Location_Type','Outlet_Type','Item_Fat_Content']
test['Item_Outlet_Sales'] = 0
combi = train.append(test)
for i in col:
 combi[i] = number.fit_transform(combi[i].astype('str'))
 combi[i] = combi[i].astype('object')
train = combi[:train.shape[0]]
test = combi[train.shape[0]:]
test.drop('Item_Outlet_Sales',axis=1,inplace=True)
## removing id variables 
tpot_train = train.drop(['Outlet_Identifier','Item_Type','Item_Identifier'],axis=1)
tpot_test = test.drop(['Outlet_Identifier','Item_Type','Item_Identifier'],axis=1)
target = tpot_train['Item_Outlet_Sales']
tpot_train.drop('Item_Outlet_Sales',axis=1,inplace=True)
# finally building model using tpot library
from tpot import TPOTRegressor
X_train, X_test, y_train, y_test = train_test_split(tpot_train, target,
 train_size=0.75, test_size=0.25)
tpot = TPOTRegressor(generations=5, population_size=50, verbosity=2)
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
tpot.export('tpot_boston_pipeline.py')

遗传算法在生活中的应用_应用遗传实例算法生活中的例子_遗传算法应用生活实例

这些代码完成后,将放置用于路径优化的Python代码将放置在tpot_exported_pipeline.py中。我们可以发现,ExtratreeReregressor可以最好地解决此问题。

## predicting using tpot optimised pipeline
tpot_pred = tpot.predict(tpot_test)
sub1 = pd.DataFrame(data=tpot_pred)
#sub1.index = np.arange(0, len(test)+1)
sub1 = sub1.rename(columns = {'0':'Item_Outlet_Sales'})
sub1['Item_Identifier'] = test['Item_Identifier']
sub1['Outlet_Identifier'] = test['Outlet_Identifier']
sub1.columns = ['Item_Outlet_Sales','Item_Identifier','Outlet_Identifier']
sub1 = sub1[['Item_Identifier','Outlet_Identifier','Item_Outlet_Sales']]
sub1.to_csv('tpot.csv',index=False)

如果您提交此CSV,您会发现我一开始我保证的那些尚未完全实施。那对你说谎吗?当然不是。实际上,TPOT库有一个简单的规则。如果您不运行TPOT太长时间,那么它就不会弄清楚为您的问题传递的最有可能的方法。

因此,您必须增加进化代数,拿一杯咖啡去散步,然后将其余的咖啡留给TPOT。此外,您还可以使用此库来处理分类问题。有关更多内容,请参阅此文档:。除竞争外,我们还可以使用许多应用程序场景,可以使用遗传算法。

6。实际应用

遗传算法在现实世界中具有许多应用。在这里,我列出了一些有趣的场景,但是由于空间限制,我不会详细介绍它们。

6.1工程设计

工程设计在很大程度上依赖于计算机建模和仿真,因此设计周期过程可以快速且经济。遗传算法可以在此处进行优化,并取得良好的结果。

相关资源:

6.2运输和运输路线(旅行推销员问题开元棋官方正版下载,巡回推销员的问题)

这是一个非常著名的问题,许多贸易公司已将其用于使运输更加省时和经济。还需要遗传算法来解决此问题。

遗传算法应用生活实例_遗传算法在生活中的应用_应用遗传实例算法生活中的例子

6.3机器人

遗传算法广泛用于机器人领域。实际上,人们目前正在使用遗传算法来创建可以像人类一样行动的自主学习机器人,并且可以烹饪,洗衣服等。

相关资源:

7。结论

我希望通过本文,您现在已经足够理解了遗传算法,并且您还将使用TPOT库来实现它。但是,如果您自己不练习,那么本文中的知识也非常有限。

因此,请确保尝试在数据科学竞赛或生活中自己实施它。

原始链接:

网友留言(0)

评论

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