初识TPOT:一个基于Python的自动化机器学习开发工具
1. TPOT介绍
一般来讲,创建一个机器学习模型需要经历以下几步:
- 数据预处理
- 特征工程
- 模型选择
- 超参数调整
- 模型保存
本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Python的自动机器学习开发工具。项目源代码位于:https://github.com/EpistasisLab/tpot
下图是一个机器学习模型开发图,其中灰色部分代表TPOT将要做的事情:即通过利用遗传算法,分析数千种可能的组合,为模型、参数找到最佳的组合,从而自动化机器学习中的模型选择及调参部分。

使用TPOT(版本0.9.5)开发模型需要把握以下几点:
- 在使用TPOT进行建模前需要对数据进行必要的清洗和特征工程操作。
- TPOT目前只能做有监督学习。
- TPOT目前支持的分类器主要有贝叶斯、决策树、集成树、SVM、KNN、线性模型、xgboost。
- TPOT目前支持的回归器主要有决策树、集成树、线性模型、xgboost。
- TPOT会对输入的数据做进一步处理操作,例如二值化、聚类、降维、标准化、正则化、独热编码操作等。
- 根据模型效果,TPOT会对输入特征做特征选择操作,包括基于树模型、基于方差、基于F-值的百分比。
- 可以通过export()方法把训练过程导出为形式为sklearn pipeline的.py文件
2. TPOT实现模型训练
下面是一个使用TPOT对MNIST数据集进行模型训练的例子:
# -*- coding: utf-8 -*-
"""
@author: wangkang
@file: start_tpot.py
@time: 2018/11/9 11:21
@desc: TPOT 实践
"""
import time
from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split # 载入数据集
digits = load_digits() X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target,
train_size=0.75, test_size=0.25)
start = time.time() """
generations:运行管道优化过程的迭代次数
population_size:在遗传进化中每一代要保留的个体数量
verbosity: TPOT运行时能传递多少信息
"""
# 使用TPOT初始化分类器模型
tpot = TPOTClassifier(generations=5, population_size=20, verbosity=0) # 模型训练
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
print('找到最优模型与超参数耗时:', time.time() - start) # 分类器其模型保存为 .py
tpot.export('tpot_mnist_pipeline.py')
运行结果如下所示:

可以观察到,经过5次遗传进化,找到了此范围内得分最高的模型及参数组合!但观察代码耗时发现,在i5-7500 CPU @ 3.40GHz条件下,这5次迭代,共耗时1297 S。
我们可以打开生成的 tpot_mnist_pipeline.py 文件,如下所示:
import numpy as np
import pandas as pd
from sklearn.ensemble import ExtraTreesClassifier, GradientBoostingClassifier
from sklearn.feature_selection import VarianceThreshold
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline, make_union
from tpot.builtins import StackingEstimator """
# NOTE: Make sure that the class is labeled 'target' in the data file
tpot_data = pd.read_csv('PATH/TO/DATA/FILE', sep='COLUMN_SEPARATOR', dtype=np.float64)
features = tpot_data.drop('target', axis=1).values
training_features, testing_features, training_target, testing_target = \
train_test_split(features, tpot_data['target'].values, random_state=None)
""" # 以上代码需修改为下面形式以供正确运行
from sklearn.datasets import load_digits digits = load_digits()
X = digits.data
y = digits.target training_features, testing_features, training_target, testing_target = \
train_test_split(X, y, random_state=None) # 此为由TPOT遗传算法得到的最优模型及参数组合
# Average CV score on the training set was:0.9792963424938936
exported_pipeline = make_pipeline(
PolynomialFeatures(degree=2, include_bias=False, interaction_only=False),
ZeroCount(),
LinearSVC(C=0.5, dual=True, loss="squared_hinge", penalty="l2", tol=0.001)
)
exported_pipeline.fit(training_features, training_target) results = exported_pipeline.predict(testing_features) print(results)
可以发现,训练好的模型以pipeline的形式保存(未进行持久化保存)。这样,整个关于MNIST数据集的分类器就训练完成了。
3. 总结
1、通过简单浏览源码发现,TPOT是在sklearn的基础之上做的封装库。其主要封装了sklearn的模型相关模块、processesing模块和feature_selection模块,所以TPOT的主要功能是集中在使用pipeline的方式完成模型的数据预处理、特征选择和模型选择方面。此外,我们还发现了TPOT已经对xgboost进行了支持。
2、虽然TPOT使用遗传算法代替了传统的网格搜索进行超参数选择,但由于默认初始值的随机性,在少量的进化(迭代)次数下,TPOT最终选择的模型往往并不相同。
3、计算效率问题。作者在代码中写道:进化(迭代)次数和每一代保留的个体数量值越多,最终得模型得分会越高。但这同样也会导致耗时很长。
初识TPOT:一个基于Python的自动化机器学习开发工具的更多相关文章
- psutil一个基于python的跨平台系统信息跟踪模块
受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...
- 基于python的互联网软件测试开发(自动化测试)-全集合
基于python的互联网软件测试开发(自动化测试)-全集合 1 关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
- 基于Python的Web应用开发实践总结
基于Python的Web应用开发学习总结 项目地址 本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解
文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...
- 转: Orz是一个基于Ogre思想的游戏开发架构
Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...
- 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx
LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...
- 基于Python的WEB接口开发与自动化测试 pdf(内含书签)
基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...
随机推荐
- 【转】CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
原文地址:https://www.cnblogs.com/lzpong/p/5755678.html 我这里是centos7 升级到gcc8.1,过程差不多,参考这篇文章,记录一下. ---原文--- ...
- LeetCode题解之Linked List Cycle
1.题目描述 2.问题分析 使用快慢指针方法,一个快指针,一个慢指针,如果到某个时候,快指针追上了慢指针,则说明有环存在. 3.代码 bool hasCycle(ListNode *head) { i ...
- Visual Studio Code配置JavaScript环境
一·下载并安装Node.js/Visual Studil Code 下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 选安装目录进行安装 环境配置 · ...
- Linux磁盘及分区之wwid和uuid
背景描述,在Linux系统中,如果添加了新的SCSI磁盘或者映射SAN存储LUN操作,重启操作系统之后会出现磁盘标识符(sd*)错乱的情况. 例如之前添加的SAN存储LUN的磁盘标识符为/dev/sd ...
- Hadoop 本地模式安装
0. 说明 本地模式:使用的存储系统,是Linux系统 提前安装好 JDK 参考 CentOS7 安装 JDK 1. 将 Hadoop 的安装包通过 Xftp 发送到centos 用户的 home 目 ...
- 1.2环境的准备(二)之Pycharm的安装和使用
目录: 1.Pycharm的安装 2.Pycharm的使用 (一)pycharm的安装: (1)官网下载:(分为两个版本,专业版和社区版,社区版就足够我们学习用的)https://www.jetbra ...
- 1.Solr介绍
转载请出自出处:http://www.cnblogs.com/hd3013779515/ Solr是一个基于Lucene的全文搜索引擎,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,实现 ...
- 晚上打开eclipse时碰到这个问题 :Workspace in use or cannot be created, choose a different one.
晚上打开eclipse时碰到这个问题 :Workspace in use or cannot be created, choose a different one. 网上看到这方面的解决方式: 原因: ...
- ipv6导致的域名解析慢,nslookup,lvs,hosts.conf
最近总是反应网站慢,先是查内网环境,又查机房网络环境,再查lvs配置,更查到xen开启导致的网络性能下降 更进一步的查到域名解析慢,最终发现ipv6的默认开启会导致域名解析慢: 而应用服务程序内部大多 ...
- 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
#!/usr/bin/python # coding:utf- import smtplib from email.MIMEText import MIMEText from email.Utils ...