AutoML:機器學習的下一波浪潮
本文由 「AI前線」原創(ID:ai-front),原文連結:AutoML:機器學習的下一波浪潮
作者 | Parul Pandey
譯者 | 楊雷
編輯 | Natalie
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 模型而艱難地努力著。
首先,他們需要建立一支由經驗豐富的資料科學家組成的團隊,這些科學家都要拿豐厚的薪水。其次,即使你擁有一支優秀的團隊,往往需要更多的經驗來 決定哪種模式 最適合你的問題,而不是知識。
機器學習在各種應用中的成功,導致了對機器學習系統不斷增長的需求,這些系統可以由非專家使用¹。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/axelderombla
y/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。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/auto-s
klearn/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 數字的工作。
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 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 物件包括在過程中訓練的模型的“排行榜”,根據問題型別(排行榜的第二列)按預設度量排名。以下是 二進位制分類 任務的排行榜示例:
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 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/a
utokeras/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。SparkSession
implicit 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。0649
2v1。pdf
)
檢視原文連結
:
https://
heartbeat。fritz。ai/auto
ml-the-next-wave-of-machine-learning-5494baac615f
今日薦文
點選下方標題即可閱讀
我是怎麼拖垮一家價值十億美元大資料公司的?
如果你喜歡這篇文章,或希望看到更多類似優質報道,記得給我留言和點贊哦!╰( ̄ω ̄o)