R 使用带插入符号训练的神经网络及参数调整

R 使用带插入符号训练的神经网络及参数调整,r,neural-network,cross-validation,r-caret,R,Neural Network,Cross Validation,R Caret,所以我读过一篇论文,它使用神经网络来建立一个数据集的模型,这个数据集与我目前使用的数据集相似。我有160个描述符变量,我想为160个案例建模(回归建模)。我读的论文使用了以下参数:- “对于每一个分裂,为10个单独的列车试验褶皱中的每一个开发了一个模型。一个包含33个输入神经元和16个隐藏神经元的三层反向传播网络用于在线权重更新、0.25学习率和0.9动量。对于每个折叠,从总共50个不同的随机初始权重起始点进行学习,并允许网络在学习期间迭代,直到验证集的平均绝对误差(MAE)达到最小值。” 现在

所以我读过一篇论文,它使用神经网络来建立一个数据集的模型,这个数据集与我目前使用的数据集相似。我有160个描述符变量,我想为160个案例建模(回归建模)。我读的论文使用了以下参数:-

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

现在,他们使用了一个名为Emergent的专业软件,这是一个非常专业的神经网络模型软件。然而,正如我以前在R中所做的那样,我必须坚持下去。因此,我使用插入符号序列功能,对neuralnet软件包进行10次交叉折叠验证。我做了以下工作:-

cadets.nn <- train(RT..seconds.~., data = cadet, method = "neuralnet", algorithm = 'backprop', learningrate = 0.25, hidden = 3, trControl = ctrl, linout = TRUE)
你知道我做错了什么吗?当我使用nnet时,它可以工作,但我无法调整参数,使其与我试图模拟的论文中使用的参数相似

这是我在警告()中得到的50次:-

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

谢谢

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

由多个实际参数匹配的形式参数“隐藏”

嗯,


Max

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

必须非常仔细地阅读文档,才能理解
的以下段落: 如果在此处传递调整参数的值,将出现错误。

因此,首先,您必须意识到
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
参数传递隐藏层定义-根本不明显,因为这通常是为调整参数而保留的,而不是传递参数

因此,您可以按如下方式定义
隐藏的
层:

tune.grid.neuralnet <- expand.grid(
  layer1 = 10,
  layer2 = 10,
  layer3 = 10
)

warnings()
中有什么?'1:in eval(expr,envir,enclose):Fold01的模型拟合失败。Rep01:layer1=1,layer2=0,layer3=0在neuralnet中出错(form,data=data,hidden=nodes,…):形式参数“hidden”与多个实际参数匹配2:in data.frame(…,check.names=FALSE):行名称是从短变量中找到的,已被丢弃3:在eval(expr、envir、enclose)中:Fold01的模型拟合失败。Rep01:layer1=3、layer2=0、layer3=0在neuralnet中出错(表单、数据=数据、隐藏=节点……):形式参数“隐藏”由多个实际参数匹配“我得到了50次,所以我得到了,在这里,你用三个隐藏层训练神经网络,每个层由10个神经元组成,不是吗?是的。神经网络库只允许指定三个层
tune.grid.neuralnet <- expand.grid(
  layer1 = 10,
  layer2 = 10,
  layer3 = 10
)
  model.neuralnet.caret <- caret::train(
    formula.nps,
    data = training.set,
    method = "neuralnet",
    linear.output = TRUE, 
    tuneGrid = tune.grid.neuralnet, # cannot pass parameter hidden directly!!
    metric = "RMSE",
    trControl = trainControl(method = "none", seeds = seed)