使用Ray和Analytics Zoo将自动机器学习(AutoML)应用于时间序列预测

构建用于时间序列预测的机器学习应用程序可能是一个费力且知识密集的过程。为了提供易于使用的时间序列预测工具包,我们将自动机器学习(AutoML)应用于时间序列预测。本文将介绍如何将可扩展的自动化机器学习用于时序预测。

时间序列简单来讲是指一系列在时间轴上有序的数据,而时序预测是根据过去时间点的数值来预测将来时间点上的数值。现实中,时间序列预测除了在电信运营商中的网络质量分析、面向数据中心运营的日志分析、面向高价值设备的预测性维护等多有应用之外,还可用作异常检测的第一步,以帮助在实际值偏离预测值过多时触发警报(请参见此处的示例)。

传统的时序预测方法通常使用描述性的(统计)模型,来根据过去的数据对未来进行预测。这类方法通常需要对底层分布做一定的假设,并需要将时间序列分解为多个部分,如周期、趋势、噪声等。而新的机器学习方法对数据的假设更少、更灵活,比如神经网络模型——它们通常将时间序列预测视作序列建模问题,最近已成功应用于时间序列分析相关的问题(如参考 [1] 和 [2] 所示)。

然而,为时间序列预测构建机器学习应用是一项费力且对专业知识要求较高的工作。为提供易于使用的时间序列预测工具套件,我们将自动化机器学习 (AutoML) 应用于时间序列预测,并对特征生成、模型选择参数调优等流程进行了自动化。该工具套件基于 Ray*(面向高级 AI 应用的开源分布式框架,由 UC Berkeley RISELab 提供)搭建,是 Analytic Zoo——由英特尔提供的统一数据分析和 AI 开源平台的一部分。

Ray 和 RayOnSpark                  

Ray 提供了一种通用的集群计算框架,可满足新兴 AI 技术对系统性能的苛刻要求。例如,Tune* 是一个基于 Ray 构建的分布式可扩展参数优化库,支持用户使用高效搜索算法在大型集群上轻松运行许多实验。

Analytics Zoo 近期提供了对 RayOnSpark的支持,允许用户基于 Ray 构建新的 AI 应用,并可以在现有大数据集群中直接运行,进而将其无缝集成到大数据处理和分析流水线中。我们将在后文介绍如何利用 Ray TuneRayOnSpark 实施可扩展 的AutoML 框架和自动时间序列预测

Analytics Zoo 中的 AutoML 框架

下图描述了 Analytics Zoo 中的 AutoML 框架架构。图一  Analytics Zoo 中的 AutoML 框架架构 

AutoML 框架在特征工程和建模的组件中使用 Ray Tune 进行参数搜索(运行在 RayOnSpark 上)。在特征工程部分,搜索引擎从各种特征生成工具(如 featuretools)自动生成的特征集中选择最佳特征子集;在建模部分,搜索引擎可搜索各种参数,如每层的节点数量、学习率等。我们使用流行的深度学习框架(如 Tensorflow 和 Keras)来构建和训练模型,在必要时我们会将 Apache Spark* 和 Ray 用于分布式执行。

AutoML 框架目前包括四个基本组件,即 FeatureTransformer、Model、SearchEnginePipeline。

  • FeatureTransformer 定义了特征工程流程,其通常包括一系列操作,如特征生成、特征缩放和特征选择
  • Model 定义了模型(如神经网络)和使用的优化算法(如 SGD、Adam 等)。Model 还可能包括模型/算法选择。
  • SearchEngine 负责搜索 FeatureTransformer 和 Model 的最佳参数组合,控制实际的模型训练过程。
  • Pipeline 是一个集成了 FeatureTransformer 和 Model 的端到端的数据分析流水线。Pipeline 可轻松保存到文件中,方便后续加载重新使用

AutoML 框架的一般训练工作流程如下所示: 

  1. 首先实例化FeatureTransformer 和 Model,SearchEngine 随后进行实例化,并由 FeatureTransformer 和 Model及一些搜索预设(指定参数搜索空间、奖励指标等)进行配置。
  2. SearchEngine 运行搜索程序。每次运行将生成多个试验,并使用 Ray Tune 将这些试验在集群中分布式运行。每个试验使用不同的参数组合进行特征工程和模型训练流程,并返回目标指标。
  3. 在所有试验完成后,可根据目标指标检索出一组最佳的参数,并得到训练好的模型。它们将用于创建最终的 FeatureTransformer 和 Model,并用于构成 Pipeline。Pipeline 可被保存至文件中,以便通过后续加载用于推理和/或增量训练。

时间序列预测训练 TimeSequencePredictor

在训练 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)

  • TimeSequencePredictor 的输入数据 (train_df) 是包含一系列记录的 (Pandas*) Dataframe,每条记录包含一个时间戳 (dt_col) 及与时间戳关联的数据点数值 (target_col),每条记录还可包含额外的输入特征列表 (extra_feature_col);TimeSequencePredictor 训练完成之后得到 TimeSequencePipeline,用于预测未来时步的相应 target_col。
  • recipe 参数包含 TimeSequencePredictor 所需的参数,用于在训练时指定搜索空间、停止条件和样本数量(即搜索空间中生成的样本数量)。目前可用的 recipe 包括 SmokeRecipe、RandomRecipe、GridRandomRecipe 和 BayesRecipe。

可以将训练结束时获得的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)

Analytics Zoo
Analytics Zoo

Analytics Zoo是一个统一的大数据分析+AI平台,它无缝地将Spark、TensorFlow、Keras和BigDL程序集成到一个整合的流水线中,可以透明地扩展到大型Apache Hadoop/Spark集群,用于分布式训练或预测,方便用户构建深度学习端到端的应用。通过该专栏希望和大家一起探讨AI在实际生活中各个领域的创新。

工程时间序列预测Analytics ZooRayAutoML
52
相关数据
英特尔机构

英特尔(NASDAQ: INTC)是全球半导体行业的引领者,以计算和通信技术奠定全球创新基石,塑造以数据为中心的未来。我们通过精尖制造的专长,帮助保护、驱动和连接数十亿设备以及智能互联世界的基础设施 —— 从云、网络到边缘设备以及它们之间的一切,并帮助解决世界上最艰巨的问题和挑战。

http://www.intel.cn/
相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

数据分析技术

数据分析是一类统计方法,其主要特点是多维性和描述性。有些几何方法有助于揭示不同的数据之间存在的关系,并绘制出统计信息图,以更简洁的解释这些数据中包含的主要信息。其他一些用于收集数据,以便弄清哪些是同质的,从而更好地了解数据。 数据分析可以处理大量数据,并确定这些数据最有用的部分。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

超参数优化技术

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

异常检测技术

在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。 异常也被称为离群值、新奇、噪声、偏差和例外。

Apache Spark技术

Apache Spark是一款快速、灵活且对开发者友好的工具,也是大型SQL、批处理、流处理和机器学习的领先平台。它是一个围绕速度、易用性和复杂分析构建的大数据处理框架,提供了一个全面、统一的框架用于管理各种不同性质(文本数据、图表数据等)数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

特征工程技术

特征工程是利用数据所在领域的相关知识来构建特征,使得机器学习算法发挥其最佳的过程。它是机器学习中的一个基本应用,实现难度大且代价高。采用自动特征工程方法可以省去采用人工特征工程的需求。Andrew Ng 说“挖掘特征是困难、费时且需要专业知识的事,应用机器学习其实基本上是在做特征工程。”

特征选择技术

在机器学习和统计学中,特征选择(英语:feature selection)也被称为变量选择、属性选择或变量子集选择。 它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。

模型选择技术

模型选择是从给定数据的一组候选模型中选择统计模型的任务。对于具有类似预测或解释力的候选模型,最简单的模型最有可能是最佳选择(奥卡姆剃刀)。

时间序列预测技术

时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析,推测出事物的发展趋势;另一方面充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测。

自动化机器学习技术

机器学习最近在许多应用领域取得了长足的进步,这促成了对机器学习系统的不断增长的需求,并希望机器学习系统可以被新手快速地熟悉并使用。相应地,越来越多的商业企业推出产品旨在满足这种需求。这些服务需要解决的核心问题是:在给定数据集上使用哪种机器学习算法、是否以及如何预处理其特征以及如何设置所有超参数。这即是自动化学习(AutoML)企图解决的问题。

推荐文章
请问作者: result_df = pipeline.predict(test_df)所作出的时间序列预测长度范围还是和test_df给定长度一样,如果要根据这个预测将来“看不见”的数据,应该用什么函数?在github的样例和文档中都没有找到?
比如说,用已经训练好的模型和当前已知的给定长度数据,预测未来10步的“不可见”数据,应该调用什么函数,参数怎么设置,请给出示范例子代码。