使用caret包中的mlp方法设置多隐藏层神经网络的方法?

caret包中的mlp方法调用了RSNNS包中的mlp函数。在RSNNS包中,我可以通过设置size参数来设置任意数量的隐藏层,例如:

data(iris)#打乱数据集顺序iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]irisValues <- iris[,1:4]irisTargets <- decodeClassLabels(iris[,5])#irisTargets <- decodeClassLabels(iris[,5], valTrue=0.9, valFalse=0.1)iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)iris <- normTrainingAndTestSet(iris)model <- mlp(iris$inputsTrain, iris$targetsTrain, size=c(5,7), learnFuncParams=c(0.1),              maxit=50, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)

将设置一个具有5个和7个节点的两个隐藏层的神经网络。我想使用caret包,因为它具有进行参数/模型搜索的功能,以及在集群上进行并行实现的功能。在caret中,当我查找该方法时,它只能用一个参数size进行调整,例如:

data(iris)mlpGrid <- data.frame(.size=3)model2<-caret::train(Species~. , iris, method='mlp', tuneGrid=mlpGrid)

设置了一个具有3个节点的单隐藏层的神经网络。

我尝试向mlpGrid添加其他列等,但caret似乎不允许添加第二个(或更多)隐藏层。


回答:

你应该使用caret的”mlpML“方法而不是”mlp”。它确实使用了RSNNS中的mlp函数,但你可以单独定义每个隐藏层的neurons数量。例如,以下代码应该可以完成工作。你定义自定义的网格,定义你的层,每个层(123)以及每层的神经元数量。

mlp_grid = expand.grid(layer1 = 10,                       layer2 = 10,                       layer3 = 10)mlp_fit = caret::train(x = train_x,                 y = train_y,                 method = "mlpML",                 preProc =  c('center', 'scale', 'knnImpute', 'pca'),                trControl = trainControl(method = "cv", verboseIter = TRUE, returnData = FALSE),                tuneGrid = mlp_grid)

由于verboseIter=TRUE,它显示这些值确实被应用了

+ Fold01: layer1=10, layer2=10, layer3=10 + Fold02: layer1=10, layer2=10, layer3=10 + Fold03: layer1=10, layer2=10, layer3=10...

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注