Transmogrify.AI automl 库

Transmogrify.AI

目录

Transmogrify.AI

Introduction 

Abstractions

Features

Stages

Workflows and Readers

AutoML Capabilities

Vectorizers and Transmogrification

Feature Validation

ModelSelectors

源代码解读

设计

代码目录分析

与 feature tools 对比


Introduction

TransmogrifAI 是一个基于 Scala 语言和 SparkML 框架,用于结构化数据的端到端AutoML库。TransmogrifAI主要是对SparkML做了一些封装,增加了自动特征工程、自动模型选择的功能。由于Spark是个高性能分布框架,scala 是门高糖语言,基于spark 和scala 的automl 库TransmogrifAI 在性能和易用性方面都有不错的表现,尤其是在处理企业级的大数据集和多应用场景的机器学习任务时。

Abstractions

TransmogrifAI设计的目的是用来简化机器学习工作流。为了达到这个目的, TranmogrifAI定义了一组抽象概念。 这组抽象概念由Features, Stages, Workflows 和 Readers 组成。下图展现了这组概念之间的关系。

 

 

Features

TransmogrifAI 里首要的抽象概念是 Feature。用官方文档的话说, A Feature is essentially a type-safe pointer to a column in a DataFrame and contains all information about that column – it’s name, the type of data to be found in it, as well as lineage information about how it was derived.

这里的Feature 有点像spark 里的rdd,或者像 dataset(因为Feature 带编译时类型信息)。此外 Feature 类似 rdd 有lineage,需要输出数据时才触发计算。

Stages

 

Features 可以被Stages 操作来产生新的Features。

和SparkML一样, TransmogrifAI 里有两类stage– Transformers and Estimators。

 

Transformers

Transformers 指定一个函数,把一个或多个features 转化为一个或多个Features。简单地说,一个feature对应dataframe的 一列。transform就是对dataframe 的map 操作。

以下是一个transformer 的例子:

val nameTokens = new TextTokenizer[Text]().setAutoDetectLanguage(true).setInput(name).getOutput()

输出nameTokens 是一个类型为 TextList新的features

 

Estimators

 

Estimater 生成transformer. Think of Estimators as learning algorithms, that need to be fit to the data, in order to then be able to transform it.

 

TransmogrifAI 用户不需要关心算法的训练,训练一个workflow时,这一切自动发生。下面是一个bucketizing estimator 的例子。这个estimater 使用决策树对age 进行分桶, 然后把 age 映射到对应的桶, 生成一个 OPVector类型的feature:

val bucketizedAge = new DecisionTreeNumericBucketizer[Double, Real]().setInput(label, age).getOutput()

 

Workflows and Readers

Reader 负责从数据源读取数据作为Features,这是模型的起点。Reader 有点类似于 Hadoop 里的 inputformat 或 spark 里的datasource ,负责在必要时把数据源的数据load 进来。

 

 Features 和Feature transformations 定义好之后,给workflow 传入一个DataReader以及设置需要输出的features,workflow构建一个 由stage 组成的dag 图。

 

训练Workflow 时, workflow通过设置的需要输出的features,推导出依赖的整个由Features、Transformers和 Estimators组成的DAG图。Workflow 读入 DataReader 指定的数据,调度计算这个 DAG图,中间的Estimater 生成对应的Transformers,得到最终的模型。

AutoML Capabilities

Vectorizers and Transmogrification

这是一个自动化feature engineering 的stage 。

 

TransmogrifAI  transmogrifier (shortcut .transmogrify()) 输入一系列的features, 基于feature的类型,自动地应用对应类型的默认处理方式 (比如one hot encoding, tokenization, split Emails and pivot out the top K domains) 把feature 转化成vector,拼接组合在一起。

 

val features = Seq(email, phone, age, subject, zipcode).transmogrify()

如果想要对单个feature 进行特征工程,可以使用如下的方式,每种类型都有对应的vectorize()

 

val emailFeature = email.vectorize()

val features = Seq(emailFeature, phone, age, subject, zipcode).transmogrify()

 

 

 

特征转换的代码实现在com.salesforce.op.stages.impl.feature.*

Feature Validation

SanityChecker

 

这是一个自动特征选择的stage。

The SanityChecker 是一个estimator。Sanitychecker 在模型选择之前,剔除掉无用的列。Sanitychecker 统计feature 的一些信息,(比如方差,和label的相关系数等),剔除掉对一些无用的列(比如,一个列方差太小、与label的相关性太低、category类型分布太集中等)。

 

SanityChecker 的使用方式如下:

 

// Add sanity checker estimator

val checkedFeatures = new SanityChecker().setRemoveBadFeatures(true).setInput(label, features).getOutput()

 

Sanity Checker 这部分实现在com.salesforce.op.stages.impl.preparators

RawFeatureFilter

 

这个stage 剔除在训练集和测试集合里分布差异比较大的原始特征。具体地,如果一个特征在训练集和测试集合的填充率差异比较大,则剔除这个特征。如果一个特征在两个集合分布的交叉熵比较大,也剔除该特征。

 

// Add raw feature filter estimator

val workflow =

   new OpWorkflow()

      .setResultFeatures(survived, rawPrediction, prob, prediction)

      .withRawFeatureFilter(Option(trainReader), Option(scoreReader), None)

 

该功能的代码实现在com.salesforce.op.filters.*

ModelSelectors

这是模型自动化选择的stage

基于不同的任务类型(回归、二分类、多分类),TransmogrifAI 会自动选择最好的模型和最好的超参数。

val (pred, raw, prob) = BinaryClassificationModelSelector().setInput(label, features).getOutput()

ModelSelector 是一个用输入数据来查找最佳模型的Estimator . BinaryClassificationModelSelector 用来处理binary classification tasks, multi classification tasks 可以用 MultiClassificationModelSelector. Regression task 可以用 RegressionModelSelector。

自动模型选择目前支持的分类模型有LogisticRegression, DecisionTrees, RandomForest and NaiveBayes.

支持的回归模型有 LinearRegression, DecisionTrees, RandomForest and GBTrees.

最佳的模型是通过交叉验证来选择最佳的SparkML model 然后做一些封装得到的。 ModelSelector 也可以通过网格搜索来选择最佳的超参数。

 

代码在com.salesforce.op.stages.impl.selector 包下面

源代码解读

设计

Transmogrify 整体设计围绕上文讲到的几个抽象概念Features, Stages, Workflows 和 Readers,代码逻辑比较清晰。

Transmogrif.ai 模型训练过程是把estimator 转换成transformer 的过程。

 

 

代码目录分析

com.salesforce.op.filters

com.salesforce.op.filters.* 下直接定义了RawFeatureFilter 相关的的类。

Feature[O <: FeatureType]

这个类似于rdd,它保存了生成这个符号所代表的特征的stage,以及它的上游Feature,这有点类似类似spark lineage 的概念。

RichFeature

com.salesforce.op.dsl.* 下的类,定义了FeatureLike[Featuretype] 到Rich{Featuretype}Feature的隐式转换,Rich{Featuretype}Feature 定义了vectorize 方法,基于scala 隐式类的概念可以实现类似C++的编译时多态。

 

com.salesforce.op.stages.*

这里定义了具体的stage 实现

OpWorkflow

OpWorkflow 定义在com.salesforce.op 包里,直接定义在com.salesforce.op下的都是跟OpWorkflow 相关的类。

 

代码逻辑

给定最终的 feature 和 数据来源 (Reader 或 rawfeaturefilter),构建一个由一个个stage 构成的 dag 计算计划,这些stage 里有 estimator 和 transformer。OpWorkflow 的 train 过程,就是按照dag 图的拓扑顺序,训练 dag 里的estimator ( 可以把estimator看作模型的训练计划) 得到对应的 transformer (可以把transformer 看作model);然后把原来的 dag 里的 estimator 替换成对应的transformer,构成一个新的 dag,并把这个dag 封装成一个opworflowmodel。

 

回头看transmmogrify.ai 的 各项功能都是特定的stage 完成的。

RawFeatureFilter 筛选原始特征

vectorizer 把原始特征转化为向量

SanityChecker 筛选原始特征

Modelselecter 通过网格搜索,交叉验证选取最好的模型

 

 

与 feature tools 对比

Transmogrify.ai 处理的是结构化数据,附带schema 信息。Transmogrify.ai自动特征工程的逻辑是,对于特定类型的数据,如何对该特征进行转化已经知道。如果这个转化特征的模型可以直接给出,这个特征转化的stage就直接设定为 特定的transformer;如果需要拟合一些参数或模型,特征转化stage就设定一个 estimator,在train OpWorkflow 把这个estimator 转化为 transformer的过程就是参数或模型拟合的过程。

 

此外,对于转化后的特征,还可以进行特征选择和特征验证。特征选择和特征验证的过程都是 estimator 转为transformer 的过程。特征选择和特征验证都是基于简单的数据统计。

 

transmogrify.ai 自动特征工程、特征选择和特征验证只是单独考虑每一个特征,并没有考虑特征的交互效果。逻辑比较朴素,计算相对简单,比较通用,能够简化结构化数据机器学习的特征工程工程。相比之下,Feature tools 的 dfs 自动特征工程是特征之间的深度交叉,需要大量的表join 操作,要求表之间的关联,计算量大,大数据场景下应用受限。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值