微软nni_微软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 
f3f929fc846b315183a1f05d63d88fe6.png

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

04 特征Exploration

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

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

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

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

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

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

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

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

bccac0c844c4f21b7b45fb67f642e6a7.png

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

    RECEIVED_PARAMS = nni.get_next_parameter()
caf5e101edb76c0e3cf4502e0aa60a09.gif

05 特征Selection

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

6d0a73c0239450955b16aadcfb677745.png

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

989d4ac1a7cb6e4e29d5cd45ef36d216.png

06 总结

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

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

brew install libomp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值