赞
踩
摘要:Analytics Zoo 近期提供了对 RayOnSpark的支持,允许用户基于 Ray 构建新的 AI 应用,并可以在现有大数据集群中直接运行,进而将其无缝集成到大数据处理和分析流水线中。本文主要介绍如何利用 Ray Tune 和 RayOnSpark 实施可扩展 的AutoML 框架和自动时间序列预测。
时间序列简单来讲是指一系列在时间轴上有序的数据,而时序预测是根据过去时间点的数值来预测将来时间点上的数值。现实中,时间序列预测除了在电信运营商中的网络质量分析、面向数据中心运营的日志分析、面向高价值设备的预测性维护等多有应用之外,还可用作异常检测的第一步,以帮助在实际值偏离预测值过多时触发警报(请参见此处的示例)。
传统的时序预测方法通常使用描述性的(统计)模型,来根据过去的数据对未来进行预测。这类方法通常需要对底层分布做一定的假设,并需要将时间序列分解为多个部分,如周期、趋势、噪声等。而新的机器学习方法对数据的假设更少、更灵活,比如神经网络模型——它们通常将时间序列预测视作序列建模问题,最近已成功应用于时间序列分析相关的问题(如参考 [1] 和 [2] 所示)。
然而,为时间序列预测构建机器学习应用是一项费力且对专业知识要求较高的工作。为提供易于使用的时间序列预测工具套件,我们将自动化机器学习 (AutoML) 应用于时间序列预测,并对特征生成、模型选择和超参数调优等流程进行了自动化。该工具套件基于 Ray*(面向高级 AI 应用的开源分布式框架,由 UC Berkeley RISELab 提供)搭建,是 Analytic Zoo——由英特尔提供的统一数据分析和 AI 开源平台的一部分。
Ray 提供了一种通用的集群计算框架,可满足新兴 AI 技术对系统性能的苛刻要求。例如,Ray Tune* 是一个基于 Ray 构建的分布式可扩展超参数优化库,支持用户使用高效搜索算法在大型集群上轻松运行许多实验。
Analytics Zoo 近期提供了对 RayOnSpark的支持,允许用户基于 Ray 构建新的 AI 应用,并可以在现有大数据集群中直接运行,进而将其无缝集成到大数据处理和分析流水线中。我们将在后文介绍如何利用 Ray Tune 和 RayOnSpark 实施可扩展 的AutoML 框架和自动时间序列预测。
下图描述了 Analytics Zoo 中的 AutoML 框架架构。
图一 Analytics Zoo 中的 AutoML 框架架构
AutoML 框架在特征工程和建模的组件中使用 Ray Tune 进行超参数搜索(运行在 RayOnSpark 上)。在特征工程部分,搜索引擎从各种特征生成工具(如 featuretools)自动生成的特征集中选择最佳特征子集;在建模部分,搜索引擎可搜索各种超参数,如每层的节点数量、学习率等。我们使用流行的深度学习框架(如 Tensorflow 和 Keras)来构建和训练模型,在必要时我们会将 Apache Spark* 和 Ray 用于分布式执行。
AutoML 框架目前包括四个基本组件,即 FeatureTransformer、Model、SearchEngine 和 Pipeline。
AutoML 框架的一般训练工作流程如下所示:
在训练 TimeSequencePredictor 之前,需要先初始化 RayOnSpark(在集群上使用 Spark 本地模式或 YARN 模式),训练结束后可以停止 RayOnSpark。详情请参阅 RayOnSpark 博文。
在成功初始化 RayOnSpark 后,可以训练时间序列预测流水线,具体细节如以下示例所示。首先用必要的参数初始化一个 TimeSequencePredictor 对象,然后调用 TimeSequencePredictor.fit,以分布式的方式对历史数据自动地进行机器学习训练,在训练结束后得到一个 TimeSequencePipeline 对象。
> from zoo.automl.regression.time_sequence_predictor import imeSequencePredictor
> tsp = 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)
可以将训练结束时获得的TimeSequencePipeline(已包含最佳超参数配置和AutoML 框架返回的训练好的模型)保存至文件中,并在后续对其进行加载,用于评估、预测或增量训练,具体细节如下所示。
> 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 展示了下一个时步的预计出租车乘客量。
图二 预测下一个时步的纽约市出租车乘客量
有关 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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。