使用神经网络与插入符号列表并调整参数

时间:2014-02-09 17:08:58

标签: r neural-network cross-validation r-caret

所以我读了一篇论文,该论文使用神经网络建模出一个类似于我目前正在使用的数据集的数据集。我有160个描述符变量,我想模拟160个案例(回归建模)。我读过的论文使用了以下参数: -

'对于每次拆分,为10个单独的列车测试折叠中的每一个开发了一个模型。使用具有33个输入神经元和16个隐藏神经元的三层反向传播网,具有在线权重更新,0.25学习率和0.9动量。对于每个折叠,从总共50个不同的随机初始权重起始点进行学习,并且允许网络迭代学习时期,直到验证集的平均绝对误差(MAE)达到最小值。 '

现在他们使用了名为Emergent的专业软件来做到这一点,这是一个非常专业的神经元网络模型软件。但是,正如我之前在R中完成之前的模型一样,我必须坚持下去。因此,我使用插入符号列功能进行10次交叉折叠验证,使用神经网络包进行10次。我做了以下事情: -

cadets.nn <- train(RT..seconds.~., data = cadet, method = "neuralnet", algorithm = 'backprop', learningrate = 0.25, hidden = 3, trControl = ctrl, linout = TRUE)

我这样做是为了尝试将参数调整为与论文中使用的参数一致,但是我收到以下错误消息: -

  layer1 layer2 layer3 RMSE Rsquared RMSESD RsquaredSD
1      1      0      0  NaN      NaN     NA         NA
2      3      0      0  NaN      NaN     NA         NA
3      5      0      0  NaN      NaN     NA         NA
Error in train.default(x, y, weights = w, ...) : 
  final tuning parameters could not be determined
In addition: There were 50 or more warnings (use warnings() to see the first 50)

你知道我做错了什么吗?当我做nnet时它起作用,但是我不能调整参数,使其类似于我试图模仿的论文中使用的参数。

这就是我在警告()中得到的五十次: -

1: In eval(expr, envir, enclos) :
  model fit failed for Fold01.Rep01: layer1=1, layer2=0, layer3=0 Error in neuralnet(form, data = data, hidden = nodes, ...) : 
  formal argument "hidden" matched by multiple actual arguments

2: In data.frame(..., check.names = FALSE) :
  row names were found from a short variable and have been discarded
3: In eval(expr, envir, enclos) :
  model fit failed for Fold01.Rep01: layer1=3, layer2=0, layer3=0 Error in neuralnet(form, data = data, hidden = nodes, ...) : 
  formal argument "hidden" matched by multiple actual arguments

4: In data.frame(..., check.names = FALSE) :
  row names were found from a short variable and have been discarded
5: In eval(expr, envir, enclos) :
  model fit failed for Fold01.Rep01: layer1=5, layer2=0, layer3=0 Error in neuralnet(form, data = data, hidden = nodes, ...) : 
  formal argument "hidden" matched by multiple actual arguments

谢谢!

2 个答案:

答案 0 :(得分:4)

train为您设置hidden(基于layer - layer3给出的值。您试图将该参数指定两次,因此:

  

形式参数“hidden”与多个实际参数匹配

HTH,

最高

答案 1 :(得分:1)

我认为对于初学者来说,层规范不能直接传递到train函数中一点也不明显。

一个人必须非常仔细地阅读文档,以了解...的以下内容: Errors will occur if values for tuning parameters are passed here.

因此,首先,您必须意识到hidden的{​​{1}}参数被定义为调整参数,因此可能直接传递给火车函数(通过neuralnet::neuralnet)。您可以通过以下方式找到调整参数的定义:

...

相反,您必须通过getModelInfo("neuralnet")$neuralnet$parameters parameter class label 1 layer1 numeric #Hidden Units in Layer 1 2 layer2 numeric #Hidden Units in Layer 2 3 layer3 numeric #Hidden Units in Layer 3 参数传递隐藏层定义-根本不明显,因为通常保留该参数用于调整参数,而不传递参数。

因此,您可以如下定义tuneGrid层:

hidden

,然后将其传递给tune.grid.neuralnet <- expand.grid( layer1 = 10, layer2 = 10, layer3 = 10 ) 函数调用:

caret::train
相关问题