如何通过使用caret和R建模神经网络

3
我有一个数据集,对其进行了机器学习算法的操作。我已经在大小为180 x 160的数据集上执行了多元线性回归(MLR),逐步回归(stepwise regression),支持向量机(SVM)和随机森林(Random Forest)。我正在对159个变量中的一个变量建模,共有179个案例。这都是回归建模。我一直在使用caret包,其中我使用train函数使用不同的机器学习算法进行10倍交叉验证10次。有人告诉我阅读一篇使用神经网络模型的论文,并取得了更好的结果,因此我一直在尝试找到一种使用神经网络模型来完成相同任务的方法。
我已经尝试了以下方法:
model <- train(RT..seconds.~., data = cadets, method = "AMORE", trControl = ctrl)

但它不起作用。有人告诉我,由于训练函数尚未包含AMORE包装,因此它不起作用。所以我转而使用nnet:

model <- train(RT..seconds.~., data = cadets, method = "nnet", trControl = ctrl)

这个方法可以运行。然而,我得到的RMSE值是171,当我查看预测值与观察值时,所有预测值都只是1和0.9999。有人知道我做错了什么吗?

谢谢!


1
我认为在一个180x160的数据集上使用神经网络不是一个好主意。 - Hong Ooi
你尝试在“nnet”命令中加入skip=TRUE了吗? - gd047
我刚试了一下,我做了这个操作: 'cadets.nn <- train(RT..seconds.~., data = cadets, method = "nnet", trControl = ctrl, skip = TRUE)' 并且我得到了相同的RMSE值,预测值要么是1,要么是0。 - user2062207
1个回答

2

您需要在nnet函数中使用选项linout = TRUE

model <- train(RT..seconds.~., data = cadets, 
               method = "nnet", trControl = ctrl,
               linout = TRUE)

如果您不指定激活函数,将使用Sigmoid激活函数,并且所有预测值将被限制在[0, 1]之间。

谢谢,看起来好像已经成功了!虽然我得到的答案有点像分组(就像在8个不同的数字之间偏离),但它仍然有效,谢谢。 - user2062207

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接