目录
头文件
1、定义数据集
2、构建简单前馈网络(MLP)进行预测
3、训练完成之后对测试数据预测进行评估
4、对结果进行画图展示
5、训练代码
import mxnet as mx
from mxnet import gluon
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import json
from gluonts.dataset.common import ListDataset
定义一个样本数量为10,每个样本有100个时间序列的数据集,数据集预测的长度是后24个数值
N = 10 # number of time series
T = 100 # number of timesteps
prediction_length = 24
freq = "1H"
custom_dataset = np.random.normal(size=(N, T))
start = pd.Timestamp("01-01-2019", freq=freq) # can be different for each time series
注释:start表示这个时间序列开始的时间,freq表示时间按照这个时间长度进行不断累加(相当于等差数列)
这里构建输入为(100-24),两层隐藏层(40, 40),输出层为24
def creat_SFFEstimator():
from gluonts.model.simple_feedforward import SimpleFeedForwardEstimator
from gluonts.trainer import Trainer
estimator = SimpleFeedForwardEstimator(
num_hidden_dimensions=[40, 40],
prediction_length=prediction_length,
context_length=100,
freq=freq,
trainer=Trainer(ctx="cpu",
epochs=5,
learning_rate=1e-3,
num_batches_per_epoch=1
),
)
# 使用构建的Estimator(可自定义),在训练集上训练
predictor = estimator.train(train_ds)
return predictor
def evaluation(predictor):
from gluonts.evaluation.backtest import make_evaluation_predictions
from gluonts.evaluation import Evaluator
forecast_it, ts_it = make_evaluation_predictions(
dataset=test_ds, # test dataset
predictor=predictor, # predictor
num_samples=10, # number of sample paths we want for evaluation
)
forecasts = list(forecast_it)
tss = list(ts_it)
ts_entry = tss[0]
forecast_entry = forecasts[0]
evaluator = Evaluator(quantiles=[0.1, 0.5, 0.9])
agg_metrics, item_metrics = evaluator(iter(tss), iter(forecasts), num_series=len(test_ds))
print (agg_metrics)
return forecast_entry, ts_entry
def plot_prob_forecasts(forecast_entry, ts_entry):
plot_length = 48
prediction_intervals = (50.0, 90.0)
legend = ["observations", "median prediction"] + [f"{k}% prediction interval" for k in prediction_intervals][::-1]
fig, ax = plt.subplots(1, 1, figsize=(10, 7))
ts_entry[-plot_length:].plot(ax=ax) # plot the time series
forecast_entry.plot(prediction_intervals=prediction_intervals, color='g')
plt.grid(which="both")
plt.legend(legend, loc="upper left")
plt.show()
def unconstom_train():
# 创建
predictor = creat_SFFEstimator()
# 评估、预测
forecast_entry, ts_entry = evaluation(predictor)
# 展示
plot_prob_forecasts(forecast_entry, ts_entry)
unconstom_train()
实验结果