Mercari 是一款在日本很受歡迎的購物應用程式,它一直使用 AutoML Vision(谷歌的 AutoML 解決方案)對影像進行分類。根據 Mercari 的說法,他們一直在“開發自己的 ML 模型,在照片上傳的使用者介面上推薦 12 個主要品牌的品牌名稱。”
雖然他們自己在 TensorFlow 上訓練的模型達到了 75% 的精度,但 AutoML Vision 的高階模式因為擁有 50,000 張訓練影像,所以精度更是高達 91.3%,提升了竟有 15%。基於如此驚人的結果,Mercari 已經將 AutoML 整合到他們的系統中。
AutoML 通過使不同背景的人能夠演進機器學習模型來解決複雜的場景,正在從根本上改變基於 ML 的解決方案給人們的印象,以上僅是說明它如何改變的其中一例。
自動機器學習:AutoML
近年來,機器學習在各個領域都取得了重大突破。金融服務、醫療保健、零售、交通等領域一直在以某種方式使用機器學習系統,而且取得了很好的效果。
今天的機器學習不僅限於研發應用,而且已經進入了企業領域。不過,傳統的 ML 流程仍依賴於人力,但並非所有企業都有資源來投資經驗豐富的資料科學團隊,AutoML 可能正是這種困境的一個答案。
自動機器學習(AutoML)是將機器學習應用於現實問題的端到端過程自動化的過程。AutoML 使機器學習真正意義上成為可能,即使對於在該領域沒有專業知識的人也是如此。
典型的機器學習模型包括以下四個過程:
從攝取資料到預處理、優化,然後預測結果,每個步驟都由人來控制和執行。AutoML 主要關注兩個主要方面:資料採集 / 收集和預測。中間發生的所有其他步驟都可以輕鬆實現自動化,同時提供經過優化並準備好進行預測的模型。
為什麼需要 AutoML
在過去幾年中,對機器學習系統的需求飆升。這是因為 ML 如今在廣泛的應用中取得了成功。然而,即使有這種明確的跡象表明機器學習可以為某些企業提供支援,但很多公司仍在為部署 ML 模型而艱難地努力著。
首先,他們需要建立一支由經驗豐富的資料科學家組成的團隊,這些科學家都要拿豐厚的薪水。其次,即使你擁有一支優秀的團隊,往往需要更多的經驗來決定哪種模式 最適合你的問題,而不是知識。
機器學習在各種應用中的成功,導致了對機器學習系統不斷增長的需求,這些系統可以由非專家使用¹。AutoML傾向於儘可能多地自動化 ML 管道中步驟,在只需最少人力的情況下仍保持模型的效能。
好處
AutoML 的優點可歸納為三大要點:
通過自動執行的重複性任務來提高工作效率。這使得資料科學家能夠更多地關注問題而不是模型。
自動化 ML 管道還有助於避免可能因手動引入的錯誤。
最後,AutoML 是向機器學習民主化邁出的一步,它使所有人都能使用 ML 的功能。
AutoML 框架
讓我們來看看一些流行的框架,這些框架的趨勢是自動化部分或整個機器學習的管道。這個清單不可能太詳盡,我盡力涵蓋那些正在被大規模使用的框架。
1. MLBox
MLBox 是一個功能強大的自動化機器學習 Python 庫。根據官方文件,該庫提供以下功能:
快速讀取,分散式資料預處理 / 清洗 / 格式化;
高可靠性的特徵選擇,洩漏檢測,準確的 超引數優化;
用於分類和迴歸的最先進的預測模型(深度學習,堆疊,LightGBM,......);
具有模型解釋的預測;
已經在 Kaggle 上進行了測試並且表現良好。(參見 Kaggle “Two Sigma Connect:Rental ListingInquiries”| Rank:85/2488)。
管道
MLBox 的主程式包包含 3 個子包,用於自動執行以下任務:
預處理:用於讀取和預處理資料。
優化:用於測試和交叉驗證模型。
預測:用於預測。
安裝
目前,MLBox 僅相容 Linux,很快就會支援 Windows 和 MacOS。
#gcc sudo apt-get install build-essential #cmake pip install cmake pip install mlbox
演示
在著名的房價迴歸(House Prices Regression)問題上執行“MLBox”的自動 ML 包。
完整的原始碼:
https://www.kaggle.com/axelderomblay/running-mlbox-auto-ml-package-on-house-prices
2. Auto-Sklearn
Auto-Sklearn 是一個基於 Scikit-learn 構建的自動化機器學習軟體包。Auto-Sklearn 讓機器學習的使用者從演算法選擇和超引數調整中解放出來。它包括特徵工程方法,如獨熱編碼(One-Hot)、數字特徵標準化、PCA 等。該模型使用 sklearn 估計器處理分類和迴歸問題。
Auto-sklearn 建立了一個管道,並使用貝葉斯搜尋對其進行優化。在 ML 框架的貝葉斯超引數優化中,新增了兩個元件:元學習 用於初始化貝葉斯優化器,從優化過程中評估配置的自動集合構造。
Auto-sklearn 在中小型資料集上表現良好,但它還無法在大型資料集上產生效能最先進的現代深度學習系統。
安裝
Auto-sklearn 目前僅適用於 Linux 系統的機器。
#gcc
sudo apt-get install build-essential
#cmake
pip install cmake
pip install mlbox
演示
以下示例顯示如何使用 Auto-Sklearn 擬合簡單迴歸模型。
import sklearn.model_selection import sklearn.datasets import sklearn.metrics import autosklearn.regression def main(): X, y = sklearn.datasets.load_boston(return_X_y=True) feature_types = (['numerical'] * 3) + ['categorical'] + (['numerical'] * 9) X_train, X_test, y_train, y_test = \ sklearn.model_selection.train_test_split(X, y, random_state=1) automl = autosklearn.regression.AutoSklearnRegressor( time_left_for_this_task=120, per_run_time_limit=30, tmp_folder='/tmp/autosklearn_regression_example_tmp', output_folder='/tmp/autosklearn_regression_example_out', ) automl.fit(X_train, y_train, dataset_name='boston', feat_type=feature_types) print(automl.show_models()) predictions = automl.predict(X_test) print("R2 score:", sklearn.metrics.r2_score(y_test, predictions)) if __name__ == '__main__': main()
資源:
https://automl.github.io/autosklearn/stable/examples/example_regression.html#sphx-glr-examples-example-regression-py
基於樹的管道優化工具(TPOT)
TPOT 是一個 Python 自動化機器學習工具,利用遺傳演算法來優化機器學習管道。TPOT 擴充套件了 Scikit-learn 框架,使用了自己的迴歸器和分類器方法。TPOT 的工作原理是探索數千條可能的管道,併為資料找到最好的一個。
TPOT 無法自動處理自然語言輸入。此外,它還無法處理分類字串,在作為資料傳入之前,這些字串必須進行整數編碼。
安裝
pip install tpot
有關詳細說明,請訪問 TPOT 安裝說明。
演示
演示 TPOT 用於分類 MNIST 數字的工作。
gif
MNIST 資料庫上的 TPOT 演示開原始碼:
https://epistasislab.github.io/tpot/
H2O
H2O 是 H2O.ai 公司的完全開源的分散式記憶體機器學習平臺。H2O同時支援 R 和 Python,支援最廣泛使用的統計和機器學習演算法,包括梯度提升(Gradient Boosting)機器、廣義線性模型、深度學習模型等。
H2O 包括一個自動機器學習模組,使用自己的演算法來構建管道。它對特徵工程方法和模型超引數採用了窮舉搜尋,優化了管道。
H2O 自動化了一些最複雜的資料科學和機器學習工作,例如特徵工程、模型驗證、模型調整、模型選擇 和 模型部署。除此之外,它還提供了自動視覺化以及機器學習的解釋能力(MLI)。
安裝
請按照以下連結下載並安裝 H2O。
下載和安裝 H2O - H2O 3.11.0.3888
文件:
https://h2o-release.s3.amazonaws.com/h2o/master/3888/docs-website/h2odocs/downloading.html#downloading-installing-h2o
演示
以下是一個 Python 示例,展示了 H2OAutoML 類的基本用法:
import h2o from h2o.automl import H2OAutoML h2o.init() # Import a sample binary outcome train/test set into H2O train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv") test = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv") # Identify predictors and response x = train.columns y = "response" x.remove(y) # For binary classification, response should be a factor train[y] = train[y].asfactor() test[y] = test[y].asfactor() # Run AutoML for 20 base models (limited to 1 hour max runtime by default) aml = H2OAutoML(max_models=20, seed=1) aml.train(x=x, y=y, training_frame=train) # View the AutoML Leaderboard lb = aml.leaderboard lb.head(rows=lb.nrows) # Print all rows instead of default (10 rows) # model_id auc logloss mean_per_class_error rmse mse # --------------------------------------------------- -------- --------- ---------------------- -------- -------- # StackedEnsemble_AllModels_AutoML_20181212_105540 0.789801 0.551109 0.333174 0.43211 0.186719 # StackedEnsemble_BestOfFamily_AutoML_20181212_105540 0.788425 0.552145 0.323192 0.432625 0.187165 # XGBoost_1_AutoML_20181212_105540 0.784651 0.55753 0.325471 0.434949 0.189181 # XGBoost_grid_1_AutoML_20181212_105540_model_4 0.783523 0.557854 0.318819 0.435249 0.189441 # XGBoost_grid_1_AutoML_20181212_105540_model_3 0.783004 0.559613 0.325081 0.435708 0.189841 # XGBoost_2_AutoML_20181212_105540 0.78136 0.55888 0.347074 0.435907 0.190015 # XGBoost_3_AutoML_20181212_105540 0.780847 0.559589 0.330739 0.43613 0.190209 # GBM_5_AutoML_20181212_105540 0.780837 0.559903 0.340848 0.436191 0.190263 # GBM_2_AutoML_20181212_105540 0.780036 0.559806 0.339926 0.436415 0.190458 # GBM_1_AutoML_20181212_105540 0.779827 0.560857 0.335096 0.436616 0.190633 # GBM_3_AutoML_20181212_105540 0.778669 0.56179 0.325538 0.437189 0.191134 # XGBoost_grid_1_AutoML_20181212_105540_model_2 0.774411 0.575017 0.322811 0.4427 0.195984 # GBM_4_AutoML_20181212_105540 0.771426 0.569712 0.33742 0.44107 0.194543 # GBM_grid_1_AutoML_20181212_105540_model_1 0.769752 0.572583 0.344331 0.442452 0.195764 # GBM_grid_1_AutoML_20181212_105540_model_2 0.754366 0.918567 0.355855 0.496638 0.246649 # DRF_1_AutoML_20181212_105540 0.742892 0.595883 0.355403 0.452774 0.205004 # XRT_1_AutoML_20181212_105540 0.742091 0.599346 0.356583 0.453117 0.205315 # DeepLearning_grid_1_AutoML_20181212_105540_model_2 0.741795 0.601497 0.368291 0.454904 0.206937 # XGBoost_grid_1_AutoML_20181212_105540_model_1 0.693554 0.620702 0.40588 0.465791 0.216961 # DeepLearning_1_AutoML_20181212_105540 0.69137 0.637954 0.409351 0.47178 0.222576 # DeepLearning_grid_1_AutoML_20181212_105540_model_1 0.690084 0.661794 0.418469 0.476635 0.227181 # GLM_grid_1_AutoML_20181212_105540_model_1 0.682648 0.63852 0.397234 0.472683 0.223429 # # [22 rows x 6 columns]
# The leader model is stored here aml.leader # If you need to generate predictions on a test set, you can make # predictions directly on the `"H2OAutoML"` object, or on the leader # model object directly preds = aml.predict(test) # or: preds = aml.leader.predict(test)
資源:
http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html
輸出
AutoML 物件包括在過程中訓練的模型的“排行榜”,根據問題型別(排行榜的第二列)按預設度量排名。以下是 二進位制分類 任務的排行榜示例:
AutoKeras
Auto-Keras 是 DATA Lab 構建的一個用於自動化機器學習的開源軟體庫。基於 Keras 深度學習框架,Auto-Keras 提供了自動搜尋深度學習模型的體系結構和超引數的功能。
API 的設計遵循 Scikit-Learn API 的經典設計,因此使用起來非常簡單。當前版本提供了在深度學習過程中自動搜尋超引數的功能。
Auto-Keras 的趨勢是通過使用自動神經架構搜尋(NAS)演算法簡化 ML 過程。NAS 基本上用一組自動調整模型的演算法,替代了深度學習工程師 / 從業者。
安裝
安裝部分也很簡單:
pip install autokeras #only comptible with Python 3.7
演示
以下是 MNIST 資料集上 Auto-Keras 庫的演示:
from keras.datasets import mnist from autokeras import ImageClassifier from autokeras.constant import Constant if __name__ == '__main__': (x_train, y_train), (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,)) clf = ImageClassifier(verbose=True, augment=False) clf.fit(x_train, y_train, time_limit=30 * 60) clf.final_fit(x_train, y_train, x_test, y_test, retrain=True) y = clf.evaluate(x_test, y_test)
print(y * 100)
資源:
https://github.com/keras-team/autokeras/blob/master/examples/a_simple_example/mnist.py
Cloud AutoML
Cloud AutoML 是來自 Google 的一套機器學習產品,利用 Google 最先進的 遷移學習 和神經架構搜尋(NAS)技術,讓具有有限的機器學習專業知識的開發人員能夠訓練出特定的業務需求的高質量模型。
Cloud AutoML 提供了一個簡單的圖形使用者介面(GUI),可根據自己的資料來訓練、評估、改進和部署模型。目前,該套件提供以下 AutoML 解決方案:
谷歌 AutoML的缺點是非開源的,因此需要付錢購買。對於 AutoML Vision,成本既取決於培訓模型所花費的時間,也取決於傳送給 AutoML Vision 進行預測的影像數量。定價如下:
TransmogrifAI
TransmogrifAI 是 Salesforce 的一個開源自動化機器學習庫。該公司的旗艦 ML 平臺名為愛因斯坦,也由 TransmogrifAI 驅動。它是一個端到端的 AutoML 庫,用於 Scala 編寫的結構化資料,執行在 Apache Spark 之上。在以下場景中,TransmogrifAI 特別有用:
快速訓練高質量機器學習模型,只需極少的手動調節
構建模組化、可重用、強型別的機器學習工作流
安裝
先決條件是需要安裝 Java 和 Spark:
#Install JAVA 1.8 #Get Spark 2.3.x git clone https://github.com/salesforce/TransmogrifAI.git cd TransmogrifAI && ./gradlew compileTestScala installDist
閱讀文件,獲取完整的安裝說明。
https://docs.transmogrif.ai/en/stable/installation/index.html#installation
用 TransmogrifAI 預測泰坦尼克號倖存者,在 https://transmogrif.ai/ 檢視整個示例。
() val featureVector = predictors.transmogrify() // Automated feature validation and selection val checkedFeatures = survived.sanityCheck(featureVector, removeBadFeatures = true) // Automated model selection val (pred, raw, prob) = BinaryClassificationModelSelector().setInput(survived, checkedFeatures).getOutput() // Setting up a TransmogrifAI workflow and training the model val model = new OpWorkflow().setInputDataset(passengersData).setResultFeatures(pred).train() println("Model summary:\n" + model.summaryPretty())
AutoML 的未來
從本質上講,AutoML 的目的是自動化重複的任務,如管道建立和超引數調整,以便資料科學家在實際中可以將更多的時間花在手頭的業務問題上。
AutoML 還在於讓所有人都能使用這項技術,而不僅僅少數人才能用。AutoML 和資料科學家可以聯合起來加速 ML 的發展過程,從而實現機器學習的真正效率。
AutoML 是否成功取決於它的使用率和在這個領域所取得的進展。很明顯,AutoML 是機器學習未來的一個重要組成部分。
參考
https://ml.informatik.uni-freiburg.de/papers/15-NIPS-auto-sklearn-preprint.pdf
自動機器學習框架的基準(https://arxiv.org/pdf/1808.06492v1.pdf)
檢視原文連結:
https://heartbeat.fritz.ai/automl-the-next-wave-of-machine-learning-5494baac615