我使用mlp
库中的elm
和nnfor
函数来预测非平稳时间序列。两者在输入层和隐藏层中给出的节点数不同。我对它们如何选择每一层中的节点数很感兴趣,并且很高兴了解泛化错误会更改其在该函数中的工作方式。
答案 0 :(得分:2)
mlp
函数选择的隐藏节点数取决于hd.auto.type
参数的值:
为“ valid”,“ cv”和“ elm”参数值尝试的隐藏节点数范围为1到max(2, min(dim(X)[2] + 2, length(Y) - 2))
。这些隐藏的节点仅限于单个层。
“ cv”和“ valid”方法使用均方误差的最小值来查找隐藏节点的数量。
据我从source code中的auto.hd.elm
函数可以看出,“ elm”方法使用有效模型系数数量的中值来选择隐藏节点的数量。希望对您有意义!
elm
函数使用min(100 - 60*(type=="step" | type=="lm"),max(4, length(Y) - 2 - as.numeric(direct)*length(X[1,])))
来确定隐藏节点的数量。其中type
是用于输出层权重的估计,而direct
是存在直接的输入-输出连接。
输入节点的数量取决于季节和时滞。
泛化误差可以使用交叉验证来近似。需要明确的是,这种交叉验证必须与用于查找隐藏节点数量的任何验证分开进行。
nnfor软件包作者有一篇介绍性博客文章,可能值得检查:http://kourentzes.com/forecasting/2017/02/10/forecasting-time-series-with-neural-networks-in-r/