原文链接:http://tecdat.cn/?p=16392
对于此示例,我将对R中的时间序列进行建模。我将最后24个观察值保留为测试集,并将使用其余的观察值来拟合神经网络。当前有两种类型的神经网络可用,多层感知器;和极限学习机。
代码语言:javascript复制# 拟合 多层感知器mlp.fit <- mlp(y.in)plot(mlp.fit)print(mlp.fit)
这是使MLP网络适合时间序列的基本命令。这将尝试自动指定自回归输入和时间序列的必要预处理。利用预先指定的参数,它训练了20个用于生成整体预测的网络和一个具有5个节点的隐藏层。print
是输出拟合网络的摘要:
MLP fit with 5 hidden nodes and 20 repetitions.Series modelled in differences: D1.Univariate lags: (1,3,4,6,7,8,9,10,12)Deterministic seasonal dummies included.Forecast combined using the median operator.MSE: 6.2011.
该函数选择了自回归滞后,并将虚拟变量用于季节性趋势。使用plot
显示网络的体系结构(图1)。
图1.输出 plot(mlp.fit).
浅红色输入代表用于编码季节性的二进制虚拟变量,而灰色输入则是自回归滞后项。要生成预测,您可以输入:
代码语言:javascript复制 forecast(mlp.fit,h=tst.n)
图2显示了整体预测,以及各个神经网络的预测。
图2. plot
MLP预测的输出。
您还可以选择隐藏节点的数量。
代码语言:javascript复制# 自动拟合 MLP hd.auto.type="valid"
这将评估1到10个隐藏节点,并选择验证集MSE上的最佳节点。也可以使用交叉验证。输出误差:
代码语言:javascript复制 MSEH.1 0.0083H.2 0.0066H.3 0.0065H.4 0.0066H.5 0.0071H.6 0.0074H.7 0.0061H.8 0.0076H.9 0.0083H.10 0.0076
ELM几乎以相同的方式工作。
代码语言:javascript复制# Fit ELMelm.fit <- elm(y.in)print(elm.fit)plot(elm.fit)
代码语言:javascript复制)
以下是模型摘要:
代码语言:javascript复制ELM fit with 100 hidden nodes and 20 repetitions.Series modelled in differences: D1.Univariate lags: (1,3,4,6,7,8,9,10,12)Deterministic seasonal dummies included.Forecast combined using the median operator.Output weight estimation using: lasso.MSE: 83.0044.
在图3的网络体系结构中只有用黑线连接到输出层的节点才有助于预测。其余的连接权重已缩小为零。
图3. ELM网络架构。
该程序包在R中实现了层次时间预测。可以通过以下方式进行操作:
代码语言:javascript复制forecastfunction=mlp.thief
因为对于这个简单的示例,我保留了一些测试集,所以我将预测与指数平滑进行比较:
METHOD | MAE |
---|---|
MLP (5 nodes) | 62.471 |
MLP (auto) | 48.234 |
ELM | 48.253 |
THieF-MLP | 45.906 |
ETS | 64.528 |
像MAPA这样的时间层次结构使您的预测更可靠,更准确。但是,使用神经网络会明显增加计算成本!
最受欢迎的见解
1.用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
2.Python中利用长短期记忆模型LSTM进行时间序列预测分析 – 预测电力消耗数据
3.python在Keras中使用LSTM解决序列问题
4.Python中用PyTorch机器学习分类预测银行客户流失模型
5.R语言多元Copula GARCH 模型时间序列预测
6.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
7.R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数
8.R语言估计时变VAR模型时间序列的实证研究分析案例
9.用广义加性模型GAM进行时间序列分析