AutoGluon背后的技術

AutoGluon背后的技術

AutoGluon是一個Automl框架
Automl:自動對數(shù)據(jù)抽取特征并進行模型訓練
其目的是盡量在不需要人的幫助下對輸入進行特征的提取,選取適合的機器學習模型,對它進行訓練
目前市面上有多款Automl的框架,大部分Automl框架是基于超參數(shù)搜索技術,就是在數(shù)十或數(shù)百個超參數(shù)的候選中選取一個比較好的模型,希望通過這樣避免人工調(diào)參
Autogluon設計思路:想避免超參數(shù)的搜索,從而可以在相同的時間可以訓練多個不一樣的模型
依賴于融合多個無需超參數(shù)搜索的模型
訓練數(shù)10個臭皮匠希望合在一起打敗諸葛亮
使用的技術
- stacking:在同一個數(shù)據(jù)集上訓練多個不一樣的模型,例如KNN,樹模型和方法或者是復雜的神經(jīng)網(wǎng)絡,這些模型的輸出然后進入到一個線性的模型,得到最終的輸出,也就是對這些輸出做加權和,權重是通過訓練得到的,這就是調(diào)用fit模型時autogluon默認使用的方法,大家可以通過訓練打印的信息或者leadboard的方法查看使用了哪些模型

2.技術2:K-則交叉bagging
bagging是指訓練多個同類別的模型,他們可能使用多個初始不同的權重和數(shù)據(jù)塊,最后將這些模型的輸出做平均來降低預測的方差
K-則交叉bagging源自K-則交叉驗證
這里使用3-則來舉例:首先將數(shù)據(jù)分為3塊,
第1則,使用前兩塊數(shù)據(jù)來進行訓練,最后一塊用來評估模型的好壞
第2則:使用第2和第3塊數(shù)據(jù)來進行模型的訓練,第2則做驗證
第3則:使用有兩塊數(shù)據(jù)做訓練,第一塊做驗證
最后預測的時候,將3則模型的輸出進行平均得到最終的輸出
如果調(diào)用fit的時候,指定num_bag_folds=3,那么就是對stacking中的每個模型,對它做3則交叉bagging

技術3:多層stacking
約定是將多個模型的輸出和數(shù)據(jù)合并起來再做一次stacking,也就是在上面再訓練多個模型,然后用一個線性模型得到一個輸出
防止過擬合,多層stacking往往是要配合k-則交叉bagging使用的,也就是這里的每個模型是k個模型的bagging,stacking的輸出是指每個bagging模型的輸出它對應的驗證集上的輸出的合并
在autogluon里可以通過num_stake_levels=1和num_bag_folds=3來選擇額外使用一次stacking,而且每個模型使用3層交叉bagging,因為這兩個選項都會額外增加計算開銷,所以需要用戶在計算資源充分而且需要高精度模型的時候手動置零

比較autogluon和其他automl框架的性能
使用種類多樣的50個數(shù)據(jù)集,1個框架限制4小時運行時間,autoglon贏下了其中30個數(shù)據(jù)集
這說明在給定資源下,通過訓練盡可能多的不一樣的模型,有效的將它們?nèi)诤显谝黄?,是一個非常有效的策略

可以閱讀autogluon論文、文檔和代碼了解更多細節(jié)
論文:https://arxiv.org/abs/2003.06505
文檔:https://auto.gluon.ai/?
代碼:https://github.com/awslabs/autogluon
