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 操作,要求表之间的关联,计算量大,大数据场景下应用受限。

Transmogrify.AI automl 库相关推荐

  1. 一文盘点AutoML 库,自动机器学习演讲摘要

    作者:Xu LIANG 翻译:王雨桐 校对:王威力 本文长度约为1300字,建议阅读5分钟 自动化程度 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别: ...

  2. 独家 | 一文盘点AutoML 库(附PPT等链接)

    作者:Xu LIANG 翻译:王雨桐 校对:王威力 本文长度约为1300字,建议阅读5分钟 本文是Masashi Shibata针对AutoML演讲中的摘要. 自动化程度 Jeff Dean在ICML ...

  3. 独家 | 一文盘点AutoML 库

    作者:Xu LIANG 翻译:王雨桐 校对:王威力 本文长度约为1300字,建议阅读5分钟 本文是Masashi Shibata针对AutoML演讲中的摘要. 自动化程度 Jeff Dean在ICML ...

  4. RK3399pro Linux Rock-X AI组件库支持

    1.介绍 Rock-X SDK 是基于 RK3399Pro 的一组快捷AI组件库,初始版本包括:人脸检测.人脸识别.活体检测.人脸属性分析.人脸特征点.人头检测.人体骨骼关键点.手指关键点.人车物检测 ...

  5. AI 删库,程序员背锅?

    作者 | 一一 出品 | AI科技大本营 又一代码清库的惨案发生了,不过这次要背锅是 AI. 近日,美国最大点评网站 Yelp 的工程师训练的神经网络闯祸了.他们训练了一个用来消除 bug 的神经网络 ...

  6. 猿圈 题库_猿圈AI考试题库 智慧在线考试宝典

    原标题:猿圈AI考试题库 智慧在线考试宝典 网络编辑工具箱,一键排版格式化网编工具,网络编辑转帖工具.最终版,不再更新! 猿圈 AI 考试题库 智慧在线考试宝典 作为HR的你 有没有因为不知道某个岗位 ...

  7. AI删库,程序员背锅?

    作者 | 一一 出品 | AI科技大本营 又一代码清库的惨案发生了,不过这次要背锅是 AI. 近日,美国最大点评网站 Yelp 的工程师训练的神经网络闯祸了.他们训练了一个用来消除 bug 的神经网络 ...

  8. 福利 | 放送AI华人库试用名额!专项代码找到领域专家

    文末有福利哦~ 如今,人工智能领域发展如火如荼,国家也高度重视人工智能的发展,自然基金委成立了人工智能的专项代码F06,我们做了一个很有意思的尝试,首先通过在相关领域发表的论文找到2000位左右华人专 ...

  9. 全球名校AI课程库(44)| 慕尼黑工大 · 计算机视觉深度学习进阶课『Advanced Deep Learning for Computer Vision』

最新文章

  1. 09JavaScript中的作用域
  2. 090901 T 面试中遇到的一个Sql Question
  3. 【oracle笔记3】多表查询
  4. 通过Visual Studio 2005的项目模板来加速开发过程
  5. WLAN与WIFI的区别
  6. 3 个相见恨晚的 Google Colaboratory 奇技淫巧!
  7. java 自定义注解获取_Java自定义注解
  8. GitHub 热榜:这款开源神器可帮您将文本转换为手写文字,并下载为 PDF 格式文件!...
  9. springboot去掉git版本控制_关于 Git 提交这些规范,你都遵守了吗?
  10. Linux驱动(3)--单片机驱动与Linux驱动的区别
  11. 一招教你查看Mac本机WiFi密码
  12. iperf 服务端发送数据_iperf3使用方法详解
  13. Windows11 开发版bt磁力链种子及其他下载地址整理
  14. Java线程:新特征-原子量
  15. 【14NOIP普及组】珠心算测验
  16. “我爱淘”冲刺阶段Scrum站立会议8
  17. 大数据即将突破万亿,数据科技如何落地成产品?
  18. 架构问题--削峰填谷
  19. sodo与visodo的日常使用
  20. 服务器开通网站来宾帐户,IIS 增加Internet来宾用户权限

热门文章

  1. SpringCloud源码探析(三)-Nacos集群搭建与配置管理
  2. MYSQL 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
  3. P3887 [GDOI2014]世界杯
  4. 5W无线充SOC方案芯片 封装SOP16
  5. php获取 url 井号,php获取url井号后的参数(描点#后参数)
  6. 双十一数码产品哪些好?双十一数码好物推荐
  7. 洪荒制作量子计算机 小说,小说穿越洪荒我居然成了无敌大表哥全章节阅读
  8. 基于java+ssm+vue的中医养老服务平台设计
  9. 零基础编程学python还是java_零基础学python还是java 二者有哪些区别
  10. 728 | @烤仔建工又双叒叕来了