欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 20:03:48
...

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-业内最亲民的AutoML工具学习笔记(1):AutoFeatureENG

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

04 特征Exploration

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

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

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

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

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

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

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

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

 

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

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

    RECEIVED_PARAMS = nni.get_next_parameter()

05 特征Selection

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

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

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

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

06 总结

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

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

brew install libomp