RPA手把手——【数据结构与算法】遗传算法(四)应用篇之 TPOT 库实现
艺赛旗 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 库实现相关推荐
- 数据结构和算法(四)之链表结构
数据结构和算法(四)之链表结构 一. 认识链表 链表和数组一样,可以用来存储一系列的元素,但是链表和数组的实现机制完全不同. 这一章中,我们就来学习一下另外一种非常常见的用于存储数据的线性结构:链表! ...
- 04_JavaScript数据结构与算法(四)队列
JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...
- 【数据结构与算法】程序内功篇四--栈
程序内功篇四--栈 一.栈的原理 二.顺序栈的实现 1.顺序栈原理 2.栈的创建 3.顺序栈进栈 4.顺序栈出栈 5.顺序栈删除 6.清空栈与是否清空栈 三.链表栈的实现 1.栈的单链表实现 2.创建 ...
- 数据结构与算法?看这篇就够了!
数据结构与算法?看这篇就够了! 幂次学院 算法爱好者 昨天 程序 = 数据结构 + 算法 --图灵奖得主,计算机科学家N.Wirth(沃斯) 幂次学院,"人工智能"公众号旗下教育品 ...
- Java数据结构和算法(四)——栈
前面我们讲解了数组,数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,我们期望的是插入.删除和查找性能都比较好.对于无序数组,插入快,但是删除和查找都很慢,为了解决这些问题,后面我们会讲解比 ...
- apriori算法c++实现_经典数据结构与算法(四):Python/C/C ++实现队列类型双端队列数据结构...
前期文章点击这里: 经典数据结构与算法(一):Python/C/C ++实现堆栈和队列 双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除.因此,它不遵循FIFO规则(先进先出). ...
- 数据结构与算法之美01-开篇词
开篇词 | 从今天起,跨过"数据结构与算法"这道坎 作者是王争,毕业于西安交通大学计算机专业.现在回想起来,本科毕业的时候,我的编程水平其实是很差的.直到读研究生的时候,一个师 ...
- 数据结构与算法?看这篇就够了!!!
程序 = 数据结构 + 算法 --图灵奖得主,计算机科学家N.Wirth(沃斯) 作为程序员,我们做机器学习也好,做Python开发也好,Java开发也好. 有一种对所有程序员无一例外的刚需 -- 算 ...
- 【数据结构与算法】第三篇:题型积累
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.刷题的准备与步骤 (1)第一步:先学会至少一种计算机语言.学习数 ...
最新文章
- 巧妙设置Android来方便管理Linux和Windows
- 网络专业人士笔记(1~4章)
- 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )
- windows 2003 配置dhcp服务器
- Cloudera Manager 和CDH6.0.1安装,卸载,各步骤截图(此博文为笔者辛苦劳作最终生成的,使用了3个熬到凌晨2~4点的夜晚,外加一个周末完成,请转载时记录转载之处,谢谢)
- 浅析“字典--NSDirctionary”理论
- Stack around the variable 'date' was corrupted.
- 关于SAP Spartacus Routing 页面上下文切换机制的实现
- zoj 3632 Watermelon Full of Water
- Python常用数据结构之heapq模块
- 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
- 怎样成为一名高手观后感
- python no such file or directory_Python3 no such file or directory
- python kivy kv模板调用_正确使用.kv文件进行Kivy并将其导入到Python...
- gimp中文版教程_GIMP中详细教程.pdf
- 《延禧攻略》的配色,简直美到爆!
- 实践 | 图片文本爬虫与数据分析
- ue怎么转换html格式,UE编辑器UltraEdit怎么格式化代码
- python numpy 中linspace函数
- 环比和同比的定义和应用