博客專欄

EEPW首頁(yè) > 博客 > 如何高效、快速、準(zhǔn)確地完成ML任務(wù),這4個(gè)AutoML庫(kù)了解一下

如何高效、快速、準(zhǔn)確地完成ML任務(wù),這4個(gè)AutoML庫(kù)了解一下

發(fā)布人:機(jī)器之心 時(shí)間:2020-09-23 來(lái)源:工程師 發(fā)布文章

AutoML 是當(dāng)前深度學(xué)習(xí)領(lǐng)域的熱門(mén)話題。只需要很少的工作,AutoML 就能通過(guò)快速有效的方式,為你的 ML 任務(wù)構(gòu)建好網(wǎng)絡(luò)模型,并實(shí)現(xiàn)高準(zhǔn)確率。簡(jiǎn)單有效!數(shù)據(jù)預(yù)處理、特征工程、特征提取和特征選擇等任務(wù)皆可通過(guò) AutoML 自動(dòng)構(gòu)建。

自動(dòng)機(jī)器學(xué)習(xí)(Automated Machine Learning, AutoML)是一個(gè)新興的領(lǐng)域,在這個(gè)領(lǐng)域中,建立機(jī)器學(xué)習(xí)模型來(lái)建模數(shù)據(jù)的過(guò)程是自動(dòng)化的。AutoML 使得建模更容易,并且每個(gè)人都更容易掌握。

在本文中,作者詳細(xì)介紹了四種自動(dòng)化的 ML 工具包,分別是 auto-sklearn、TPOT、HyperOpt 以及 AutoKeras。如果你對(duì) AutoML 感興趣,這四個(gè) Python 庫(kù)是最好的選擇。作者還在文章結(jié)尾文章對(duì)這四個(gè)工具包進(jìn)行了比較。

auto-sklearn

auto-sklearn 是一個(gè)自動(dòng)機(jī)器學(xué)習(xí)工具包,它與標(biāo)準(zhǔn) sklearn 接口無(wú)縫集成,因此社區(qū)中很多人都很熟悉該工具。通過(guò)使用最近的一些方法,比如貝葉斯優(yōu)化,該庫(kù)被用來(lái)導(dǎo)航模型的可能空間,并學(xué)習(xí)推理特定配置是否能很好地完成給定任務(wù)。

該庫(kù)由 Matthias Feurer 等人提出,技術(shù)細(xì)節(jié)請(qǐng)查閱論文《Efficient and Robust Machine Learning》。Feurer 在這篇論文中寫(xiě)道:

我們提出了一個(gè)新的、基于 scikit-learn 的魯棒 AutoML 系統(tǒng),其中使用 15 個(gè)分類(lèi)器、14 種特征預(yù)處理方法和 4 種數(shù)據(jù)預(yù)處理方法,生成了一個(gè)具有 110 個(gè)超參數(shù)的結(jié)構(gòu)化假設(shè)空間。

auto-sklearn 可能最適合剛接觸 AutoML 的用戶。除了發(fā)現(xiàn)數(shù)據(jù)集的數(shù)據(jù)準(zhǔn)備和模型選擇之外,該庫(kù)還可以從在類(lèi)似數(shù)據(jù)集上表現(xiàn)良好的模型中學(xué)習(xí)。表現(xiàn)最好的模型聚集在一個(gè)集合中。

1600824214797584.png

圖源:《Efficient and Robust Automated Machine Learning》 

在高效實(shí)現(xiàn)方面,auto-sklearn 需要的用戶交互最少。使用 pip install auto-sklearn 即可安裝庫(kù)。

該庫(kù)可以使用的兩個(gè)主要類(lèi)是 AutoSklearnClassifier 和 AutoSklearnRegressor,它們分別用來(lái)做分類(lèi)和回歸任務(wù)。兩者具有相同的用戶指定參數(shù),其中最重要的是時(shí)間約束和集合大小。

import autosklearn as ask

#ask.regression.AutoSklearnRegressor() for regression tasks

model = ask.classification.AutoSklearnClassifier(ensemble_size=10, #size of the end ensemble (minimum is 1)

                                                 time_left_for_this_task=120, #the number of seconds the process runs for

                                                 per_run_time_limit=30) #maximum seconds allocated per model

model.fit(X_train, y_train) #begin fitting the search model

print(model.sprint_statistics()) #print statistics for the search

y_predictions = model.predict(X_test) #get predictions from the model

更多 AutoSklearn 相關(guān)文檔請(qǐng)查閱:https://automl.github.io/auto-sklearn/master/。

TPOT

TPOT 是另一種基于 Python 的自動(dòng)機(jī)器學(xué)習(xí)開(kāi)發(fā)工具,該工具更關(guān)注數(shù)據(jù)準(zhǔn)備、建模算法和模型超參數(shù)。它通過(guò)一種基于進(jìn)化樹(shù)的結(jié),即自動(dòng)設(shè)計(jì)和優(yōu)化機(jī)器學(xué)習(xí) pipelie 的樹(shù)表示工作流優(yōu)化(Tree-based Pipeline Optimization Tool, TPOT),從而實(shí)現(xiàn)特征選擇、預(yù)處理和構(gòu)建的自動(dòng)化。

1600824270483249.png

圖源:《Evaluation of a Tree-based Pipeline Optimization Tool for Automating Data Science》

程序或 pipeline 用樹(shù)表示。遺傳編程(Genetic Program, GP)選擇并演化某些程序,以最大化每個(gè)自動(dòng)化機(jī)器學(xué)習(xí)管道的最終結(jié)果。

正如 Pedro Domingos 所說(shuō),「數(shù)據(jù)量大的愚蠢算法勝過(guò)數(shù)據(jù)有限的聰明算法」。事實(shí)就是這樣:TPOT 可以生成復(fù)雜的數(shù)據(jù)預(yù)處理 pipeline。

1600824305934654.png

潛在的 pipelie(圖源:TPOT 文檔)

TPOT pipeline 優(yōu)化器可能需要幾個(gè)小時(shí)才能產(chǎn)生很好的結(jié)果,就像很多 AutoML 算法一樣(除非數(shù)據(jù)集很?。S脩艨梢栽?Kaggle commits 或 Google Colab 中運(yùn)行這些耗時(shí)的程序。

import tpot

pipeline_optimizer = tpot.TPOTClassifier(generations=5, #number of iterations to run the training

                                         population_size=20, #number of individuals to train

                                         cv=5) #number of folds in StratifiedKFold

pipeline_optimizer.fit(X_train, y_train) #fit the pipeline optimizer - can take a long time

print(pipeline_optimizer.score(X_test, y_test)) #print scoring for the pipeline

pipeline_optimizer.export('tpot_exported_pipeline.py') #export the pipeline - in Python code!

也許 TPOT 最好的特性是它將模型導(dǎo)出為 Python 代碼文件,后續(xù)可以使用它。具體文檔和教程示例參見(jiàn)以下兩個(gè)鏈接:

TPOT 文檔地址:https://epistasislab.github.io/tpot/。

TPOT 的教程示例地址:https://epistasislab.github.io/tpot/examples/

HyperOpt

HyperOpt 是一個(gè)用于貝葉斯優(yōu)化的 Python 庫(kù),由 James Bergstra 開(kāi)發(fā)。該庫(kù)專為大規(guī)模優(yōu)化具有數(shù)百個(gè)參數(shù)的模型而設(shè)計(jì),顯式地用于優(yōu)化機(jī)器學(xué)習(xí) pipeline,并可選擇在多個(gè)核心和機(jī)器上擴(kuò)展優(yōu)化過(guò)程。

但是,HyperOpt 很難直接使用,因?yàn)樗浅>哂屑夹g(shù)性,需要仔細(xì)指定優(yōu)化程序和參數(shù)。相反,作者建議使用 HyperOpt-sklearn,這是一個(gè)融合了 sklearn 庫(kù)的 HyperOpt 包裝器。

具體來(lái)說(shuō),HyperOpt 雖然支持預(yù)處理,但非常關(guān)注進(jìn)入特定模型的幾十個(gè)超參數(shù)。就一次 HyperOpt sklearn 搜索的結(jié)果來(lái)說(shuō),它生成了一個(gè)沒(méi)有預(yù)處理的梯度提升分類(lèi)器:

{'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': ()}

如何構(gòu)建 HyperOpt-sklearn 模型可以查看源文檔。它比 auto-sklearn 復(fù)雜得多,也比 TPOT 復(fù)雜一點(diǎn)。但是如果超參數(shù)很重要的話,它可能是值得的。

文檔地址:http://hyperopt.github.io/hyperopt-sklearn/

AutoKeras

與標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)庫(kù)相比,神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)功能更強(qiáng)大,因此更難實(shí)現(xiàn)自動(dòng)化。AutoKeras 庫(kù)有哪些功效呢?具體如下:

·  通過(guò) AutoKeras,神經(jīng)框架搜索算法可以找到最佳架構(gòu),如單個(gè)網(wǎng)絡(luò)層中的神經(jīng)元數(shù)量、層數(shù)量、要合并的層、以及濾波器大小或 Dropout 中丟失神經(jīng)元百分比等特定于層的參數(shù)。一旦搜索完成,用戶可以將其作為普通的 TF/Keras 模型使用;

·  通過(guò) AutoKeras,用戶可以構(gòu)建一個(gè)包含嵌入和空間縮減等復(fù)雜元素的模型,這些元素對(duì)于學(xué)習(xí)深度學(xué)習(xí)過(guò)程中的人來(lái)說(shuō)是不太容易訪問(wèn)的;

·  當(dāng)使用 AutoKeras 創(chuàng)建模型時(shí),向量化或清除文本數(shù)據(jù)等許多預(yù)處理操作都能完成并進(jìn)行優(yōu)化;

·  初始化和訓(xùn)練一次搜索需要兩行代碼。AutoKeras 擁有一個(gè)類(lèi)似于 keras 的界面,所以它并不難記憶和使用。

AutoKeras 支持文本、圖像和結(jié)構(gòu)化數(shù)據(jù),為初學(xué)者和尋求更多參與技術(shù)知識(shí)的人提供界面。AutoKeras 使用進(jìn)化神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索方法來(lái)減輕研究人員的繁重和模棱兩可的工作。

盡管 AutoKeras 的運(yùn)行需要很長(zhǎng)時(shí)間,但用戶可以指定參數(shù)來(lái)控制運(yùn)行時(shí)間、探索模型的數(shù)量以及搜索空間大小等。

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 的相關(guān)內(nèi)容參閱以下兩個(gè)鏈接:

文檔地址:https://autokeras.com/

教程地址:https://towardsdatascience.com/automl-creating-top-performing-neural-networks-without-defining-architecture-c7d3b08cddc

四個(gè)庫(kù)各有特色,應(yīng)該選哪個(gè)?

用戶可以根據(jù)自己的需求選擇合適的 Python 庫(kù),作者給出了以下幾個(gè)建議:

·  如果你的首要任務(wù)是獲取一個(gè)干凈、簡(jiǎn)單的界面和相對(duì)快速的結(jié)果,選擇 auto-sklearn。另外:該庫(kù)與 sklearn 自然集成,可以使用常用的模型和方法,能很好地控制時(shí)間;

·  如果你的首要任務(wù)是實(shí)現(xiàn)高準(zhǔn)確率,并且不需要考慮長(zhǎng)時(shí)間的訓(xùn)練,則使用 TPOT。額外收獲:為最佳模型輸出 Python 代碼;

·  如果你的首要任務(wù)是實(shí)現(xiàn)高準(zhǔn)確率,依然不需要考慮長(zhǎng)時(shí)間的訓(xùn)練,也可選擇使用 HyperOpt-sklearn。該庫(kù)強(qiáng)調(diào)模型的超參數(shù)優(yōu)化,是否富有成效取決于數(shù)據(jù)集和算法;

·  如果你需要神經(jīng)網(wǎng)絡(luò)(警告:不要高估它們的能力),就使用 AutoKeras,尤其是以文本或圖像形式出現(xiàn)時(shí)。訓(xùn)練確實(shí)需要很長(zhǎng)時(shí)間,但有很多措施可以控制時(shí)間和搜索空間大小。

參考鏈接:https://towardsdatascience.com/4-python-automl-libraries-every-data-scientist-should-know-680ff5d6ad08

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉