微軟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-業內最親民的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()
微軟NNI-業內最親民的AutoML工具介紹(1):AutoFeatureENG

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

Published in News by Awesome.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *