云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

阿里云_企业邮箱怎样注册_哪家好

小七 141 0

用递归神经网络进行多变量时间序列预测

在数据库里试试这个笔记本时间序列预测是机器学习中的一个重要领域。由于时间序列数据的性质,很难建立精确的模型。我们可以用许多经典的神经网络方法来解决时间序列中的各种困难问题。在这篇文章中,我们将演示如何使用Keras的长短期记忆(LSTM)实现进行时间序列预测,MLFLow用于跟踪模型运行。什么是LSTM?LSTM是一种递归神经网络(RNN),它允许网络在给定的时间内从许多时间步保持长期依赖关系。RNN是为了达到这一效果而设计的,它使用了一种简单的反馈方法,在神经元中,数据的输出序列作为输入之一。然而,由于梯度消失问题,长期依赖性会使网络不可训练。LSTM正是为了解决这个问题而设计的。有时准确的时间序列预测取决于新旧数据的结合。我们必须有效地学习哪怕是需要注意的内容,接受数据可能有很长的历史可供学习。LSTMs将简单的DNN体系结构与聪明的机制结合起来,以了解哪些历史部分需要"记住",哪些部分应该"忘记"。LSTM对长序列数据模式的学习能力使其适合于时间序列预测。对于LSTM体系结构的理论基础,请参见这里(第4章):~graves/preprint.pdf选择正确的问题和正确的数据集时间序列的应用有无数种——从基于未来基金价格的投资组合到对电网的需求预测等等。为了展示LSTM的价值,我们首先需要有正确的问题,更重要的是,正确的数据集。比如说,我们想学习提前预测房子的湿度和温度,这样智能传感器就可以主动打开空调,或者你只想知道你未来的用电量,这样你就可以主动降低成本。历史传感器和温度数据应该足以了解两者之间的关系,而LSTM也有帮助,因为它不仅仅取决于最近的传感器值,更重要的是,更重要的是,可能是前一天同一时间的传感器值。为此,我们将使用有关低能耗建筑中电器能源使用的实验数据。实验我们为这个实验选择的数据集非常适合于建立家用电器能源使用的回归模型。利用ZigBee无线传感器网络对室内温度和湿度进行监测。每次间隔10分钟,持续约4.5个月。能量数据用m-bus电能表记录。最近的机场气象站(比利时基耶夫斯机场)的天气是从可靠预测(rp5.ru)的公共数据集下载的,并使用日期和时间列与实验数据集合并。数据集可从UCI机器学习库下载。我们将用这个来训练一个预测第二天家用电器消耗的能源的模型。数据建模在我们训练一个神经网络之前,我们需要以一种网络可以从过去的值序列中学习的方式来建模数据。具体地说,LSTM期望输入数据以特定的3D张量格式表示,该格式由输入特征的个数按时间步长划分。作为一种监督学习方法,LSTM需要特征和标签来学习。在时间序列预测的背景下,提供过去的值作为特征,未来的值作为标签是很重要的,这样LSTM可以学习如何预测未来。因此,我们将时间序列数据分解为一个称为"X"的2D特征数组,其中输入数据由成批指定时间步数的重叠滞后值组成。我们生成一个名为"y"的1D数组,它只包含我们试图为每一批输入特性预测的标签或未来值。输入数据还应包括"y"的滞后值,这样网络也可以从标签的过去值中学习。更多说明见下图:我们的数据集有10分钟的样本。在上图中,我们选择了length=3,这意味着我们在每个序列中有30分钟的数据(间隔10分钟)。根据这个逻辑,特征‘X’应该是值的张量[X(t),X(t+1),X(t+2)],[X(t+2),X(t+3),X(t+4)],[X(t+3),X(t+4),X(t+5)]…。等等。我们的目标变量'y'应该是[y(t+3)、y(t+4)、y(t+5)….y(t+10)],因为时间步数或长度等于3,所以我们将忽略值y(t)、y(t+1)、y(t+2)。此外,在图中,很明显,对于每个输入行,我们只预测出一个值,即y(t+n+1),然而,对于更实际的场景您可以选择预测未来的未来,即y(t+n+L),正如您将在下面的示例中看到的那样。kerasapi有一个名为TimeSeriesGenerator的内置类,可以生成大量重叠的时态数据。这个类接收以相等间隔收集的一系列数据点,以及时间序列参数,如步幅、历史长度等,以生成用于训练/验证的批处理。所以,假设我们的用例,我们希望学习从过去6天的数据中预测值,并预测未来某个时间的值,比如1天。在这种情况下,length等于864,这是6天内10分钟的时间步数(24x6x6)。同样,我们也希望从过去的湿度、温度、压力等数值中学习,这意味着对于每个标签,每个特征都有864个值。我们的数据集共有28个特征。生成时间序列时,生成器配置为每次返回由6天数据组成的批。为了使其更真实,我们选择预测未来1天的使用情况(与下一个10分钟的时间间隔相反),我们准备测试和训练数据集的方式是目标向量是一组值144个时间步(24x6x1)的未来。有关详细信息,请参阅笔记本,第2节:规范化和准备数据集。输入集的形状应为(samples、timesteps、input_dim)[https://keras.io/layers/returnal/]. 对于每一批,我们将拥有所有6天的数据,即864行。批大小决定渐变更新发生之前的采样数。有关调整参数的完整列表,请参见此处:https://keras.io/preprocessing/sequence/模特培训LSTM能够解决神经网络中的长期依赖性问题,使用一种称为时间反向传播(BPTT)的概念。如需了解更多关于BPTT的信息,请参阅:~jguo/docs/notes/bptt.pdf在训练LSTM网络之前,我们需要了解Keras中提供的几个关键参数,这些参数将决定网络的质量。Epochs:数据将被传递到神经网络的次数。每历元步数:训练历元被认为完成之前的批迭代次数。激活:描述使用哪个激活函数的层。优化器:Keras提供了内置的优化器。为了充分利用gpu的速度和性能,我们使用了LSTM的CUDNN实现。我们也选择了任意多的时代。这是因为我们希望确保数据经过尽可能多的迭代,以找到最适合的模型。至于单元的数量,我们有28个特性,所以我们从32个开始。经过几次迭代后,我们发现使用128可以得到不错的结果。对于选择时代的数量,选择一个高的数字是一个很好的方法,以避免不适合。为了避免过度拟合的问题,可以在kerasapi中使用内置回调;特别是早期调用。当监控量停止改善时,提前停止模型训练。在我们的例子中,我们使用损失作为监控量,当50个周期内没有1e-5的下降时,模型将停止训练。Keras有内置的正则化器(加权,dropout)来惩罚网络,以确保参数分布更平滑,因此网络不会太依赖单元之间传递的上下文。请参见下图了解网络中的层。为了将一层的输出发送到另一层,我们需要一个激活函数。在这种情况下,我们使用LeakyRelu,它是其前身整流器线性单元(简称Relu)的一个更好的变体。Keras提供了许多不同的优化器来减少损失,并在不同时期迭代更新权重。有关优化器的完整列表,请参见此处:https://keras.io/optimizers/。我们选择随机梯度下降的Adam版本。学习率是优化器的一个重要参数,它在很大程度上决定了模型的质量。你可以在这里了解更多关于学习率的信息。我们对0.001(默认值)、0.01、0.1等各种值进行了实验,发现0.00144在训练速度和最小损失方面给了我们最好的模型性能。您还可以使用LearningRateSchedular回调函数将学习速率调整到最佳值。我们使用MlFlow来跟踪和比较多个模型运行的结果。利用MLFlow进行模型评价和测井正如您所看到的,LSTMs的Keras实现需要很多超参数。为了找到最佳的模型拟合度,您将需要试验各种超参数,即单位、时代等。您还需要比较过去的模型运行情况,并测量模型随时间的变化和数据的变化。MLflow是一个很好的工具,它有一个易于使用的UI,它允许您执行上述操作和更多操作。在这里您可以看到使用MLFlow开发Keras和TensorFlow是多么容易,记录MLFlow的运行并随时间跟踪实验。数据科学家可以使用MLflow来跟踪各种模型度量和任何附加的可视化和工件,以帮助做出决策