nnfor 库如何选择 elm 和 mlp 网络中每一层的节点数?

How does nnfor library choose number of nodes in each layer in elm and mlp networks?

我使用 nnfor 库中的 mlpelm 函数来预测非平稳时间序列。它们都在输入层和隐藏层中提供不同数量的节点。我对他们如何选择每一层中的节点数量很感兴趣,如果能理解泛化错误改变它在该函数中的工作方式会很棒。

mlp函数选择的隐藏节点数取决于hd.auto.type参数的值:

  • "set" 修复了 hd=5。
  • "valid" 使用 20% 的验证集(随机)抽样找到 隐藏节点的最佳数量。
  • "cv" 使用 5 折交叉验证。
  • "elm" 使用 ELM 估计隐藏节点的数量(实验)。

"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 包的作者有一篇介绍性的博客 post,可能值得一读:http://kourentzes.com/forecasting/2017/02/10/forecasting-time-series-with-neural-networks-in-r/