1. TPOT介绍

一般来讲,创建一个机器学习模型需要经历以下几步:

  • 数据预处理
  • 特征工程
  • 模型选择
  • 超参数调整
  • 模型保存

本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Python的自动机器学习开发工具。项目源代码位于:https://github.com/EpistasisLab/tpot

下图是一个机器学习模型开发图,其中灰色部分代表TPOT将要做的事情:即通过利用遗传算法,分析数千种可能的组合,为模型、参数找到最佳的组合,从而自动化机器学习中的模型选择及调参部分。

使用TPOT(版本0.9.5)开发模型需要把握以下几点:

  1. 在使用TPOT进行建模前需要对数据进行必要的清洗和特征工程操作。
  2. TPOT目前只能做有监督学习。
  3. TPOT目前支持的分类器主要有贝叶斯、决策树、集成树、SVM、KNN、线性模型、xgboost。
  4. TPOT目前支持的回归器主要有决策树、集成树、线性模型、xgboost。
  5. TPOT会对输入的数据做进一步处理操作,例如二值化、聚类、降维、标准化、正则化、独热编码操作等。
  6. 根据模型效果,TPOT会对输入特征做特征选择操作,包括基于树模型、基于方差、基于F-值的百分比。
  7. 可以通过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的自动化机器学习开发工具的更多相关文章

  1. psutil一个基于python的跨平台系统信息跟踪模块

    受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...

  2. 基于python的互联网软件测试开发(自动化测试)-全集合

    基于python的互联网软件测试开发(自动化测试)-全集合 1   关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...

  3. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  4. 基于Python的Web应用开发实践总结

    基于Python的Web应用开发学习总结 项目地址   本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...

  5. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  6. 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解

    文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...

  7. 转: Orz是一个基于Ogre思想的游戏开发架构

    Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...

  8. 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架 - LinFx

    LinFx 一个基于 .NET Core 2.0 开发的简单易用的快速开发框架,遵循领域驱动设计(DDD)规范约束,提供实现事件驱动.事件回溯.响应式等特性的基础设施.让开发者享受到正真意义的面向对象 ...

  9. 基于Python的WEB接口开发与自动化测试 pdf(内含书签)

    基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...

随机推荐

  1. JavaScript、ES5、ES6的区别

    一.什么是JavaScript 1.JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. 动态:在运行时确定数据类型.变量使用之前不需要类型声明,通常变 ...

  2. jboss4.2.3 屏蔽响应头server信息

    1.修改配置deploy/jboss-web.deployer/service.xml <Connector port="8080" protocol="HTTP/ ...

  3. 转:ASP.NET前台代码绑定后台变量方法总结

    经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教. 一方 ...

  4. length() 用法

    length:(字符串 | 列):求出字符串的长度: 求出bqh4表中zym列的长度. select * from bqh4select a.*,length(zym) from bqh4 a

  5. Spark 基本概念 & 安装

    1. Spark 基本概念 1.0 官网 传送门 1.1 简介 Spark 是用于大规模数据处理的快如闪电的统一分析引擎. 1.2 速度 Spark 可以获得更高的性能,针对 batch 计算和流计算 ...

  6. [技术] OIer的C++标准库 : STL入门

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  7. 【洛谷】【前缀和+st表】P2629 好消息,坏消息

    [题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...

  8. JVM系列三:JVM参数设置

    JVM系列三:JVM参数设置.分析   不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运 ...

  9. Zookeeper入门(二)之基础

    在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.本文主要包含如下内容:1.Architecture(架构)2.Hierarchical namespace(层次命名空 ...

  10. 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

    1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...