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