讓機器學習自動幫我們建模,這4個Python庫能讓你大開眼界
自動機器學習(通常簡稱為AutoML)是一個新興的領域,在這個領域中,通過建立機器學習模型來對數據進行建模的過程是自動化的。AutoML能讓建模變得更容易,也能讓每個人更容易訪問。
如果你對AutoML感興趣,下面這四個Python庫是最好的選擇!
1.auto-sklearn
auto-sklearn 是一個自動化的機器學習工具庫,可與大家都非常熟悉的標準 sklearn 接口無縫集成。通過使用最近的方法,比如貝葉斯優化,該庫可被用來導航可能模型的空間,并學會推斷特定配置是否能很好地完成給定的任務。
該庫由 Matthias Feurer 等人創建,其技術細節在論文《高效和魯棒的機器學習》中進行了描述,費勒寫道:
…我們引入了一個基于scikit-learn的強大的新AutoML系統(使用15個分類器,14個特征預處理方法和4個數據預處理方法,產生了一個包含110個超參數的結構化假設空間)。
auto-sklearn 可能是入門 AutoML 的最佳庫了。除了發現數據集的數據準備和模型選擇之外,它還可以從相似數據集上表現良好的模型中進行學習,并且可以將效果最佳的模型匯總在一起。

除了高效的實現之外,auto-sklearn 只需要最少的用戶交互, 使用 pip install auto-sklearn 即可安裝該庫。
可以使用的主要類是 AutoSklearnClassifier 和 AutoSklearnRegressor,它們分別用于分類和回歸任務。 兩者都具有用戶指定的相同參數,其中最重要的是時間限制和集合大小。
- import autosklearn as ask
- #ask.regression.AutoSklearnRegressor()用于回歸任務
- model = ask.classification.AutoSklearnClassifier(ensemble_size=10, #最終集合的大小(最小值為1)
- time_left_for_this_task=120, #進程運行的秒數
- per_run_time_limit=30) #每個模型分配的最大秒數
- model.fit(X_train, y_train) #開始擬合搜索模型
- print(model.sprint_statistics()) #打印搜索統計信息
- y_predictions = model.predict(X_test) #從模型中獲得預測
AutoSklearn官方文檔:https://automl.github.io/auto-sklearn/master/
2.TPOT
TPOT 是另一個自動化建模的 Python 庫,但是該庫更加著重于數據準備以及建模算法和模型超參數。它通過一種基于進化樹的結構(稱為“基于樹的管道優化工具(TPOT),可自動設計和優化機器學習管道)來實現特征選擇、預處理和構造的自動化。”

程序或管道用樹表示。遺傳程序選擇并進化某些程序,以使每個自動機器學習管道的最終結果最大化。
正如 Pedro Domingos 所說,“垃圾算法遇上海量數據也比數據有限的聰明算法強大。”事實也是如此:TPOT 可以生成復雜的數據預處理管道。

TPOT管道優化器可能需要幾個小時才能產生很好的結果,就像很多AutoML算法一樣(除非數據集很小)。你也可以在 Kaggle committes 或 googlecolab 中運行這些長程序。
- import tpot
- pipeline_optimizer = tpot.TPOTClassifier(generations=5, #進行訓練的迭代次數
- population_size=20, #訓練的數據量
- cv=5) #StratifiedKFold中的倍數
- pipeline_optimizer.fit(X_train, y_train) #適配管道優化器-可能需要很長時間print(pipeline_optimizer.score(X_test, y_test)) #打印管道評分
- pipeline_optimizer.export('tpot_exported_pipeline.py') #導出管道-用Python代碼!
TPOT 的最好功能是將模型導出為Python代碼文件,這樣可以方便以后使用。
TPOT 官方文檔:https://epistasislab.github.io/tpot/
TPOT 示例:https://epistasislab.github.io/tpot/examples/
3.HyperOpt
HyperOpt 是由 James Bergstra 開發用于貝葉斯優化的 Python 庫。該庫專為大規模優化具有數百個參數的模型而設計,可顯式地用于優化機器學習管道,并具有用于選擇跨多個核心和機器的優化過程的選項。
但是,HyperOpt 很難直接使用,因為它非常技術性,并且需要仔細指定優化步驟和參數。相反,建議大家用 HyperOpt-sklearn,一個包含 sklearn 庫的 HyperOpt 包裝器。
具體來說,HyperOpt 雖然確實支持預處理,但重點仍然放在特定模型中的許多超參數上。如果我們仔細觀察 HyperOpt-sklearn的一次搜索結果,就會發現該結果導致沒有預處理的梯度提升分類器:
- {'learner': GradientBoostingClassifier(ccp_alpha=0.0, criterion='friedman_mse', init=None,
- learning_rate=0.009132299586303643, loss='deviance',
- max_depth=None, max_features='sqrt',
- max_leaf_nodes=None, min_impurity_decrease=0.0,
- min_impurity_split=None, min_samples_leaf=1,
- min_samples_split=2, min_weight_fraction_leaf=0.0,
- n_estimators=342, n_iter_no_change=None,
- presort='auto', random_state=2,
- subsample=0.6844206624548879, tol=0.0001,
- validation_fraction=0.1, verbose=0,
- warm_start=False), 'preprocs': (), 'ex_preprocs': ()}
用于構建 HyperOpt-sklearn 模型的文檔:http://hyperopt.github.io/hyperopt-sklearn/。
雖然 HyperOpt 庫比 auto-sklearn、TPOT復雜得多,但是如果對于你的模型而已,超參數非常重要,那就值得你去把它用起來。
4.AutoKeras
與標準的機器學習庫相比,神經網絡和深度學習功能更強大,因此更難實現自動化。
使用 AutoKeras,神經結構搜索算法可以找到最佳的結構,如一個層中的神經元數量、層的數量、要合并的層、特定于層的參數,如過濾器大小或丟失神經元的百分比等。一旦搜索完成,可以將該模型用作普通的 TensorFlow/Keras 模型。
通過使用AutoKeras,我們可以構建一個包含復雜元素(如嵌入和空間縮減)的模型,這些元素對于仍在學習深度學習過程中的人來說是不太容易訪問的。
當 AutoKeras 為我們創建模型時,許多預處理,如矢量化或清除文本數據,都會為您完成并優化。
啟動和訓練搜索需要兩條線。AutoKeras 擁有一個類似 Keras 的界面,所以它不難記住和使用。
AutoKeras 支持文本、圖像和結構化數據,以及為初學者和尋求更多技術細節的人提供的界面,AutoKeras 使用進化神經結構搜索方法為我們消除繁重的工作和模糊性。
雖然 AutoKeras 運行需要很長時間,但是有許多用戶指定的參數可用于控制運行時間、探索的模型數量、搜索空間大小等。
考慮使用 AutoKeras 生成的文本分類任務的這種經過考慮的體系結構。
- Hyperparameter |Value |Best Value So Far
- text_block_1/block_type|transformer|transformer
- classification_head_1/dropout|0 |0
- optimizer |adam |adam
- learning_rate |0.001 |0.001
- text_block_1/max_tokens|20000 |20000
- text_block_1/text_to_int_sequence_1/output_sequence_length|200 |200
- text_block_1/transformer_1/pretraining|none |none
- text_block_1/transformer_1/embedding_dim|32 |32
- text_block_1/transformer_1/num_heads|2 |2
- text_block_1/transformer_1/dense_dim|32 |32
- text_block_1/transformer_1/dropout|0.25 |0.25
- text_block_1/spatial_reduction_1/reduction_type|global_avg|global_avg
- text_block_1/dense_block_1/num_layers|1 |1
- text_block_1/dense_block_1/use_batchnorm|False |False
- text_block_1/dense_block_1/dropout|0.5 |0.5
- text_block_1/dense_block_1/units_0|20 |20
AutoKeras 教程:https://towardsdatascience.com/automl-creating-top-performing-neural-networks-without-defining-architectures-c7d3b08cddc
AutoKeras官方文檔:https://autokeras.com/
對比:你應該用哪一個AutoML庫?
如果你的首要任務是需要一個干凈,簡單的界面和相對快速的結果,請選擇使用auto-sklearn。此外:該庫與sklearn的自然集成,可與常用的模型和方法一起使用,這樣可以對時間有更多的控制作用。
如果你的首要任務是高準確度,不考慮可能需要的長時間訓練,則使用TPOT。強調高級預處理方法,通過將管道表示為樹結構而成為可能。額外提示:TPOT可以為最佳模型輸出Python代碼。
如果你的首要任務是高準確度,不考慮可能需要的長時間訓練,則可以使用 HyperOpt sklearn。強調模型的超參數優化,不知道是否產生效果,具體情況要取決于數據集和算法。
如果你的問題需要神經網絡才能解決,特別是當它以文本或圖像的形式出現時,使用AutoKeras。雖然確實需要很長的訓練時間,但有很多措施可以控制時間和搜索空間的大小。