使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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