时间序列预测:神经网络 (nnetar) 与指数平滑 (ets)

机器算法验证 r 时间序列 神经网络 预测 指数平滑
2022-03-13 23:53:27

进行预测时,为什么R 中的函数(使用神经网络)不能计算正确的结果,而(使用指数平滑)呢?x1=1,x2=2,,x14=14nnetar()ets()

library(forecast)
df <- (1:14)
fit<-nnetar(df)

fc<-forecast(fit,h=10)

结果: 14.75729410 15.37348413 15.85274344 16.21147877 16.47188350 16.65653700 16.78524210 16.87385438 16.93433975 16.97538111

fit2 <- ets(df)
fc <- forecast(fit2,h=10)

结果:15 16 17 18 19 20 21 22 23 24

哪个是适合时间序列预测的神经元网络/函数?请考虑上面的例子只是一个简化的数据例子。

2个回答

哪个是适合时间序列预测的神经网络/函数?请考虑,上述示例只是一个简化的数据示例。

好吧,这完全取决于您的数据。在您的示例数据中,您拥有

  • 一个小的单变量时间序列(只有 14 个观察值)
  • 线性趋势
  • 没有白噪声
  • 没有季节性
  • 无循环
  • 非线性

nnetar()

神经网络通常非常精通数据/数据饥渴。这意味着您需要大量数据来实施准确的预测。14 次观察绝对不够,您需要十或十万。一般来说,我不建议使用神经网络来预测单变量时间序列。神经网络的一个好处是它们可以捕获非线性,但您的数据不会表现出任何非线性。注意nnetar()使用前馈神经网络;在最近的时间序列预测中,许多研究人员使用循环神经网络而不是前馈神经网络。

您也可以阅读此讨论据我所知nnetar()是基于这里的讨论

如果您打印fit,您将看到模型。它是 20 个不同神经网络的平均值,因此不是确定性的。

Series: df 
Model:  NNAR(1,1) 
Call:   nnetar(y = df)

Average of 20 networks, each of which is
a 1-1-1 network with 4 weights
options were - linear output units 

sigma^2 estimated as 0.003636

ets()

此函数使用指数平滑。指数平滑模型需要较少的参数。因此,它们在您的小型数据集上表现更好。

仔细研究简单指数平滑方程可能会有所帮助:

s0=x0

st=αxt+(1α)st1

在你的情况下是0。s0x0

如果您打印fit2,您会看到信息标准都等于负无穷大,这表明没有比您选择的模型更好的模型。

ETS(A,A,N) 

Call:
 ets(y = df) 

  Smoothing parameters:
    alpha = 0.5445 
    beta  = 0.1009 

  Initial states:
    l = 0 
    b = 1 

  sigma:  0

 AIC AICc  BIC 
-Inf -Inf -Inf 

这是因为数据生成过程是一个确定性模型。这是 ARIMA(0,1,1) 过程的特例,也称为指数平滑。因此,指数平滑模型会生成符合您预期的预测。自回归神经网络不模拟这种类型的过程。