自動機器學習工具全景圖:精選22種框架,解放煉丹師
作者 Alexander Allen、Adithya Balaji
王小新 編譯自 Georgian Impact Blog
量子位 出品 | 公眾號 QbitAI
構建一個典型的機器學習項目,一般分成以下步驟:
收集原始數據、合併數據源、清洗數據、特徵工程、模型構建、超參數調優、模型驗證和設備部署。
整個過程中,模型構建最能體現創造力,而最耗時的,要數特徵工程和超參數調優。
於是,有時候會因為趕時間,過早將模型從實驗階段轉移到生產階段,導致它們發揮不出最佳效果;也有時候,會因為花了太多時間調優導致部署延遲。
這時候,就體現出了自動機器學習(Automatic machine learning, AML)框架的價值。
自動機器學習框架能幫助數據科學家減輕負擔,降低特徵工程和超參數調優的工作量,讓他們能花更多時間來嘗試模型架構。快速驗證可能的方案不僅能讓數據科學家很快地評估目標數據集,也能提供基準性能用以改進。
本文儘可能全面地介紹現有的自動機器學習框架,也附上了對應的代碼地址。
綜述
我們對現有的自動機器學習開源框架展開了充分調研,它們一般作用於機器學習的單個或多個步驟。
自動機器學習框架能夠處理項目中一部分步驟,包括模型構建、特徵工程和超參數優化。因此,我們分析了一些成熟框架,它們宣稱能優化其中某些任務組合。
我們挑選出一些能夠容易應用到企業數據科學團隊的函數庫。在介紹每個框架時,我們都給出了它的建庫目標、使用的統計方法和將其與新項目或現有項目整合時要考慮的主要因素。
局部解決方案
現有的自動機器學習框架中,有些只解決了數據科學流程的單個步驟。雖然它們不提供端到端的解決方案,但是這些庫側重於使用先進方法來解決特定問題或是在帶有獨特約束的特定環境下操作,因此仍值得考慮。
特徵工程
1. Featuretools
https://github.com/Featuretools/featuretools
1347星,139 Forks,119 Commits
最新版本為0.1.21,2018.5.30更新
Featuretools是一個自動特徵工程的工具,它可以根據一組相關的表來自動構造特徵。這個開源庫是一個面向企業客戶的商用前端服務的子集。
Featuretools使用了一種叫做深度特徵合成(Deep Feature Synthesis, DFS)的演算法,這個演算法能遍歷通過關係資料庫中模式描述的關係路徑。當DFS遍歷這些路徑時,它通過數據操作(包括求和、取平均值和計數)生成合成特徵。
例如,它可以把求和操作應用到給定客戶端ID的事務列表,將它們聚合成一列。雖然這只是一個簡單的單次操作,但這個演算法可以遍歷到更深層的特徵。
這個庫的優勢,在於其可靠性和在處理時間序列數據時處理信息泄露的能力。
2. Boruta-py
https://github.com/scikit-learn-contrib/boruta_py
318星,82 Forks,62 Commits
最新版本為0.1.5,2017.3.5更新
Boruta-py是Brouta特徵降維策略的一種實現,以「全相關」方式來解決問題。
這種演算法能保留對模型有顯著貢獻的所有特徵,這與很多特徵降維方法使用的「最小最優特徵集」思路相反。
Boruta方法先對目標特徵進行隨機重新排序並組成合成特徵,然後在原始特徵集上訓練簡單的決策樹分類器,再在特徵集中把目標特徵替換成合成特徵,用這三個步驟來確定特徵重要性。
其中,不同特徵對應的性能差異可用於計算它們的相對重要性。
3. Categorical-encoding
https://github.com/scikit-learn-contrib/categorical-encoding
494星,115Forks,171 Commits
最新版本1.2.6,2018.1.22更新
這個庫擴展了許多分類編碼方法,可作為Scikit-learn中數據轉換器的介面。
它還實現了常見的分類編碼方法,如one-hot編碼和hash編碼,以及很多niche編碼方法(包括base n編碼和target編碼)。
該函數庫常用來處理實際問題中的分類變數,如可能帶高變數基數的問題。它還能直接與pandas數據幀共用、計算缺失值和處理可能在訓練集之外的變換值。
4. Tsfresh
https://github.com/blue-yonder/tsfresh
2781星, 340 Forks ,243 Commits
最新版本0.11.0,2017.10.14更新
這個庫專註於時間序列數據的特徵生成,它由一個德國零售分析公司支持,是他們數據分析流程中的一步。
它能提取出一系列用於描述時間序列趨勢的形態特徵,這些特徵中包括一些簡單特徵(如方差)和複雜特徵(近似熵)。
這個庫能從數據中提取趨勢特徵,讓機器學習演算法更容易地解釋時間序列數據集。它使用假設檢驗來獲取大量生成特徵集,並將其減少到少量最具解釋性的趨勢特徵。
Tsfresh還與pandas和sklearn兼容,可嵌入到現有的數據科學流程中。Tsfresh庫的優勢在於其可擴展的數據處理實現,這部分已經在具有大量時間序列數據的生產系統中進行了測試。
5. Trane
https://github.com/HDI-Project/Trane
4星, 1 Fork, 245 Commits
最新版本0.1.0,2018.2.2更新
這個庫是麻省理工學院HDI項目的產品。
Trane庫可用來處理存儲在關係資料庫中的時間序列數據,和表示時間序列問題。它能列舉出關於數據集的元信息,數據科學家能從資料庫中的時間序列數據中提取這些特徵來構建有監督問題。
這個過程存儲在JSON文件中,數據科學家能改寫這個文件來描述列和數據類型。該框架通過處理這個文件來生成可能的預測問題,這些問題能用於修改數據集。
這個項目對feature-tools庫很有幫助,可用來以半自動方式生成額外特徵。
6. FeatureHub
https://github.com/HDI-Project/FeatureHub
32星,5 Forks ,249 Commits
最新版本0.3.0,2018.5.9更新
這個項目也是麻省理工學院HDI實驗室的,它建立在JupyterHub(支持多用戶的 Jupyter Notebook伺服器)上,讓數據科學家在特徵工程開發過程中能協作。
這個系統能自動對生成特徵評分,以確定當前模型的總體價值。這種以眾包方式進行特徵工程和機器學習的方法,在測試時也取得了很好效果。
超參數優化
1. Skopt
https://scikit-optimize.github.io/
880星,340 Forks ,173 Commits
最新版本0.5.2,2018.3.25更新
Skopt是一個超參數優化庫,包括隨機搜索、貝葉斯搜索、決策森林和梯度提升樹。
這個庫包含一些理論成熟且可靠的優化方法,但是這些模型在小型搜索空間和良好的初始估計下效果最好。
2. Hyperopt
https://github.com/hyperopt/hyperopt-sklearn
2161星,473 Forks,939 Commits
最新版本0.1,2016.11.20更新
Hyperopt是一個超參數優化庫,針對具有一定條件或約束的搜索空間進行調優,其中包括隨機搜索和Tree Parzen Estimators(貝葉斯優化的變體)等演算法。
它使用MongoDb作為存儲超參數組合結果的中心結構,可實現多台電腦的並行計算。
這個庫是用hyperopt-sklearn和hyperas實現的,這兩個用於模型選擇和優化的函數庫分別建立在scikit-learn和keras的基礎上。
3. Simple(x)
https://github.com/chrisstroemel/Simple,362星, 22 Forks,4 Commits
需手動安裝
Simple(x)是一個優化庫,可作為貝葉斯優化的替代方法。
Simple(x)和貝葉斯搜索一樣,試圖以儘可能少的樣本進行優化,但也將計算複雜度從n3降低到log(n),這對大型搜索空間非常有用。
這個庫使用單形(n維三角形),而不是超立方體(n維立方體),來模擬搜索空間,這樣做可以避開貝葉斯優化中具有高計算成本的高斯過程。
4. Ray.tune
https://github.com/ray-project/ray/tree/master/python/ray/tune
3435星,462 Forks,1,707 Commits
最新版本0.4.0,2018.3.27更新
Ray.tune是一個超參數優化庫,主要適用於深度學習和強化學習模型。它結合了許多先進演算法,如Hyperband演算法(最低限度地訓練模型來確定超參數的影響)、基於群體的訓練演算法(Population Based Training,在共享超參數下同時訓練和優化一系列網路)、Hyperopt方法和中值停止規則(如果模型性能低於中等性能則停止訓練)。
這些都運行在Ray分散式計算平台上,這讓它具有很強的擴展性。
5. Chocolate
https://github.com/AIworx-Labs/chocolate
26星,26 Forks,196 Commits
需手動安裝
Chocolate是一個分散式超參數優化庫(支持計算機集群的並行運算且無需中央主機),它使用通用資料庫來聯合執行各個任務。
它還支持網格搜索、隨機搜索、准隨機搜索、貝葉斯搜索和自適應協方差矩陣進化策略。它的優勢體現在它支持受約束的搜索空間和多損失函數優化(多目標優化)。
6. GpFlowOpt
https://github.com/GPflow/GPflowOpt
102星,27 Forks ,407 Commits
最新版本0.1.0,2017.9.11更新
GpFlowOpt是一個基於GpFlow庫的高斯過程優化器,可使用TensorFlow在GPU上運行高斯過程任務。
你如果要用到貝葉斯優化且有可用的GPU計算資源,那GpFlowOpt庫應該是理想之選。
7. FAR-HO
https://github.com/lucfra/FAR-HO
有22星, 5 Forks,110 Commits
需手動安裝
FAR-HO庫運行在TensorFlow上,包含一系列基於梯度的優化器,包括Reverse-HG和Forward-HG。
這個庫旨在構建TensorFlow中基於梯度的超參數優化器的訪問,允許在GPU或其他張量優化計算環境中進行深度學習模型的訓練和超參數優化。
8. Xcessiv
https://github.com/reiinakano/xcessiv
1055星,76 Forks,316 Commits
最新版本0.5.1,2017.8.10更新
Xcessiv庫支持大規模模型開發、執行和集成。它的優勢在於能夠在單個GUI界面中管理多個機器學習模型的訓練、執行和評估。
它具有多個集成工具來組合這些模型,以實現最佳性能。它包括一個貝葉斯搜索參數優化器,這個優化器支持高級別並行計算,還支持與TPOT庫的集成。
9. HORD
https://github.com/ilija139/HORD
52星,8 Forks,33 Commits
需手動安裝
HORD是一個用於超參數優化的獨立演算法,它能為需要優化的黑盒模型生成一個代理函數,並用它來生成最接近理想狀態的超參數組合,以減少對整個模型的評估。
與Tree Parzen Estimators、SMAC和高斯過程方法相比,它始終具有更高的一致性和更低的錯誤率,而且這個方法特別適用於極高維數據分析。
10. ENAS-pytorch
https://github.com/carpedm20/ENAS-pytorch
848星, 135 Forks,33 Commits
需手動安裝
ENAS-pytorch可在pytorch中實現高效的深度學習結構搜索。它使用參數共享來構建更高效的網路,使其適用於深度學習結構搜索。
全流程解決方案
1. ATM
https://github.com/HDI-Project/ATM
251星,56 Forks, 557 Commits
需手動安裝
Auto-Tune Models是麻省理工學院HDI項目開發出的框架,可用於機器學習模型的快速訓練,僅需很小的工作量。
它使用貝葉斯優化和Bandits庫,利用窮舉搜索和超參數優化來實現模型選擇。要注意,ATM僅支持分類問題,也支持AWS上的分散式計算。
2. MLBox
https://github.com/AxeldeRomblay/MLBox
504星,115 Forks,854 Commits
最新版本0.5.0,2017.8.25更新
MLBox是一個新出的框架,其目標是為自動機器學習提供一個最新和最先進的方法。
除了許多現有框架實現的特徵工程外,它還提供數據採集、數據清理和訓練-測試漂移檢測等功能。
此外,它使用Tree Parzen Estimators來優化所選模型的超參數。
3. auto_ml
https://github.com/ClimbsRocks/auto_ml
793星,146 Forks,1149 Commits
最新版本2.7.0,2017.9.11更新
Auto_ml是一種實用工具,旨在提高從數據中獲取的信息量,且無需除數據清洗外的過多工作。
該框架使用進化網格搜索演算法來完成特徵處理和模型優化的繁重工作。它利用其它成熟函數庫(如XGBoost、TensorFlow、Keras、LightGBM和sklearn)來提高計算速度,還宣稱只需最多1毫秒來實現預測,這也是這個庫的亮點。
該框架可快速洞察數據集(如特徵重要性)來創建初始預測模型。
4. auto-sklearn
https://github.com/automl/auto-sklearn
2271星, 438 Forks,1839 Commits
最新版本0.3.0,2018.1.5更新
Auto-sklearn使用貝葉斯搜索來優化機器學習流程中使用的數據預處理器、特徵預處理器和分類器,並把多個步驟經過訓練後整合成一個完整模型。
這個框架由弗萊堡大學的ML4AAD實驗室編寫,且其中的優化過程使用同一實驗室編寫的SMAC3框架完成。
顧名思義,這個模型實現了sklearn中機器學習演算法的自動構建。Auto-sklearn的主要特點是一致性和穩定性。
5. H2O
https://github.com/h2oai/h2o-3
3132星, 1217 Forks,22936 Commits
最新版本3.20.0.1,2018.6.7更新
H2O是一個用Java編寫的機器學習平台,它和sklearn等機器學習庫的使用體驗相似。但是,它還包含一個自動機器學習模塊,這個模塊利用其內置演算法來創建機器學習模型。
該框架對內置於H2O系統的預處理器實施窮舉搜索,並使用笛卡爾網格搜索或隨機網格搜索來優化超參數。
H2O的優勢在於它能夠形成大型計算機集群,這使得它在規模上有所增長。它還可在python、javascript、tableau、R和Flow(web UI)等環境中使用。
6. TPOT
https://github.com/EpistasisLab/tpot
4130星,705 Forks,1766 Commits
最新版本0.9,2017.9.27更新
TPOT為基於樹的流程優化工具,是一種用於查找和生成最佳數據科學流程代碼的遺傳編程框架。TPOT和其他自動機器學習框架一樣,從sklearn庫中獲取演算法。
TPOT的優勢在於其獨特的優化方法,可以提供更有效的優化流程。
它還包括一個能把訓練好的流程直接轉換為代碼的工具,這對希望能進一步調整生成模型的數據科學家來說是一個主要亮點。
原文:https://medium.com/georgian-impact-blog/automatic-machine-learning-aml-landscape-survey-f75c3ae3bbf2
—完—
活動推薦
加入社群
量子位AI社群19群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字「交流群」,獲取入群方式;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進專業群請在量子位公眾號(QbitAI)對話界面回復關鍵字「專業群」,獲取入群方式。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。


※一文速覽2018世界機器人大會最全參會指南
※手把手教你訓練一個秒殺科比的投籃AI,不服來練
TAG:量子位 |