艺赛旗 RPA9.0全新首发免费下载 点击下载
http://www.i-search.com.cn/index.html?from=line1

相信这个部分是你在一开始读本文时心里最终想实现的那个目标。即:实现。那么首先我们来快速浏览一下 TPOT 库(Tree-based Pipeline Optimisation Technique,树形传递优化技术),该库基于 scikit-learn 库建立。

TPOT 是一个 Python 编写的软件包,利用遗传算法行特征选择和算法模型选择,仅需几行代码,就能生成完整的机器学习代码。

自动化机器学习(AML)是一种流水线(也称管线),它能够让你自动执行机器学习(ML)问题中的重复步骤,从而节省时间,让你专注于使你的专业知识发挥更高价值。 最重要的是,它不仅是一些模糊的想法,而且还有一些基于标准 python ML 包建立的应用包,如 scikit-learn。

在这种情况下,任何熟悉机器学习的人都可能会回想起网格搜索(grid search)这个概念。 他们这样想是完全正确的。 实际上,AML 是在 scikit-learn 中应用的网格搜索的扩展,而不是迭代这些值预先定义的集合和其组合,它通过搜索方法,特征,变换和参数值来获得最佳解决方案。 因此,AML“网格搜索”不需要在可能的配置空间上进行详尽的搜索 - AML 有一个很赞的应用叫做 TPOT 包,其提供了像遗传算法这样的应用,可用来在某个配置中混合各个参数并达到最佳设置。

下图为一个基本的传递结构。

图中的灰色区域用 TPOT 库实现了自动处理。实现该部分的自动处理需要用到遗传算法。

我们这里不深入讲解,而是直接应用它。为了能够使用 TPOT 库,你需要先安装一些 TPOT 建立于其上的 python 库。下面我们快速安装它们:

安装 DEAP, update_checker和tqdm库

pip install deap
pip install update_checker
pip install tqdm

安装TPOT库

pip install tpot
然后下载上一篇给出的训练和测试集,下面给出详细代码及相关注释,大家可以对着敲一下代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing

分别读取训练集和测试集,分隔符为逗号

train = pd.read_table(‘Train_UWu5bXk.txt’, sep=’,’)
test = pd.read_table(‘Test_u94Q5KV.txt’, sep=’,’)
可以输出一下 train 看看:

下面是一些数据清洗工作:

产品重量为空的单元格用这列的平均值填充

train[‘Item_Weight’].fillna((train[‘Item_Weight’].mean()), inplace=True)
test[‘Item_Weight’].fillna((test[‘Item_Weight’].mean()), inplace=True)

产品脂肪含量为low fat和LF的一律改为Low Fat,为reg的一律改为Regular

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’])

商店成立年份统一转化为已经成立的年数(用2013作为被减数是因为这份数据集是2013年采集的)

train[‘Outlet_Establishment_Year’] = 2013 - train[‘Outlet_Establishment_Year’]
test[‘Outlet_Establishment_Year’] = 2013 - test[‘Outlet_Establishment_Year’]

商店占地面积为空的单元格都用Small填充

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’]

测试集添加一列产品销售情况,数据都用0填充,方便将训练集和测试集拼接起来

test[‘Item_Outlet_Sales’] = 0

拼接后的新DataFrame

combi = train.append(test)

对于商店占地面积、商店所在城市类型、商店类型和产品脂肪含量这四列都调用scikit-learn库中的降维方法,会把各种类型都转为0、1、2这样的简单结构

for i in col:
combi[i] = preprocessing.LabelEncoder().fit_transform(combi[i].astype(‘str’))
combi[i] = combi[i].astype(‘object’)

将拼接后的DataFrame根据原来大小重新拆分成训练集和测试集

train = combi[:train.shape[0]]
test = combi[train.shape[0]:]

刚才为了方便拼接,给测试集添加了一列虚假的产品销售情况,现在将这列删除

test.drop(‘Item_Outlet_Sales’, axis=1, inplace=True)

删除产品ID、产品类型和商店ID后的结果赋值给tpot_train训练集和tpot_test测试集

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训练集中把产品销售情况这列也删除

tpot_train.drop(‘Item_Outlet_Sales’, axis=1, inplace=True)
接下来开始训练模型:

from tpot import TPOTRegressor
from sklearn.model_selection import train_test_split

将tpot_train训练集和目标标签列随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签

X_train, X_test, y_train, y_test = train_test_split(tpot_train, target, train_size=0.75, test_size=0.25)

初始化一个TPOT实例

tpot = TPOTRegressor(generations=5, population_size=50, verbosity=2)

利用fit函数来寻找最优的管道

tpot.fit(X_train, y_train)

fit函数初始化了遗传算法,以找到基于平均k倍交叉验证的最高评分管道,然后对整个提供的样本进行训练,TPOT实例可以作为一个合适的模型使用。

运行效果如下:
【数据结构与算法】遗传算法(四)应用篇之 TPOT 库实现
可以看到 TPOT 寻找到的最优的机器学习模型是极端随机森林回归

然后,可以使用score函数来评估测试集中的最终管道

print(tpot.score(X_test, y_test))

可以用TPOT将相应的Python代码导出到文件中

tpot.export(‘tpot_boston_pipeline.py’)

使用TPOT优化后的代码对测试集进行预测

tpot_pred = tpot.predict(tpot_test)
sub1 = pd.DataFrame(data=tpot_pred)

预测结果列重命名为Item_Outlet_Sales

sub1 = sub1.rename(columns={‘0’:‘Item_Outlet_Sales’})

新增Item_Identifier列

sub1[‘Item_Identifier’] = test[‘Item_Identifier’]

新增Outlet_Identifier列

sub1[‘Outlet_Identifier’] = test[‘Outlet_Identifier’]

对三个列重命名

sub1.columns = [‘Item_Outlet_Sales’, ‘Item_Identifier’, ‘Outlet_Identifier’]

DataFrame列重新排序

sub1 = sub1[[‘Item_Identifier’, ‘Outlet_Identifier’, ‘Item_Outlet_Sales’]]

输出符合比赛要求提交格式的csv文件

sub1.to_csv(‘tpot.csv’, index=False)
如果你提交了这个 csv,那么你会发现其实效果没有那么好。实际上,TPOT 库有一个简单的规则。如果你不运行 TPOT 太久,那么它就不会为你的问题找出最可能传递方式。

所以,你得增加进化的代数,拿杯咖啡出去走一遭,其它的交给 TPOT 就行。此外,你也可以用这个库来处理分类问题。进一步内容可以参考这个文档:http://rhiever.github.io/tpot/

除了比赛,在生活中我们也有很多应用场景可以用到遗传算法。

RPA手把手——【数据结构与算法】遗传算法(四)应用篇之 TPOT 库实现相关推荐

  1. 数据结构和算法(四)之链表结构

    数据结构和算法(四)之链表结构 一. 认识链表 链表和数组一样,可以用来存储一系列的元素,但是链表和数组的实现机制完全不同. 这一章中,我们就来学习一下另外一种非常常见的用于存储数据的线性结构:链表! ...

  2. 04_JavaScript数据结构与算法(四)队列

    JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...

  3. 【数据结构与算法】程序内功篇四--栈

    程序内功篇四--栈 一.栈的原理 二.顺序栈的实现 1.顺序栈原理 2.栈的创建 3.顺序栈进栈 4.顺序栈出栈 5.顺序栈删除 6.清空栈与是否清空栈 三.链表栈的实现 1.栈的单链表实现 2.创建 ...

  4. 数据结构与算法?看这篇就够了!

    数据结构与算法?看这篇就够了! 幂次学院 算法爱好者 昨天 程序 = 数据结构 + 算法 --图灵奖得主,计算机科学家N.Wirth(沃斯) 幂次学院,"人工智能"公众号旗下教育品 ...

  5. Java数据结构和算法(四)——栈

    前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...

  6. apriori算法c++实现_经典数据结构与算法(四):Python/C/C ++实现队列类型双端队列数据结构...

    前期文章点击这里: 经典数据结构与算法(一):Python/C/C ++实现堆栈和队列 双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除.因此,它不遵循FIFO规则(先进先出). ...

  7. 数据结构与算法之美01-开篇词

    开篇词 | 从今天起,跨过"数据结构与算法"这道坎 ​ 作者是王争,毕业于西安交通大学计算机专业.现在回想起来,本科毕业的时候,我的编程水平其实是很差的.直到读研究生的时候,一个师 ...

  8. 数据结构与算法?看这篇就够了!!!

    程序 = 数据结构 + 算法 --图灵奖得主,计算机科学家N.Wirth(沃斯) 作为程序员,我们做机器学习也好,做Python开发也好,Java开发也好. 有一种对所有程序员无一例外的刚需 -- 算 ...

  9. 【数据结构与算法】第三篇:题型积累

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.刷题的准备与步骤 (1)第一步:先学会至少一种计算机语言.学习数 ...

最新文章

  1. 巧妙设置Android来方便管理Linux和Windows
  2. 网络专业人士笔记(1~4章)
  3. 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
  4. windows 2003 配置dhcp服务器
  5. Cloudera Manager 和CDH6.0.1安装,卸载,各步骤截图(此博文为笔者辛苦劳作最终生成的,使用了3个熬到凌晨2~4点的夜晚,外加一个周末完成,请转载时记录转载之处,谢谢)
  6. 浅析“字典--NSDirctionary”理论
  7. Stack around the variable 'date' was corrupted.
  8. 关于SAP Spartacus Routing 页面上下文切换机制的实现
  9. zoj 3632 Watermelon Full of Water
  10. Python常用数据结构之heapq模块
  11. 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
  12. 怎样成为一名高手观后感
  13. python no such file or directory_Python3 no such file or directory
  14. python kivy kv模板调用_正确使用.kv文件进行Kivy并将其导入到Python...
  15. gimp中文版教程_GIMP中详细教程.pdf
  16. 《延禧攻略》的配色,简直美到爆!
  17. 实践 | 图片文本爬虫与数据分析
  18. ue怎么转换html格式,UE编辑器UltraEdit怎么格式化代码
  19. python numpy 中linspace函数
  20. 环比和同比的定义和应用

热门文章

  1. 背下来就是电脑高手(转)
  2. input标签的tabindex属性 a标签的tabindex属性
  3. SPSS 操作(一)数据选取 :个案选取和字符变量的筛选
  4. mysql批量加逗号_Excel批量给数据添加单引号和逗号 (效率)
  5. 电磁兼容EMC——初级篇
  6. 山东大学2018级操作系统实验三
  7. 基于高频词抽样+负采样的CBOW模型
  8. 3、MHC主要组织相容性复合体
  9. 关于peek()与eof()函数。
  10. UR机器人开发(1)-上位机直接通讯控制