美文网首页
亚马逊开源的时间序列预测工具—DeepAR

亚马逊开源的时间序列预测工具—DeepAR

作者: 不分享的知识毫无意义 | 来源:发表于2020-03-21 09:42 被阅读0次

    很少有文章是这个AR是啥意思,笔者推测是自相关的意思,毕竟RNN是自回归神经网络。
    笔者比较懒,一些符号将就着看吧。

    1.原理

    • 符号表示
      符号表示十分简洁:
      Zi,t表示序列i再第t个时间点的数据,Zi,t0就是要预测数据的开始区间,要预测的数据集合定义为Zi:t0:T。这个是LSTM算出来的。
      Xi,1:T表示再整个预测期间内都知道的协变量,具体就是你输入的原始数据。
      DeepAR求的是概率分布:P(Zi:t0:T|Zi:t0-1,Xi,1:T)
    • 模型结构
      模型的图像化显示如下:


      DeepAR模型结构

      左右都是LSTM结构,大家想象一下LSTM的原理,左右用的数据不一样,一个用的是训练数据,一个用的是预测数据。

    • 下边来说一些不一样的地方
      DeepAR与传统LSTM最不一样的地方,就是加这个似然函数,需要取估计参数。一般有两种似然函数形式:
      1)真实数据,选择高斯分布,就是正态分布:


      高斯分布计算方式

      2)正技术数据,我也不知道是啥,选择负二项分布,看原文就知道了。
      3)当然其他似然函数也可以用过里啊。

    • 训练


      参数优化形式

      以上就是deepar的基本原理,本质就是lstm+softplus,具体怎么输出的还在研究,通过研究亚马逊开源的包吧。不过看别人写的文章大概率是那个softplus中的u就是均值。

    2.模仿tensorflow实现

    这个参考自“虚胖一场”的https://www.jianshu.com/p/e9533f5799f1,特此鸣谢。
    用这个是为了学学tensorflow2.0。
    首先更新一下tensorflow

    #卸载
    pip install --no-cache-dir tensorflow==x.xx
    #我安装2.0
    pip install tensorflow==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    #遇到问题问万能的百度
    #然后重新打开你的编辑器导入tensorflow
    tensorflow.__version__
    

    接下来,说一下导入包的作用:

    • tensorflow_probability
      这个包是概率编程工具,如果对概率相关的计算有诉求,可以去看一下,他的官网介绍:tensorflow_probability
    • tensorflow2.0自己编写类
      和torch很像了,显式的继承自tf.keras.models.Model,然后要在初始化函数定义各个层,其中需要初始化:super().init(),然后再定义一下前向传播,这个自己定义的层基本就好了。
    • tfp.distributions.Normal()
      这个定义了一个正态分布,可以根据loc和scale参数生成各种正态分布函数。
    • tf.GradientTape()
      tensorflow2.0的新特性,只要计算梯度一般都用这个函数。

    3.gluonts实现

    有了现成的包,一般不用去写了,直接导包好了。
    首先来安装:pip install太慢了,用国内的镜像:
    pip install gluonts -i https://pypi.tuna.tsinghua.edu.cn/simple
    安装mxnet
    pip install -i https://pypi.doubanio.com/simple/ mxnet-cu100
    接下来就该实现了:

    from gluonts.model import deepar
    from gluonts.dataset import common
    from gluonts.dataset.util import to_pandas
    from gluonts.model.predictor import Predictor
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.read_csv('/Users/elliot/Desktop/11.csv',header=0,sep=',')
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    df.set_index(['timestamp'],inplace=True)
    data = common.ListDataset([{'start': df.index[0],
                               'target': df.value[:"2015-04-23 00:00:00"]}], freq='H')#这个数据格式是固定的
    estimator = deepar.DeepAREstimator(freq='H', prediction_length=24)
    predictor = estimator.train(training_data=data)
    for train_entry, predict_result in zip(data, predictor.predict(data)):
        to_pandas(train_entry)[-60:].plot(linewidth=2)
        predict_result.plot(color='g', prediction_intervals=[50.0, 90.0])
    plt.grid(which='both')
    plt.show()
    ##输出预测结果
    prediction = next(predictor.predict(data))
    print(prediction.mean)
    prediction.plot(output_file='graph.png')
    

    相关文章

      网友评论

          本文标题:亚马逊开源的时间序列预测工具—DeepAR

          本文链接:https://www.haomeiwen.com/subject/dhdkyhtx.html