前言
我之前写过一篇如何实现AutoML -- 先Auto每个环节,大致思路是让机器先自动化每一个小环节,每个环节输出唯一一个结果,这样可以极大的简化搜索空间。比如我们有三个环节,A,B,C,分别产出10,10,10种可能,为了得到全局最优,我们需要10*10*10尝试1000次完整计算。而如果每个只取一个局部最优,那么只需要计算30次,虽然最终结果可能不是最优的,但在现实中,这也是一个比较可行的方案。
让机器先做出Baseline
受TransmogrifAI 启发,我觉得可从另外一个维度去减轻算法工程师的负担,基本思路就是,机器先做出前面的工作,找出最好的特征组合和算法,然后给出详细的结果细节,这包括:
- 机器得到的特征工程结果
- 机器选取的最优算法衡量指标值,比如F1,AUC等等
- 机器得到的最优算法使用的使用的参数详情
这可以给工程师很大的指导,让他们一下子就知道,通过当前的数据,使用一些常见的算法,能达到一个什么样的Baseline。如果数据足够好,机器的结果可能已经让人满意,算法工程师可以直接交付出去。如果机器的结果不好,算法工程师干预下,是不是可以增加新的数据或者新的维度?另外,再次重跑的时候,是不是可以让机器去掉一些特征组合和跳过某些算法的测试。
额外:对于特征工程
以前我一直想着如何从表中获取数据,从表中抽象数据,比如这篇文章从DataFrame自动化特征抽取的尝试。但其实从表中能抽取的信息是非常有限的,无非就是类型,规则,统计,以及人的先验知识。TransmogrifAI给了我一个极大的启发,就是我们需要知道我们数据的本源是什么,我们应该往数据的源头再前进一步,比如到网页端去,用户选择了下拉列表,提交了文本款,点击了一个checkbox,在特定时间做了一次点击,这些才是是用户的选择,数据的本源,这些才是影响最后的结果东西,我们可以把同样的思维,迁移到App里,小程序里。
通过上面的分析,我们对特征的抽象就比较简单了,我们抽象出来的是checkbox,textarea,textinput ,datatime,email,phone number,这些可以给我们带来额外的信息,比如checkbox,一般就是枚举类型,在机器学习里该怎么处理枚举类型呢,这个就变得更自动化了。源头可以带来很多新的信息,帮助机器更好的做自动化。