AutoML:機器學習的下一波浪潮 AI前線

自動機器學習(AutoML)是將機器學習應用於現實問題的端到端流程自動化的過程。AutoML 使真正意義上的機器學習成為可能,即使對於沒有該領域專業知識的人也是如此。本文介紹了一些流行的 AutoML 框架,這些框架的趨勢是自動化部分或整個機器學習的管道。

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:機器學習的下一波浪潮 AI前線

如何自動化機器學習管道:Axel de Romblay

從攝取數據到 預處理、優化,然後預測結果,每個步驟都由人來控制和執行。AutoML 主要關注兩個主要方面:數據採集 / 收集和預測。中間發生的所有其他步驟都可以輕鬆實現自動化,同時提供經過優化並準備好進行預測的模型。

為什麼需要 AutoML

在過去幾年中,對機器學習系統的需求飆升。這是因為 ML 如今在廣泛的應用中取得了成功。然而,即使有這種明確的跡象表明機器學習可以為某些企業提供支持,但很多公司仍在為部署 ML 模型而艱難地努力著。

首先,他們需要建立一支由經驗豐富的數據科學家組成的團隊,這些科學家都要拿豐厚的薪水。其次,即使你擁有一支優秀的團隊,往往需要更多的經驗來 決定哪種模式 最適合你的問題,而不是知識。

機器學習在各種應用中的成功,導致了對機器學習系統不斷增長的需求,這些系統可以由非專家使用¹。AutoML 傾向於儘可能多地自動化 ML 管道中步驟,在只需最少人力的情況下仍保持模型的性能。

好處

AutoML 的優點可歸納為三大要點:

  • 通過自動執行的重複性任務來 提高工作效率。這使得數據科學家能夠更多地關注問題而不是模型。自動化 ML 管道還有助於 避免 可能因手動引入的 錯誤。最後,AutoML 是向 機器學習民主化 邁出的一步,它使所有人都能使用 ML 的功能。

AutoML 框架

讓我們來看看一些流行的框架,這些框架的趨勢是自動化部分或整個機器學習的管道。這個清單不可能太詳盡,我盡力涵蓋那些正在被大規模使用的框架。

1. MLBox

AutoML:機器學習的下一波浪潮 AI前線

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 估計器處理分類和迴歸問題。

AutoML:機器學習的下一波浪潮 AI前線

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-sklearn/stable/examples/example_regression.html#sphx-glr-examples-example-regression-py

3. 基於樹的管道優化工具(TPOT)

AutoML:機器學習的下一波浪潮 AI前線

TPOT 是一個 Python 自動化機器學習工具,利用遺傳算法來優化機器學習管道。TPOT 擴展了 Scikit-learn 框架,使用了自己的迴歸器和分類器方法。TPOT 的工作原理是探索數千條可能的管道,併為數據找到最好的一個。

AutoML:機器學習的下一波浪潮 AI前線

TPOT 自動化的機器學習過程

TPOT 無法自動處理自然語言輸入。此外,它還無法處理分類字符串,在作為數據傳入之前,這些字符串必須進行整數編碼。

安裝

pip install tpot

有關詳細說明,請訪問 TPOT 安裝說明。

演示

演示 TPOT 用於分類 MNIST 數字的工作。


AutoML:機器學習的下一波浪潮 AI前線


MNIST 數據庫上的 TPOT 演示開源代碼:https://epistasislab.github.io/tpot/

4. H2O

AutoML:機器學習的下一波浪潮 AI前線

H2O 是 H20.ai 公司的完全開源的分佈式內存機器學習平臺。H20 同時支持 R 和 Python,支持最廣泛使用的統計和機器學習算法,包括梯度提升(Gradient Boosting)機器、廣義線性模型、深度學習模型等。

H2O 包括一個自動機器學習模塊,使用自己的算法來構建管道。它對特徵工程方法和模型超參數採用了窮舉搜索,優化了管道。

H2O 自動化了一些最複雜的數據科學和機器學習工作,例如特徵工程、模型驗證、模型調整、模型選擇 和 模型部署。除此之外,它還提供了自動可視化以及機器學習的解釋能力(MLI)。

安裝

請按照以下鏈接下載並安裝 H2O。

AutoML:機器學習的下一波浪潮 AI前線

下載和安裝 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 對象包括在過程中訓練的模型的“排行榜”,根據問題類型(排行榜的第二列)按默認度量排名。以下是 二進制分類 任務的排行榜示例:

AutoML:機器學習的下一波浪潮 AI前線

5. AutoKeras

AutoML:機器學習的下一波浪潮 AI前線

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

6. Cloud AutoML

Cloud AutoML 是來自 Google 的一套機器學習產品,利用 Google 最先進的 傳輸學習 和神經架構搜索(NAS)技術,讓具有有限的機器學習專業知識的開發人員能夠訓練出特定的業務需求的高質量模型。

Cloud AutoML 提供了一個簡單的圖形用戶界面(GUI),可根據自己的數據來訓練、評估、改進和部署模型。目前,該套件提供以下 AutoML 解決方案:

AutoML:機器學習的下一波浪潮 AI前線

Google 的 AutoML 類別下提供的產品

谷歌 AutoML 的缺點是 非開源的,因此需要付錢購買。對於 AutoML Vision,成本既取決於培訓模型所花費的時間,也取決於發送給 AutoML Vision 進行預測的圖像數量。

AutoML Vision 定價

7. TransmogrifAI

AutoML:機器學習的下一波浪潮 AI前線

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 是機器學習未來的一個重要組成部分。

參 考

  1. 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


分享到:


相關文章: