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

很少有文章是这个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)

模型结构

模型的图像化显示如下:

python亚马逊运营工具_亚马逊开源的时间序列预测工具—DeepAR_第1张图片

DeepAR模型结构

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

下边来说一些不一样的地方

DeepAR与传统LSTM最不一样的地方,就是加这个似然函数,需要取估计参数。一般有两种似然函数形式:

1)真实数据,选择高斯分布,就是正态分布:

python亚马逊运营工具_亚马逊开源的时间序列预测工具—DeepAR_第2张图片

高斯分布计算方式

2)正技术数据,我也不知道是啥,选择负二项分布,看原文就知道了。

3)当然其他似然函数也可以用过里啊。

训练

python亚马逊运营工具_亚马逊开源的时间序列预测工具—DeepAR_第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')

https://www.jianshu.com/p/4cb550302963

你可能感兴趣的:(python亚马逊运营工具)