AutoML:机器学习的下一波浪潮
AI 前線導讀:?人工智能和機器學習仍然是一個進入門檻較高的領域,需要專業的知識和資源,很少有公司可以自己承擔?!?李飛飛
自動機器學習(AutoML)是將機器學習應用于現實問題的端到端流程自動化的過程。AutoML 使真正意義上的機器學習成為可能,即使對于沒有該領域專業知識的人也是如此。本文介紹了一些流行的 AutoML 框架,這些框架的趨勢是自動化部分或整個機器學習的管道。
更多優質內容請關注微信公眾號“AI 前線”(ID:ai-front)
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 使機器學習真正意義上成為可能,即使對于在該領域沒有專業知識的人也是如此。
典型的機器學習模型包括以下四個過程:
?
如何自動化機器學習管道:Axel de Romblay
從攝取數據到 預處理、優化,然后預測結果,每個步驟都由人來控制和執行。AutoML 主要關注兩個主要方面:數據采集 / 收集和預測。中間發生的所有其他步驟都可以輕松實現自動化,同時提供經過優化并準備好進行預測的模型。
為什么需要 AutoML
在過去幾年中,對機器學習系統的需求飆升。這是因為 ML 如今在廣泛的應用中取得了成功。然而,即使有這種明確的跡象表明機器學習可以為某些企業提供支持,但很多公司仍在為部署 ML 模型而艱難地努力著。
首先,他們需要建立一支由經驗豐富的數據科學家組成的團隊,這些科學家都要拿豐厚的薪水。其次,即使你擁有一支優秀的團隊,往往需要更多的經驗來 決定哪種模式 最適合你的問題,而不是知識。
機器學習在各種應用中的成功,導致了對機器學習系統不斷增長的需求,這些系統可以由非專家使用1。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 管道
Auto-sklearn 創建了一個管道,并使用貝葉斯搜索對其進行優化。在 ML 框架的貝葉斯超參數優化中,添加了兩個組件:元學習 用于初始化貝葉斯優化器,從優化過程中評估配置的 自動集合構造。
Auto-sklearn 在中小型數據集上表現良好,但它還無法在大型數據集上產生性能最先進的現代深度學習系統。
?安裝
Auto-sklearn 目前僅適用于 Linux 系統的機器。
#dependencies
curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
#auto-sklearn
pip install?auto-sklearn
演示
以下示例顯示如何使用 Auto-Sklearn 擬合簡單回歸模型。
import?sklearn.model_selection import?sklearn.datasets import?sklearn.metricsimport?autosklearn.regressiondef?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/auto-sklearn/stable/examples/example_regression.html#sphx-glr-examples-example-regression-py
3. 基于樹的管道優化工具(TPOT)
TPOT 是一個 Python 自動化機器學習工具,利用遺傳算法來優化機器學習管道。TPOT 擴展了 Scikit-learn 框架,使用了自己的回歸器和分類器方法。TPOT 的工作原理是探索數千條可能的管道,并為數據找到最好的一個。
?
TPOT 自動化的機器學習過程
TPOT 無法自動處理自然語言輸入。此外,它還無法處理分類字符串,在作為數據傳入之前,這些字符串必須進行整數編碼。
?安裝
pip?install?tpot
有關詳細說明,請訪問 TPOT 安裝說明。
?演示
演示 TPOT 用于分類 MNIST 數字的工作。
gif
MNIST 數據庫上的 TPOT 演示開源代碼:https://epistasislab.github.io/tpot/
4. H2O
H2O 是 ?H20.ai 公司的完全開源的分布式內存機器學習平臺。H20 同時支持 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/h2o-docs/downloading.html#downloading-installing-h2o
?演示
以下是一個 Python 示例,展示了 H2OAutoML 類的基本用法:
import h2o from h2o.automl import H2OAutoMLh2o.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 directlypreds = aml.predict(test)#?or: preds = aml.leader.predict(test)資源:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl.html
?輸出
AutoML 對象包括在過程中訓練的模型的“排行榜”,根據問題類型(排行榜的第二列)按默認度量排名。以下是 二進制分類 任務的排行榜示例:
5. 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?Constantif?__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
6. Cloud AutoML
Cloud AutoML 是來自 Google 的一套機器學習產品,利用 Google 最先進的 遷移學習 和神經架構搜索(NAS)技術,讓具有有限的機器學習專業知識的開發人員能夠訓練出特定的業務需求的高質量模型。
Cloud AutoML 提供了一個簡單的圖形用戶界面(GUI),可根據自己的數據來訓練、評估、改進和部署模型。目前,該套件提供以下 AutoML 解決方案:
Google 的 AutoML 類別下提供的產品
谷歌 AutoML 的缺點是 非開源的,因此需要付錢購買。對于 AutoML Vision,成本既取決于培訓模型所花費的時間,也取決于發送給 AutoML Vision 進行預測的圖像數量。定價如下:
AutoML Vision 定價
7. 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/ 查看整個示例。
import?com.salesforce.op._ import?com.salesforce.op.readers._ import?com.salesforce.op.features._ import?com.salesforce.op.features.types._ import?com.salesforce.op.stages.impl.classification._ import?org.apache.spark.SparkConf import?org.apache.spark.sql.SparkSessionimplicit val spark = SparkSession.builder.config(new?SparkConf()).getOrCreate() import?spark.implicits._// Read Titanic data as a DataFrame val passengersData = DataReaders.Simple.csvCase[Passenger](path = pathToData).readDataset().toDF()// Extract response and predictor features val (survived, predictors) = FeatureBuilder.fromDataFrame[RealNN](passengersData, response =?"survived")// Automated feature engineering 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-5494baac615f
總結
以上是生活随笔為你收集整理的AutoML:机器学习的下一波浪潮的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoML - 数据增广
- 下一篇: python 项目中的requireme