微软NNI-业内最亲民的AutoML工具学习笔记(1):AutoFeatureENG

01 AutoML概述

记得若干年前的某次周会上,我说“AutoML不光是调参,应该包含自动特征工程。”当时得到了大佬们的嘲讽,说我不懂技术瞎说。今天回过头来看AutoML是一个系统化的体系,包含3个要素:

  1. 自动特征工程AutoFeatureEng

  2. 自动调参AutoTuning

  3. 自动神经网络探索NAS

02 NNI概述

NNI(NerualNetworkIntelligence)是微软发起的一个AutoML开源工具,覆盖了上文提到的3要素,地址:

https://github.com/SpongebBob/tabular_automl_NNI

我目前只学习了自动特征工程这一个模块,总体看微软的工具都有一个比较大的特点,技术可能不一定多新颖,但是设计都非常赞。NNI的AutoFeatureENG基本包含了用户对于AutoFeatureENG的一切幻想。在微软做PD应该挺幸福吧,底层的这些个框架的设计都极为合理。

 

03 细说NNI-AutoFeatureENG

使用是非常简单的,安装下文件中的require,然后

pip install NNI 

NNI把AutoFeatureENG拆分成exploration和selection两个模块。exploration主要是特征衍生和交叉,selection讲的是如何做特征筛选。

04 特征Exploration

在特征衍生方面,微软教科书般的把特征衍生分成以下一些方式:

count:传统的统计,统计一些数据的出现频率

target:特征和目标列的一些映射特征

embedding:把特征看成句子,用word2vector的方式制作向量

crosscount:特征间除法,有点类似CTR

aggregete:特征的min/max/var/mean

nunique、histstat::这两个没太看懂

具体特征怎么交叉,哪一列和哪一列交叉,每一列特征用什么方式衍生呢?可以通过search_space.json这个文件控制。

 

Exploration的目的就是长生出新的特征。在代码里可以用get parameter的方式获取tuning的参数:

    RECEIVED_PARAMS = nni.get_next_parameter()

05 特征Selection

为了避免特征泛滥的情况,避免过拟合,一定要有Selection的机制挑选特征。这里微软同学用了个小心机,在特征筛选的时候主推了同样是他们自己开源的算法lightGBM,

了解xgboost或者GBDT算法同学应该知道,这种树形结构的算法是很容易计算出每个特征对于结果的影响的。所以使用lightGBM可以天然的进行特征筛选。弊病就是,如果下游是个LR这种线性算法,筛选出来的特征是否具备普适性。跑通后产出的结果包含了每个特征的value以及属性。

06 总结

NNI的AutoFeature模块是给整个行业制定了一个教科书般的标准,告诉大家这个东西要怎么做,有哪些模块,使用起来非常方便。但是如果只是基于这样简单的模式,不一定能达到很好的效果。我觉得在Exploration方面可以引用一些DNN的特征组合方式,提取更高维度的特征。在Selection方面可以有更多的智能化方案,比如可以基于下游的算法自动选择Selection机制。

总之NNI在设计曾给了我一些启发,还是一个挺好的开源项目,推荐给大家~大家用的时候如果是Mac电脑可能会遇到gcc的问题,因为开源项目自带的脚本是基于gcc7编译的,可以用下面的方法绕过去。

brew install libomp
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章