在神经网络和插入符号(R)中设置隐藏的层和神经元

时间:2020-06-04 16:14:25

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

我想使用软件包neuralnetcaret对神经网络进行交叉验证。

可以从this post复制数据df

运行neuralnet()函数时,有一个名为hidden的参数,您可以在其中设置隐藏的层和神经元。假设我想要2个分别具有3和2个神经元的隐藏层。它将被写为hidden = c(3, 2)

但是,由于我想对其进行交叉验证,因此我决定使用出色的caret软件包。但是当使用函数train()时,我不知道如何设置层数和神经元。

有人知道我可以在哪里添加这些数字吗?

这是我运行的代码:

nn <- caret::train(DC1 ~ ., data=df, 
                   method = "neuralnet", 
                   #tuneGrid = tune.grid.neuralnet,
                   metric = "RMSE",
                   trControl = trainControl (
                     method = "cv", number = 10,
                     verboseIter = TRUE
))

顺便说一下,我在前面的代码中收到了一些警告:

predictions failed for Fold01: layer1=3, layer2=0, layer3=0 Error in cbind(1, pred) %*% weights[[num_hidden_layers + 1]] : 
  requires numeric/complex matrix/vector arguments

关于如何解决它的想法?

1 个答案:

答案 0 :(得分:1)

在尖号中使用神经网络模型以指定三个受支持层中每个层中的隐藏单位数时,可以使用参数layer1layer2layer3。我通过检查source来发现的。

library(caret)

grid <-  expand.grid(layer1 = c(32, 16),
                     layer2 = c(32, 16),
                     layer3 = 8)

BostonHousing数据的用例:

library(mlbench)

data(BostonHousing)

仅需为示例选择数字列即可使它变得简单:

BostonHousing[,sapply(BostonHousing, is.numeric)] -> df

nn <- train(medv ~ ., 
            data = df, 
            method = "neuralnet", 
            tuneGrid = grid,
            metric = "RMSE",
            preProc = c("center", "scale", "nzv"), #good idea to do this with neural nets - your error is due to non scaled data
            trControl = trainControl(
              method = "cv",
              number = 5,
              verboseIter = TRUE)
            )

零件

preProc = c("center", "scale", "nzv")

对于算法收敛至关重要,神经网络不喜欢未缩放的特征

它超级慢。

nn
#output
Neural Network 

506 samples
 12 predictor

Pre-processing: centered (12), scaled (12) 
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 405, 404, 404, 405, 406 
Resampling results across tuning parameters:

  layer1  layer2  RMSE      Rsquared   MAE     
  16      16           NaN        NaN       NaN
  16      32      4.177368  0.8113711  2.978918
  32      16      3.978955  0.8275479  2.822114
  32      32      3.923646  0.8266605  2.783526

Tuning parameter 'layer3' was held constant at a value of 8
RMSE was used to select the optimal model using the smallest value.
The final values used for the model were layer1 = 32, layer2 = 32 and layer3 = 8.