我们如何修剪 R 中的神经网络?

How can we prune the neural network in R?

我的模型中有 30 个自变量。我想根据变量的重要性修剪神经网络。我试过使用 RSNNS 包的 mlp 函数,但我不知道可以给 "pruneFunc" 和 "pruneFuncParams" ?
什么参数 有没有其他方法可以修剪神经网络?

mlp()(RSNNS 包)中的 "pruneFunc" 和 "pruneFuncParams" 参数用于 p运行e 隐藏层神经元的数量。我不认为你可以用它来减少你的输入变量。

您可以在您的网络上使用 'NeuralNetTools' 包来 运行 Garson 算法。此包中的函数 运行 适用于 RSNNS(以及其他包)创建的大多数神经网络对象。 Garson 算法将根据权重为您提供每个变量的重要性。然后您可以排除这些变量并重新训练您的网络。

有关 Garson 算法的更多详细信息,请参阅这些链接... https://beckmw.wordpress.com/2013/08/12/variable-importance-in-neural-networks/ https://beckmw.wordpress.com/tag/neural-network/

或者,您可以在开始训练神经网络之前尝试其他降维技术(如 PCA)。

您在评论中提到 "Reducing the variables and giving only the important variables to neural network gives better prediction"...但这并不准确...

如果训练充分,具有 2 个隐藏层的 MLP 可以逼近任何函数,通常具有 1 个隐藏层的 MLP 足以逼近大多数函数。如果有任何输入变量的重要性非常低(甚至在您的模型中完全没有作用),足够的训练量将使与该变量相关的权重非常小(接近于零),以免产生任何显着影响对你的预测的影响。减少变量数量的唯一显着好处是预测的计算时间更短。

正在阅读一篇名为“神经网络的输入变量选择:预测 U.S。商业周期的应用”的论文

他们推荐“基于灵敏度的修剪 (SBP)”

一些处理它的库

NueralSens

及具体功能

    set.fit <- nnet(frmla,data = (predict(traindataParam, trainingdata)),linear.output = T,size = best.network,maxit = 200)

    sens <- SensAnalysisMLP(set.fit, trData = (predict(traindataParam, trainingdata)))
    SensitivityPlots(sens)

同时查看他们的参考资料:SHAP https://www.r-bloggers.com/a-gentle-introduction-to-shap-values-in-r/https://www.r-bloggers.com/a-gentle-introduction-to-shap-values-in-r/

基本上就是交叉验证