TPOT

基于遗传规划的自动机器学习

Posted by QITINGSHE on July 2, 2018

简介

随着数据科学的发展,希望降低机器学习门槛的需求逐渐增长。本文介绍了基于树表示的工作流优化,可以将机器学习中乏味的部分自动化。我们称之为TPOT,TPOT可以在无人为输入和先验知识的情况下显著提高基本的机器学习分析,同时为解决可能产生的使工作流复杂化的倾向,这里同时引入Pareto优化,这样可以在保持准确率不降低的条件下生成一个紧凑的工作流。

完整的机器学习(特别是监督式机器学习)工作流:

  • 数据清洗
  • 特征工程
  • 模型选择
  • 训练测试及超参调优

在TPOT中,我们将工作流定义为一棵树,其中非叶子节点为操作节点,叶子节点定义为数据节点,数据集从叶子节点流入,由操作节点变换,在根节点处分类/回归。

对于操作节点,本文一共定义四种操作节点,分别为:预处理、分解/降维、特征选择和学习模型。具体介绍中我们会讲到TPOT的工具和概念,首先会介绍TPOT工作流的操作节点,接着描述这些节点如何结合在一起成为一个基于树的工作流,然后阐述如何通过遗传编程来进化基于树的工作流,最后给出一些数据集的例子来看一下效果。

METHODS

Pipeline Operators

TPOT中一共只有四种工作流节点,这些节点

预处理 Operators

我们实现了一个使用样本均值和方差来缩放特征的标准缩放算子,一个使用样本中值和四分位间距范围来缩放特征的鲁棒缩放算子,以及通过数字特征的多项式组合生成交互特征的算子

分解 Decomposition

我们实现了RandomizedPCA,这是一种使用随机SVD的主成分分析变体

特征选择 Feature Selecion

我们实现了一个递归特征消除策略RFE,一个选择前k个特征的策略,一个选择前n个百分位特征的策略,以及一个消除不满足最小方差的特征的策略阈值。

模型 Models

在本文中,我们关注监督学习模型,我们实现了基于个体和集合树的模型(DecisionTreeClassifier,RandomForestClassifier和GradientBoostingClassifier),非概率和概率线性模型(SVM和LogisticRegression)以及k-近邻居

Assembling Tree-based Pipelines

为了将所有这些运算符组合成一个灵活的管道结构,我们将工作流实现为树的结构,如下图所示

TPOT

由上图可以发现,我们将不同的操作节点变为树的节点,每个工作流由输入数据的的拷贝份开始,将数据喂入四类工作流节点,当数据通过树时,这些数据将会被修改,多路复制数据最终结合为一个数据。

每次通过建模运算传递数据集时,都会生成的分类,以便处理数据的最新分类器覆盖任何先前的预测,并且较早的分类器的预测存储为新特征。一旦数据集被管道完全处理,最终预测用于评估管道的整体分类性能。在所有情况 下,我们将数据划分为分层的75%训练和25%的测试集,这样管道只会进行预测,因此只能在测试集上进行评估。这种基于树的流水线表示,例如,一个管道只能在数据集的单个副本上串行应用操作,另一个管道可以轻松地在数据集的多个副本上工作,并在最终分类之前将他们组合在一起。

Evolving Tree-based Pipelines

为了自动生成和优化这些基于树的管道,我们使用遗传编程来完成该工作,使用Python包DEAP 来实现。 传统上,GP构建数学函数树以针对给定标准进行优化。 在TPOT中,我们使用GP来演化流水线运算符的序列以及每个运算符的参数(例如,随机林中的树的数量或在要素选择期间要选择的要素对的数量),以最大化管道的分类准确度。 我们遵循表1中描述的设置的标准GP过程,其中对管道的更改可以修改,移除或插入新的管道操作符序列到基于树的管道中。

接下来我们讲一下Pareto优化,为了降低流水线分类的总体复杂度,我们采用pareto优化来优化两个独立的目标;在经过几代的演变,TPOT的GP算法将修补流水线,添加新的流水线操作,提高适应性并消除冗余,在寻找高性能管道搜索中,在每次TPOT运行结束时,我们使用在TPOT运行期间发现的单个性能最佳的流水线,作为代表流水线。

实验结果

实验结果(上图给出了在 UCI 数据集上的部分实验结果,其中 Random Forest 包含了 500 棵决策树,TPOT-Random 采用了随机搜索而不是 GP)表明了 TPOT 系的方法在很多任务上都能取得不错的效果。

我在IRIS数据集上做了一次实验,在第一代迭代过程中,实验得分可以达到0.99