5

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

4

2 回答 2

2

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/标签/神经网络/

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

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

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

于 2015-08-12T08:54:05.613 回答
0

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

他们推荐“基于敏感性的修剪(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-v ​​alues-in-r/https://www.r-bloggers.com/a-gentle -r中的shap-v​​alues简介/

基本上是交叉验证

于 2020-09-10T01:29:34.280 回答