【发布时间】:2015-03-10 04:07:42
【问题描述】:
我正在使用 caret 包和“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 形式,但它不起作用。
我想知道是否有任何形式可以做到这一点,而无需为每个输出变量训练单独的模型。
非常感谢!
【问题讨论】:
标签: r neural-network regression r-caret