数据集是天然气价格(查看文末了解数据获取方式),具有以下特征:
日期(从 1997 年到 2020 年)- 为 每天数据
以元计的天然气价格
相关视频:LSTM神经网络架构和工作原理及其在Python中的预测应用
读取数据并将日期作为索引处理
# 固定日期时间并设置为索引
dftet.index = pd.DatetimeIndex
# 用NaN来填补缺失的日期(以后再补)
dargt = f\_arget.reindex(ales, fill\_value=np.nan)
# 检查
print(d_tret.dtypes)
df_aget.head(10)
处理缺失的日期
# 数据归纳(使用 "向前填充"--根据之前的值进行填充)。
dfaet.fillna(method='ffill', inplace=True)
特征工程
因为我们正在使用深度学习,所以特征工程将是最小的。
One-hot 编码“is_weekend”和星期几
添加行的最小值和最大值(可选)
通过设置固定的上限(例如 30 倍中位数)修复异常高的值
# 在df_agg中修复任何非常高的值 - 归一化为中值
for col in co\_to\_fi_ies:
dgt\[col\] = fixnaes(dftget\[col\])
添加滞后
# 增加每周的滞后性
df\_tret = addag(d\_aget, tare\_arble='Price', step\_ak=7)
# 增加30天的滞后性
df\_get = ad\_ag(df\_ret, tagt\_able='Price', sep_bck=30)
# 合并后删除任何有NA值的列
d_gt.dropna(inplace=True)
print(dfget.shape)
tie\_nx = df\_art.index
归一化
归一化或最小-最大尺度(需要减小较宽的数值范围,以便 LSTM 收敛)。
# 标准化训练数据\[0, 1\]
sclr = prcsing.Maxcaer((,1))
准备训练数据集
时间步数 = 1
时间步数 = nsteout小时数(预测范围)
在这里,我们将数据集从 [samples, features] 转换为 [samples, steps, features] - 与算法 LSTM 一起使用的维度。下面的序列拆分使用“walk-forward”方法来创建训练数据集。
# 多变量多步骤编码器-解码器 lstm 示例
# 选择一个时间步骤的数量
# 维度变成\[样本数、步骤、特征\]
X, y = splices(datasformed, n\_ep\_in, n\_ep\_out)
# 分成训练/测试
et_ut = int(0.05*X.shpe\[0\])
X\_tain, X\_est, ytrain, y\_tst = X\[:-tetaont\], X\[-tes\_ont:\], y\[:-tstmunt\], y\[-es_unt:\]
训练模型
这利用了长期短期记忆算法。
# 实例化和训练模型
model = cre\_odel(n\_tps\_in, n\_tep\_out, n\_feures, lerig_rate=0.0001)
探索预测
%%time
#加载特定的模型
model = lod\_id\_del(
n_stepin,
n\_sep\_out,
X_tan.shape\[2\])
# 展示对一个样本的预测
testle_ix =
yat = mdel.predict(X\_tet\[est\_amle\_ix\].reshape((1,n\_sep_in, nfatues)),erbose=Tue)
# 计算这一个测试样本的均方根误差
rmse = math.sqrt
plot\_result(yhat\[0\], scaler, saved\_columns)
领取专属 10元无门槛券
私享最新 技术干货