使用 caret 和 neuralnet 包调整具有两个输出变量的神经网络时的差异

Differences when tuning neural network with two output variables using caret and neuralnet packages

我正在使用插入符包和 'neuralnet' 模型,以便根据包含多个由 PCA 转换的预测变量的数据集找到神经网络的最佳调整参数。该数据集还包含两个输出数值变量,因此我想根据预测变量对这两个变量进行建模。因此,我正在执行回归。

使用包'neuralnet'时,我得到了想要的输出:一个输出层由两个神经元组成的网络,对应我要建模的两个输出变量,如下图所示代码。

library(neuralnet)
neuralnet.network <- neuralnet(x + y ~ PC1 + PC2, train.pca.groundTruth, hidden=2, rep=5, algorithm = "rprop+", linear.output=T)

> head(compute(neuralnet.network, test.pca[,c(1,2)])$net.result)
            [,1]         [,2]
187 0.5890781796 0.3481661367
72  0.7182396668 0.4330461404
107 0.5854193907 0.3446555435
228 0.6114171607 0.3648684296
262 0.6727465772 0.4035759540
135 0.5559830113 0.3288717153

但是,当使用带有 caret 包中的 train 函数的同一模型时,输出仅包含一个名为“.outcome”的变量,它实际上是两个变量的总和。这是代码:

paramGrid <- expand.grid(.layer1 = c(2), .layer2 = 0, .layer3 = 0)
ctrl <- trainControl(method = "repeatedcv", repeats = 5)
set.seed(23)
caret.neuralnet <- train(x + y ~ PC1 + PC2, data = train.pca.groundTruth, method = "neuralnet", metric = "RMSE", tuneGrid = paramGrid, trControl = ctrl, algorithm = "rprop+", linear.output = T)

> head(predict(caret.neuralnet, test.pca[,c(1,2)]))
[1] 0.9221328635 1.1953289038 1.0333353272 0.9561434406 1.0409961115 0.8834807926

是否有可能阻止插入符串函数将公式中的符号“+”解释为求和,而是解释为多个输出变量的规范,就像神经网络所做的那样?我试过 x-y 形式,但它不起作用。

我想知道是否有任何形式可以在不为每个输出变量训练单独模型的情况下做到这一点。

非常感谢!

train 不支持多个结果,因此预期的符号公式 x + y 解析为添加 xy 的文字公式。

最大