教你用Python實(shí)現(xiàn)AutoML
譯文【51CTO.com快譯】我們已經(jīng)知道,機(jī)器學(xué)習(xí)是一種自動(dòng)解決復(fù)雜問(wèn)題的方法。但機(jī)器學(xué)習(xí)本身可以自動(dòng)化嗎?這是我們?cè)诒疚闹袑⑻接懙膬?nèi)容。讀完這篇文章時(shí),你將會(huì)知道這個(gè)問(wèn)題的答案,并且會(huì)掌握實(shí)現(xiàn) AutoML 的方法。
1. Automated Machine Learning(AutoML)
在應(yīng)用機(jī)器學(xué)習(xí)模型時(shí),我們通常會(huì)進(jìn)行數(shù)據(jù)預(yù)處理,特征工程,特征提取和特征選擇。在此之后,我們將選擇***算法并調(diào)整我們的參數(shù)以獲得***結(jié)果。AutoML 是一系列用于自動(dòng)化這些過(guò)程的概念和技術(shù)。
1.1. AutoML 的優(yōu)勢(shì)
將機(jī)器學(xué)習(xí)模型應(yīng)用于實(shí)際問(wèn)題通常需要很多計(jì)算機(jī)科學(xué)相關(guān)技能、領(lǐng)域?qū)I(yè)知識(shí)和數(shù)學(xué)專業(yè)知識(shí)。想找到擁有所有這些技能的專家并不總是一件容易的事情。
AutoML 還可以減少人類設(shè)計(jì)機(jī)器學(xué)習(xí)模型時(shí)出現(xiàn)的偏差和錯(cuò)誤。企業(yè)可以通過(guò)在其數(shù)據(jù)管道中應(yīng)用 AutoML 來(lái)降低雇傭許多專家的成本。AutoML 還可以減少開發(fā)和測(cè)試機(jī)器學(xué)習(xí)模型所需的時(shí)間。
1.2. AutoML 的缺點(diǎn)
AutoML 在機(jī)器學(xué)習(xí)領(lǐng)域是一個(gè)相當(dāng)新的概念。因此,在應(yīng)用一些當(dāng)前的 AutoML 解決方案時(shí)要謹(jǐn)慎行事,這 是因?yàn)槠渲幸恍┘夹g(shù)仍處于開發(fā)階段。
另一個(gè)主要的挑戰(zhàn)是運(yùn)行 AutoML 模型所需的時(shí)間成本很高。這實(shí)際上取決于我們機(jī)器的計(jì)算能力。我們很 快就會(huì)看到,一些 AutoML 解決方案在我們的本地機(jī)器上也可以很好地運(yùn)行,但有些解決方案還需要更多的加速優(yōu)化,例如 Google Colab。
2. AutoML 的概念
就 AutoML 而言,需要了解兩個(gè)主要概念:神經(jīng)架構(gòu)搜索(Neural Architecture Search)和遷移學(xué)習(xí)(Transfer Learning)。
2.1. 神經(jīng)架構(gòu)搜索(Neural Architecture Search)
神經(jīng)架構(gòu)搜索是自動(dòng)化設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的過(guò)程。通常,在這些網(wǎng)絡(luò)的設(shè)計(jì)中會(huì)使用強(qiáng)化學(xué)習(xí)或進(jìn)化算法。在強(qiáng)化 學(xué)習(xí)中,模型因低準(zhǔn)確率而受到懲罰,并因高準(zhǔn)確率而獲得獎(jiǎng)勵(lì)。使用這種技術(shù),模型將始終努力獲得更高的 準(zhǔn)確率。
目前已經(jīng)有一些研究神經(jīng)架構(gòu)搜索的論文,例如用于可伸縮圖像識(shí)別的學(xué)習(xí)可遷移架構(gòu)(LearningTransferable Architectures),高效神經(jīng)架構(gòu)搜索(Efficient Neural Architecture Search,ENAS)和用于圖像分類器架構(gòu)搜 索的正則進(jìn)化(Regularized Evolution)模型。
2.2. 遷移學(xué)習(xí)
顧名思義,遷移學(xué)習(xí)是一種技術(shù),使得預(yù)先訓(xùn)練的模型可以將它學(xué)習(xí)過(guò)的知識(shí)遷移應(yīng)用在新的但相似的數(shù)據(jù) 集上。這使我們能夠用更少的計(jì)算時(shí)間和計(jì)算資源去獲得比較高的準(zhǔn)確率。神經(jīng)架構(gòu)搜索適用于需要設(shè)計(jì)新 模型架構(gòu)的問(wèn)題,而遷移學(xué)習(xí)最適用于數(shù)據(jù)集類似于預(yù)訓(xùn)練模型中使用的數(shù)據(jù)集的問(wèn)題。
3. AutoML 解決方案
現(xiàn)在讓我們來(lái)看看一些可用的 AutoML 的解決方案吧。
3.1. Auto-Keras
根據(jù)官方提供的資料:
Auto-Keras 是一個(gè)用于自動(dòng)化機(jī)器學(xué)習(xí)(AutoML)的開源軟件庫(kù)。 它由 Texas A & M 大學(xué)的 DATA 實(shí)驗(yàn)室和社區(qū)貢獻(xiàn)者開發(fā)。 AutoML 的最終目標(biāo)是為具有有限數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí)背景的領(lǐng)域?qū)<姨峁┮子谏鲜值纳疃葘W(xué)習(xí)工具。 Auto-Keras 提供自動(dòng)搜索深度學(xué)習(xí)模型架構(gòu)和超參數(shù)的功能。
Auto-Keras 可以用 pip 命令安裝:
- pip install auto-keras
 
Auto-Keras 在最終版發(fā)布之前仍在進(jìn)行***的測(cè)試。官方網(wǎng)站警告說(shuō),對(duì)于因使用該網(wǎng)站上的庫(kù)而導(dǎo)致的任何損失,他們不承擔(dān)任何責(zé)任。
該軟件包基于 Keras 深度學(xué)習(xí)軟件包。
3.2. Auto-Sklearn
Auto-Sklearn 是一款基于 Scikit-learn 的 AutoML 軟件包。它是 Scikit-learn estimator 的替代品。它也可以通過(guò)一個(gè)簡(jiǎn)單的 pip 命令安裝:
- pip install auto-sklearn
 
在 Ubuntu 系統(tǒng)下,需要 C++ 11 構(gòu)建環(huán)境和 SWIG 配置環(huán)境才可以運(yùn)行 Auto-Sklearn。
sudo apt-get install build-essential swig
通過(guò) Anaconda 的安裝方式如下:
- conda install gxx_linux-64 gcc_linux-64 swig
 
目前還無(wú)法在 Windows 上運(yùn)行 Auto-Sklearn。但是,可以嘗試一些黑科技,例如使用 docker 鏡像或通過(guò)虛擬機(jī)運(yùn)行。
3.3. The Tree-Based Pipeline Optimization Tool(TPOT)
根據(jù)官方網(wǎng)站資料:
TPOT 的目標(biāo)是通過(guò)將管道的靈活表達(dá)樹 (Flexible Expression Tree) 表示與諸如遺傳編程 (Genetic Programming) 的隨機(jī)搜索算法相結(jié)合來(lái)自動(dòng)化機(jī)器學(xué)習(xí)管道的構(gòu)建。 TPOT 使用基于 Python 的 scikit-learn 庫(kù)作為其機(jī)器學(xué)習(xí)基礎(chǔ)庫(kù)。
該軟件是開源的,可在GitHub上獲得。
3.4. 谷歌的 AutoML
官網(wǎng)對(duì)它介紹如下:
Cloud AutoML 是一套機(jī)器學(xué)習(xí)產(chǎn)品,通過(guò)利用 Google ***進(jìn)的遷移學(xué)習(xí)和神經(jīng)架構(gòu)搜索技術(shù),使具有有 限機(jī)器學(xué)習(xí)專業(yè)知識(shí)的開發(fā)人員能夠根據(jù)業(yè)務(wù)需求訓(xùn)練高質(zhì)量模型。
谷歌的 AutoML 解決方案不是開源的。它的價(jià)格可以在這里查看。
3.5. H2O
H2O 是一個(gè)開源的分布式內(nèi)存機(jī)器學(xué)習(xí)平臺(tái)。它有 R 和 Python 兩種版本。該軟件包支持眾多的統(tǒng)計(jì)和機(jī)器 學(xué)習(xí)算法。
4. 將 AutoML 應(yīng)用于實(shí)際問(wèn)題
現(xiàn)在讓我們看看應(yīng)該如何使用 Auto-Keras 和 Auto-Sklearn 來(lái)解決一個(gè)真正的問(wèn)題吧。
4.1. Auto-Keras 實(shí)現(xiàn)
我強(qiáng)烈建議在 Google Colabunless 上運(yùn)行以下代碼示例,除非您有一臺(tái)具有非常高計(jì)算能力的計(jì)算機(jī)。我也 建議在 Google Colab 上開啟 GPU runtime。 這里的***步是在 Colab 上安裝 Auto-Keras。
- !pip install autokeras
 
我們將在 MNIST 數(shù)據(jù)集上運(yùn)行圖像分類任務(wù)。***步是導(dǎo)入該數(shù)據(jù)集和圖像分類器。數(shù)據(jù)集從 Keras 導(dǎo)入, 而圖像分類器從 Auto-Keras 導(dǎo)入。由于我們正在構(gòu)建一個(gè)基于預(yù)訓(xùn)練模型識(shí)別手寫數(shù)字的模型,因此我們將 其歸類為監(jiān)督學(xué)習(xí)問(wèn)題。然后,我們?cè)谖从龅降臄?shù)字圖像上測(cè)試模型的準(zhǔn)確率。
- from keras.datasets
 - import mnist
 - from autokeras.image.image_supervised
 - import ImageClassifer
 
在此示例中,圖像和標(biāo)簽已被格式化為 numpy 數(shù)組。下一步是將剛剛加載的數(shù)據(jù)分成訓(xùn)練集和測(cè)試集,如下所示:
- (x_train, x_test), (x_test, y_test) = mnist.load_data()
 - x_train = x_train.reshape(x_train.shape + (1,))
 - x_test = x_test.reshape(x_test.shape + (1,))
 
將數(shù)據(jù)分成訓(xùn)練集和測(cè)試集后,下一步就是擬合圖像分類器。
- clf = ImageClassifer(verbose=True)
 - clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
 - clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
 - y = clf.evaluate(x_test, y_test)
 - print(y)
 
1. 將 verbose 指定為 True 意味著搜索過(guò)程將打印在屏幕上供我們查看。 2. 在 fit 方法中,time_limit 參數(shù)是指以秒為單位的搜索時(shí)間限制。 3. final_fit 是模型找到***模型架構(gòu)后進(jìn)行的***一次訓(xùn)練。將 retrain 參數(shù)指定為 True 意味著將重新初 始化模型的權(quán)重。 4. 在評(píng)估模型在測(cè)試集上的效果后,print(y) 將顯示模型準(zhǔn)確率。
這就是我們使用 Auto-Keras 對(duì)圖像進(jìn)行分類所需的全部步驟。只需要幾行代碼,Auto-Keras 就可以為我們 完成所有繁重的工作。
4.2. Auto-Sklearn 實(shí)現(xiàn)
Auto-Sklearn 的實(shí)現(xiàn)與上面的 Auto-Keras 實(shí)現(xiàn)非常相似。我們?cè)谝粋€(gè)數(shù)字?jǐn)?shù)據(jù)集上做類似的分類任務(wù)。首先, 我們需要導(dǎo)入一些庫(kù):
- import autosklearn.classification
 - import sklearn.model_selection import sklearn.datasets import sklearn.metrics
 
像往常一樣,我們加載數(shù)據(jù)集并將其劃分為訓(xùn)練集和測(cè)試集。然后我們從 autosklearn.classification 導(dǎo) 入 AutoSklearnClassifier。完成此操作后,我們讓分類器擬合數(shù)據(jù)集,然后進(jìn)行預(yù)測(cè)并檢查模型準(zhǔn)確率。這 就是所有你需要做的事情。
- X, y = sklearn.datasets.load_digits(return_X_y=True)
 - X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=1)
 - automl = autosklearn.classification.AutoSklearnClassifier()
 - automl.fit(X_train, y_train)
 - y_hat = automl.predict(X_test)
 - print("Score of accuracy", sklearn.metrics.accuracy_score(y_test, y_hat))
 
5. What’s Next?
更多的自動(dòng)化機(jī)器學(xué)習(xí)包仍在活躍地開發(fā)中。我們希望 2019 年該領(lǐng)域會(huì)有更多的進(jìn)展。大家可以通過(guò)官方文 檔網(wǎng)站密切關(guān)注這些軟件包的進(jìn)展情況。當(dāng)然大家也可以在 GitHub 上通過(guò) pull request 來(lái)為這些包做出貢獻(xiàn)。
有關(guān) Auto-Keras 和 Auto-Sklearncan 的更多信息和示例,請(qǐng)?jiān)L問(wèn)其官方網(wǎng)站。
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

















 
 
 








 
 
 
 