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

时间:2015-08-06 10:32:08

标签: r neural-network pruning

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

2 个答案:

答案 0 :(得分:1)

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

您可以使用' 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足以逼近大多数函数。如果有任何输入变量具有非常低的重要性(或者甚至绝对没有在您的模型中发挥作用),则足够的训练量将使与该变量相关联的权重非常小(接近于零),以便不具有任何重要性对预测的影响。减少变量数量的唯一显着好处是预测的计算时间较短。

答案 1 :(得分:0)

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

他们建议使用“基于敏感性的修剪(SBP)”

一些处理它的库

NeuralSens

和具体功能

    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/

基本上是交叉验证