使用Ray和Analytics Zoo將自動機器學習(AutoML)應用于時間序列預測

摘要

Analytics Zoo 近期提供了對 RayOnSpark的支持,允許用戶基于 Ray 構(gòu)建新的 AI 應用,并可以在現(xiàn)有大數(shù)據(jù)集群中直接運行,進而將其無縫集成到大數(shù)據(jù)處理和分析流水線中。本文主要介紹如何利用 Ray Tune 和 RayOnSpark 實施可擴展 的AutoML 框架和自動時間序列預測。

背景

時間序列簡單來講是指一系列在時間軸上有序的數(shù)據(jù),而時序預測是根據(jù)過去時間點的數(shù)值來預測將來時間點上的數(shù)值?,F(xiàn)實中,時間序列預測除了在電信運營商中的網(wǎng)絡(luò)質(zhì)量分析、面向數(shù)據(jù)中心運營的日志分析、面向高價值設(shè)備的預測性維護等多有應用之外,還可用作異常檢測的第一步,以幫助在實際值偏離預測值過多時觸發(fā)警報(請參見此處的示例)。

傳統(tǒng)的時序預測方法通常使用描述性的(統(tǒng)計)模型,來根據(jù)過去的數(shù)據(jù)對未來進行預測。這類方法通常需要對底層分布做一定的假設(shè),并需要將時間序列分解為多個部分,如周期、趨勢、噪聲等。而新的機器學習方法對數(shù)據(jù)的假設(shè)更少、更靈活,比如神經(jīng)網(wǎng)絡(luò)模型——它們通常將時間序列預測視作序列建模問題,最近已成功應用于時間序列分析相關(guān)的問題(如參考 [1] 和 [2] 所示)。

然而,為時間序列預測構(gòu)建機器學習應用是一項費力且對專業(yè)知識要求較高的工作。為提供易于使用的時間序列預測工具套件,我們將自動化機器學習?(AutoML)?應用于時間序列預測,并對特征生成、模型選擇和超參數(shù)調(diào)優(yōu)等流程進行了自動化。該工具套件基于?Ray*(面向高級 AI 應用的開源分布式框架,由 UC Berkeley?RISELab?提供)搭建,是?Analytic Zoo——由英特爾提供的統(tǒng)一數(shù)據(jù)分析和 AI 開源平臺的一部分。

Ray 和 RayOnSpark ? ? ? ? ? ? ? ? ?

Ray 提供了一種通用的集群計算框架,可滿足新興 AI 技術(shù)對系統(tǒng)性能的苛刻要求。例如,Tune* 是一個基于 Ray 構(gòu)建的分布式可擴展超參數(shù)優(yōu)化庫,支持用戶使用高效搜索算法在大型集群上輕松運行許多實驗。

Analytics Zoo 近期提供了對?RayOnSpark的支持,允許用戶基于 Ray 構(gòu)建新的 AI 應用,并可以在現(xiàn)有大數(shù)據(jù)集群中直接運行,進而將其無縫集成到大數(shù)據(jù)處理和分析流水線中。我們將在后文介紹如何利用?Ray Tune?和?RayOnSpark?實施可擴展 的AutoML 框架和自動時間序列預測。

Analytics Zoo 中的 AutoML 框架

下圖描述了 Analytics Zoo 中的?AutoML?框架架構(gòu)。

圖一 ?Analytics Zoo 中的 AutoML 框架架構(gòu)

AutoML 框架在特征工程和建模的組件中使用?Ray Tune?進行超參數(shù)搜索(運行在?RayOnSpark?上)。在特征工程部分,搜索引擎從各種特征生成工具(如?featuretools)自動生成的特征集中選擇最佳特征子集;在建模部分,搜索引擎可搜索各種超參數(shù),如每層的節(jié)點數(shù)量、學習率等。我們使用流行的深度學習框架(如 Tensorflow 和 Keras)來構(gòu)建和訓練模型,在必要時我們會將?Apache Spark* 和 Ray 用于分布式執(zhí)行。

1、AutoML 框架目前包括四個基本組件,即?FeatureTransformer、Model、SearchEngine?和?Pipeline。
2、
FeatureTransformer 定義了特征工程流程,其通常包括一系列操作,如特征生成、特征縮放和特征選擇。
4、Model 定義了模型(如神經(jīng)網(wǎng)絡(luò))和使用的優(yōu)化算法(如 SGD、Adam 等)。Model 還可能包括模型/算法選擇。
5、SearchEngine 負責搜索 FeatureTransformer 和 Model 的最佳超參數(shù)組合,控制實際的模型訓練過程。
6、Pipeline 是一個集成了 FeatureTransformer 和 Model 的端到端的數(shù)據(jù)分析流水線。Pipeline 可輕松保存到文件中,方便后續(xù)加載重新使用

AutoML 框架的一般訓練工作流程如下所示:?

1、首先實例化FeatureTransformer 和 Model,SearchEngine 隨后進行實例化,并由 FeatureTransformer 和 Model及一些搜索預設(shè)(指定超參數(shù)搜索空間、獎勵指標等)進行配置。
2、SearchEngine 運行搜索程序。每次運行將生成多個試驗,并使用 Ray Tune 將這些試驗在集群中分布式運行。每個試驗使用不同的超參數(shù)組合進行特征工程和模型訓練流程,并返回目標指標。
3、在所有試驗完成后,可根據(jù)目標指標檢索出一組最佳的超參數(shù),并得到訓練好的模型。它們將用于創(chuàng)建最終的 FeatureTransformer 和 Model,并用于構(gòu)成 Pipeline。Pipeline 可被保存至文件中,以便通過后續(xù)加載用于推理和/或增量訓練。

為時間序列預測訓練 TimeSequencePredictor

在訓練?TimeSequencePredictor?之前,需要先初始化 RayOnSpark(在集群上使用 Spark 本地模式或 YARN 模式),訓練結(jié)束后可以停止 RayOnSpark。詳情請參閱?RayOnSpark 博文。

在成功初始化 RayOnSpark 后,可以訓練時間序列預測流水線,具體細節(jié)如以下示例所示。首先用必要的參數(shù)初始化一個?TimeSequencePredictor?對象,然后調(diào)用?TimeSequencePredictor.fit,以分布式的方式對歷史數(shù)據(jù)自動地進行機器學習訓練,在訓練結(jié)束后得到一個?TimeSequencePipeline?對象。

from zoo.automl.regression.time_sequence_predictor import imeSequencePredictortsp = TimeSequencePredictor( dt_col="datetime",? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?target_col="value",? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?extra_features_col=None,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?future_seq_len=1)

pipeline = tsp.fit(train_df,? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?metric="mean_squared_error",? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?recipe=RandomRecipe(num_samples=100),? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?distributed=True)?

1、TimeSequencePredictor 的輸入數(shù)據(jù) (train_df) 是包含一系列記錄的 (Pandas*) Dataframe,每條記錄包含一個時間戳 (dt_col) 及與時間戳關(guān)聯(lián)的數(shù)據(jù)點數(shù)值 (target_col),每條記錄還可包含額外的輸入特征列表 (extra_feature_col);TimeSequencePredictor 訓練完成之后得到 TimeSequencePipeline,用于預測未來時步的相應 target_col。
2、recipe?參數(shù)包含 TimeSequencePredictor 所需的參數(shù),用于在訓練時指定搜索空間、停止條件和樣本數(shù)量(即搜索空間中生成的樣本數(shù)量)。目前可用的 recipe 包括 SmokeRecipe、RandomRecipe、GridRandomRecipe 和 BayesRecipe。

可以將訓練結(jié)束時獲得的TimeSequencePipeline(已包含最佳超參數(shù)配置和 AutoML 框架返回的訓練好的模型)保存至文件中,并在后續(xù)對其進行加載,用于評估、預測或增量訓練,具體細節(jié)如下所示。?

pipeline.save("/tmp/saved_pipeline/my.ppl") #save
from zoo.automl.pipeline.time_sequence import load_ts_pipeline
pipeline = load_ts_pipeline("/tmp/saved_pipeline/my.ppl") #load
rs = pipeline.evaluate(test_df, metrics=["r_square"]) #evaluation
result_df = pipeline.predict(test_df) #inference
pipeline.fit(newtrain_df, epoch_num=5) #incremental training

如需查看更復雜的時間序列 AutoML 示例,可以參考?https://github.com/intel-analytics/analytics-zoo/blob/automl/apps/automl/nyc_taxi_dataset.ipynb?的用例,它使用了紐約市的歷史出租車乘客量預測未來需求(類似于 [2] 中的案例)。下圖使用 AutoML 展示了下一個時步的預計出租車乘客量。

圖二 ?預測下一個時步的紐約市出租車乘客量

有關(guān) Analytics Zoo 中 AutoML 和時間序列預測支持的更多詳情,請訪問?https://github.com/intel-analytics/analytics-zoo/tree/automl/pyzoo/zoo/automl

參考:

[1] Guokun Lai, Wei-Cheng Chang, Yiming Yang, Hanxiao Liu. “Modeling Long- and Short-Term Temporal Patterns with Deep Neural Networks” (link)
[2] Nikolay Laptev, Slawek Smyl, Santhosh Shanmugam. “Engineering Extreme Event Forecasting at Uber with Recurrent Neural Networks” (link)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容