【问题标题】:How can we prune the neural network in R?我们如何修剪 R 中的神经网络?
【发布时间】:2015-10-29 11:12:05
【问题描述】:

我的模型中有 30 个自变量。我想根据变量的重要性修剪神经网络。我曾尝试使用 RSNNS 包的 mlp 函数,但我不知道可以为“pruneFunc”和“pruneFuncParams”提供哪些参数?
是否存在其他修剪神经网络的方法?

【问题讨论】:

  • 基本上,我想减少可以馈送到神经网络的输入节点的数量。减少变量并仅将重要变量提供给神经网络可以提供更好的预测。

标签: r neural-network pruning


【解决方案1】:

mlp()(RSNNS 包)中的“pruneFunc”和“pruneFuncParams”参数用于修剪隐藏层神经元的数量。我认为您不能使用它来减少输入变量。

您可以使用“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)。

您在评论中提到“减少变量并仅将重要变量提供给神经网络可以提供更好的预测”......但这并不准确......

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

【讨论】:

    【解决方案2】:

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

    他们推荐“基于敏感性的修剪 (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/

    基本上是交叉验证

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2021-06-16
      • 1970-01-01
      • 2019-12-03
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      相关资源
      最近更新 更多