AutoML:机器学习的下一波浪潮
AI 前線導(dǎo)讀:?人工智能和機器學(xué)習(xí)仍然是一個進(jìn)入門檻較高的領(lǐng)域,需要專業(yè)的知識和資源,很少有公司可以自己承擔(dān)。—— 李飛飛
自動機器學(xué)習(xí)(AutoML)是將機器學(xué)習(xí)應(yīng)用于現(xiàn)實問題的端到端流程自動化的過程。AutoML 使真正意義上的機器學(xué)習(xí)成為可能,即使對于沒有該領(lǐng)域?qū)I(yè)知識的人也是如此。本文介紹了一些流行的 AutoML 框架,這些框架的趨勢是自動化部分或整個機器學(xué)習(xí)的管道。
更多優(yōu)質(zhì)內(nèi)容請關(guān)注微信公眾號“AI 前線”(ID:ai-front)
Mercari 是一款在日本很受歡迎的購物應(yīng)用程序,它一直使用 AutoML Vision(谷歌的 AutoML 解決方案)對圖像進(jìn)行分類。根據(jù) Mercari 的說法,他們一直在“開發(fā)自己的 ML 模型,在照片上傳的用戶界面上推薦 12 個主要品牌的品牌名稱。”
雖然他們自己在 TensorFlow 上訓(xùn)練的模型達(dá)到了 75% 的精度,但 AutoML Vision 的高級模式因為擁有 50,000 張訓(xùn)練圖像,所以精度更是高達(dá) 91.3%,提升了竟有 15%。基于如此驚人的結(jié)果,Mercari 已經(jīng)將 AutoML 集成到他們的系統(tǒng)中。
AutoML 通過使不同背景的人能夠演進(jìn)機器學(xué)習(xí)模型來解決復(fù)雜的場景,正在從根本上改變基于 ML 的解決方案給人們的印象,以上僅是說明它如何改變的其中一例。
自動機器學(xué)習(xí):AutoML
近年來,機器學(xué)習(xí)在各個領(lǐng)域都取得了重大突破。金融服務(wù)、醫(yī)療保健、零售、交通等領(lǐng)域一直在以某種方式使用機器學(xué)習(xí)系統(tǒng),而且取得了很好的效果。
今天的機器學(xué)習(xí)不僅限于研發(fā)應(yīng)用,而且已經(jīng)進(jìn)入了企業(yè)領(lǐng)域。不過,傳統(tǒng)的 ML 流程仍依賴于人力,但并非所有企業(yè)都有資源來投資經(jīng)驗豐富的數(shù)據(jù)科學(xué)團隊,AutoML 可能正是這種困境的一個答案。
自動機器學(xué)習(xí)(AutoML)是將機器學(xué)習(xí)應(yīng)用于現(xiàn)實問題的端到端過程自動化的過程。AutoML 使機器學(xué)習(xí)真正意義上成為可能,即使對于在該領(lǐng)域沒有專業(yè)知識的人也是如此。
典型的機器學(xué)習(xí)模型包括以下四個過程:
?
如何自動化機器學(xué)習(xí)管道:Axel de Romblay
從攝取數(shù)據(jù)到 預(yù)處理、優(yōu)化,然后預(yù)測結(jié)果,每個步驟都由人來控制和執(zhí)行。AutoML 主要關(guān)注兩個主要方面:數(shù)據(jù)采集 / 收集和預(yù)測。中間發(fā)生的所有其他步驟都可以輕松實現(xiàn)自動化,同時提供經(jīng)過優(yōu)化并準(zhǔn)備好進(jìn)行預(yù)測的模型。
為什么需要 AutoML
在過去幾年中,對機器學(xué)習(xí)系統(tǒng)的需求飆升。這是因為 ML 如今在廣泛的應(yīng)用中取得了成功。然而,即使有這種明確的跡象表明機器學(xué)習(xí)可以為某些企業(yè)提供支持,但很多公司仍在為部署 ML 模型而艱難地努力著。
首先,他們需要建立一支由經(jīng)驗豐富的數(shù)據(jù)科學(xué)家組成的團隊,這些科學(xué)家都要拿豐厚的薪水。其次,即使你擁有一支優(yōu)秀的團隊,往往需要更多的經(jīng)驗來 決定哪種模式 最適合你的問題,而不是知識。
機器學(xué)習(xí)在各種應(yīng)用中的成功,導(dǎo)致了對機器學(xué)習(xí)系統(tǒng)不斷增長的需求,這些系統(tǒng)可以由非專家使用1。AutoML 傾向于盡可能多地自動化 ML 管道中步驟,在只需最少人力的情況下仍保持模型的性能。
?好處
AutoML 的優(yōu)點可歸納為三大要點:
-
通過自動執(zhí)行的重復(fù)性任務(wù)來 提高工作效率。這使得數(shù)據(jù)科學(xué)家能夠更多地關(guān)注問題而不是模型。
-
自動化 ML 管道還有助于 避免 可能因手動引入的 錯誤。
-
最后,AutoML 是向 機器學(xué)習(xí)民主化 邁出的一步,它使所有人都能使用 ML 的功能。
AutoML 框架
讓我們來看看一些流行的框架,這些框架的趨勢是自動化部分或整個機器學(xué)習(xí)的管道。這個清單不可能太詳盡,我盡力涵蓋那些正在被大規(guī)模使用的框架。
1. MLBox
MLBox 是一個功能強大的自動化機器學(xué)習(xí) Python 庫。根據(jù)官方文檔,該庫提供以下功能:
-
快速讀取,分布式數(shù)據(jù)預(yù)處理 / 清洗 / 格式化。
-
高可靠性的特征選擇,泄漏檢測,準(zhǔn)確的 超參數(shù)優(yōu)化
-
用于分類和回歸的最先進(jìn)的預(yù)測模型(深度學(xué)習(xí),堆疊,LightGBM,......)
-
具有模型解釋的預(yù)測
-
已經(jīng)在 Kaggle 上進(jìn)行了測試并且表現(xiàn)良好。(參見 Kaggle “Two Sigma Connect:Rental ListingInquiries”| Rank:85/2488)
?管道
MLBox 的主程序包包含 3 個子包,用于自動執(zhí)行以下任務(wù):
-
預(yù)處理:用于讀取和預(yù)處理數(shù)據(jù)
-
優(yōu)化: 用于測試和 交叉驗證 模型
-
預(yù)測: 用于預(yù)測。
?安裝
目前,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 構(gòu)建的自動化機器學(xué)習(xí)軟件包。Auto-Sklearn 讓機器學(xué)習(xí)的用戶從算法選擇和超參數(shù)調(diào)整中解放出來。它包括 特征工程 方法,如獨熱編碼(One-Hot)、數(shù)字特征標(biāo)準(zhǔn)化、PCA 等。該模型使用 sklearn 估計器處理分類和回歸問題。
Auto-sklearn 管道
Auto-sklearn 創(chuàng)建了一個管道,并使用貝葉斯搜索對其進(jìn)行優(yōu)化。在 ML 框架的貝葉斯超參數(shù)優(yōu)化中,添加了兩個組件:元學(xué)習(xí) 用于初始化貝葉斯優(yōu)化器,從優(yōu)化過程中評估配置的 自動集合構(gòu)造。
Auto-sklearn 在中小型數(shù)據(jù)集上表現(xiàn)良好,但它還無法在大型數(shù)據(jù)集上產(chǎn)生性能最先進(jìn)的現(xiàn)代深度學(xué)習(xí)系統(tǒng)。
?安裝
Auto-sklearn 目前僅適用于 Linux 系統(tǒng)的機器。
#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. 基于樹的管道優(yōu)化工具(TPOT)
TPOT 是一個 Python 自動化機器學(xué)習(xí)工具,利用遺傳算法來優(yōu)化機器學(xué)習(xí)管道。TPOT 擴展了 Scikit-learn 框架,使用了自己的回歸器和分類器方法。TPOT 的工作原理是探索數(shù)千條可能的管道,并為數(shù)據(jù)找到最好的一個。
?
TPOT 自動化的機器學(xué)習(xí)過程
TPOT 無法自動處理自然語言輸入。此外,它還無法處理分類字符串,在作為數(shù)據(jù)傳入之前,這些字符串必須進(jìn)行整數(shù)編碼。
?安裝
pip?install?tpot
有關(guān)詳細(xì)說明,請訪問 TPOT 安裝說明。
?演示
演示 TPOT 用于分類 MNIST 數(shù)字的工作。
gif
MNIST 數(shù)據(jù)庫上的 TPOT 演示開源代碼:https://epistasislab.github.io/tpot/
4. H2O
H2O 是 ?H20.ai 公司的完全開源的分布式內(nèi)存機器學(xué)習(xí)平臺。H20 同時支持 R 和 Python,支持最廣泛使用的統(tǒng)計和機器學(xué)習(xí)算法,包括梯度提升(Gradient Boosting)機器、廣義線性模型、深度學(xué)習(xí)模型等。
H2O 包括一個自動機器學(xué)習(xí)模塊,使用自己的算法來構(gòu)建管道。它對特征工程方法和模型超參數(shù)采用了窮舉搜索,優(yōu)化了管道。
H2O 自動化了一些最復(fù)雜的數(shù)據(jù)科學(xué)和機器學(xué)習(xí)工作,例如特征工程、模型驗證、模型調(diào)整、模型選擇 和 模型部署。除此之外,它還提供了自動可視化以及機器學(xué)習(xí)的解釋能力(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 對象包括在過程中訓(xùn)練的模型的“排行榜”,根據(jù)問題類型(排行榜的第二列)按默認(rèn)度量排名。以下是 二進(jìn)制分類 任務(wù)的排行榜示例:
5. AutoKeras
Auto-Keras 是 DATA Lab 構(gòu)建的一個用于自動化機器學(xué)習(xí)的開源軟件庫。基于 ?Keras 深度學(xué)習(xí)框架,Auto-Keras 提供了自動搜索深度學(xué)習(xí)模型的體系結(jié)構(gòu)和超參數(shù)的功能。
API 的設(shè)計遵循 Scikit-Learn API 的經(jīng)典設(shè)計,因此使用起來非常簡單。當(dāng)前版本提供了在深度學(xué)習(xí)過程中自動搜索超參數(shù)的功能。
Auto-Keras 的趨勢是通過使用自動 神經(jīng)架構(gòu)搜索(NAS)算法簡化 ML 過程。NAS 基本上用一組自動調(diào)整模型的算法,替代了深度學(xué)習(xí)工程師 / 從業(yè)者。
?安裝
安裝 部分也很簡單:
pip?install?autokeras #only?comptible?with?Python?3.7演示
以下是 MNIST 數(shù)據(jù)集上 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 的一套機器學(xué)習(xí)產(chǎn)品,利用 Google 最先進(jìn)的 遷移學(xué)習(xí) 和神經(jīng)架構(gòu)搜索(NAS)技術(shù),讓具有有限的機器學(xué)習(xí)專業(yè)知識的開發(fā)人員能夠訓(xùn)練出特定的業(yè)務(wù)需求的高質(zhì)量模型。
Cloud AutoML 提供了一個簡單的圖形用戶界面(GUI),可根據(jù)自己的數(shù)據(jù)來訓(xùn)練、評估、改進(jìn)和部署模型。目前,該套件提供以下 AutoML 解決方案:
Google 的 AutoML 類別下提供的產(chǎn)品
谷歌 AutoML 的缺點是 非開源的,因此需要付錢購買。對于 AutoML Vision,成本既取決于培訓(xùn)模型所花費的時間,也取決于發(fā)送給 AutoML Vision 進(jìn)行預(yù)測的圖像數(shù)量。定價如下:
AutoML Vision 定價
7. TransmogrifAI
TransmogrifAI 是 ?Salesforce 的一個開源自動化機器學(xué)習(xí)庫。該公司的旗艦 ML 平臺名為 愛因斯坦,也由 TransmogrifAI 驅(qū)動。它是一個端到端的 AutoML 庫,用于 Scala 編寫的結(jié)構(gòu)化數(shù)據(jù),運行在 ?Apache Spark 之上。在以下場景中,TransmogrifAI 特別有用:
-
快速訓(xùn)練高質(zhì)量機器學(xué)習(xí)模型,只需極少的手動調(diào)節(jié)
-
構(gòu)建模塊化、可重用、強類型的機器學(xué)習(xí)工作流
?安裝
先決條件是需要安裝 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 預(yù)測泰坦尼克號幸存者,在 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 的未來
從本質(zhì)上講,AutoML 的目的是自動化重復(fù)的任務(wù),如管道創(chuàng)建和超參數(shù)調(diào)整,以便數(shù)據(jù)科學(xué)家在實際中可以將更多的時間花在手頭的業(yè)務(wù)問題上。
AutoML 還在于讓所有人都能使用這項技術(shù),而不僅僅少數(shù)人才能用。AutoML 和數(shù)據(jù)科學(xué)家可以聯(lián)合起來加速 ML 的發(fā)展過程,從而實現(xiàn)機器學(xué)習(xí)的真正效率。
AutoML 是否成功取決于它的使用率和在這個領(lǐng)域所取得的進(jìn)展。很明顯,AutoML 是機器學(xué)習(xí)未來的一個重要組成部分。
參? ? 考
https://ml.informatik.uni-freiburg.de/papers/15-NIPS-auto-sklearn-preprint.pdf
自動機器學(xué)習(xí)框架的基準(zhǔn)(https://arxiv.org/pdf/1808.06492v1.pdf)
查看原文鏈接:
https://heartbeat.fritz.ai/automl-the-next-wave-of-machine-learning-5494baac615f
總結(jié)
以上是生活随笔為你收集整理的AutoML:机器学习的下一波浪潮的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoML - 数据增广
- 下一篇: python 项目中的requireme