如何实现AutoML -- 先Auto每个环节

前言

先给AutoML做个定义:用户给出可能的raw数据(但是经过标注),机器自动完成整个特征化,模型训练,模型选择/组合,超参数调优,部署上线。

最近一直在思考如何提高算法工程师效率,并且能让普通工程师也参与进来,毕竟现在来看,招聘到一个合格的算法成本颇高。经过对现实中很多场景的观察,我发现很多情况下算法训练并没有太多的数据可以用(标注的好的数据是昂贵的),那么通过算力实现AutoML则是一种可能的选择。 在StreamingPro中,特征处理都是分布式的,但是到最后模型训练,tensorflow/sklearn目前还都都是单机实现,那么大部分节点都会是空闲的,所以这个时候通过加强算力的利用率来提供AutoML程度,显然是相当划算的。

而要实现最终的AutoML,则需要先Auto每一个环节。就目前而言,如果能实现以下四个Auto,则很容易实现最终的AutoML。实现真正的,标注,丢数据即可,后面的流程完全机器完成。

AutoFeature

丢过来一张表,系统自动实现特征抽取(组合,转化)。之前已经做过一个尝试,从DataFrame自动化特征抽取的尝试,对应的代码在easy_feature。

当时提出的核心四点是:类型,规则,统计,先验,通过这四个信息决定该如何生成特征。

然而这样做到的是shallow featurize,其本质只是为每个字段生成一个vector/scalar 表示形式,最后concat成一个final向量,并不具备根据训练过程或者结果调整新的表达方式的能力。具体做法就是:得到多组特征表达,然后使用同一个模型对多组表达同时进行训练,选取表达最好的一组。

AutoSamples

自动化样本处理,这包含了如下几个部分:

  1. 通过合适的方式(比如随机)切分出测试和训练集。
  2. 计算得到每个分类的分布,选择下采样或者过采样,或者将样本多的分类切分成多份,使用同一个算法进行多次训练得到多个模型。

AutoModel

多模型同时训练choose best

AutoHyperParamTuning

单一模型的多组参数组合,自动探索参数的向上或者向下走。

处理流程

显然,如果把四步暴力组合,显然搜索空间是巨大的。实际上对于AutoFeature,我们会挑选一个通常表现会比较好的算法(如随机森林/SVM),先找出特征表达的最好的形式,接着才进入AutoSamples 阶段,之后再进入AutoModel阶段。在AutoModel阶段,我们会挑选出最好的一个模型,进入AutoHyperParamTuning阶段,对每个参数增大或则减少来判断效果(当然,可以去参考一些开源的的超参数自动调优算法)

最终我们会得到一个合适的模型,理论上用户可以预先设计一个准确率,如果达到了,那么就可以发布了,否则应该发邮件通知用户,告知用户状况,并且把自己的模型和参数给用户看。

在StreamingPro里,当训练结束时,其实对应的Predict Service已经可以用了,当然,我们可能需要进行单独作为API部署,这个时候只需要让StreamingPro能够和jekins发消息即可,即可完成自动部署流程,这也得益于StreamingPro支持多种模型的部署:MLSQL如何支持部署SKLearn,Tensorflow,MLLib模型提供API预测服务

你可能感兴趣的:(如何实现AutoML -- 先Auto每个环节)