2

我正在设计一个神经网络模型,该模型使用有限的更多扩展输入数据(如纹理、体积密度和一两个保水性)来预测 van genuchten 保水参数(theta_r、thera_s、alpha、n)的估计。在研究 R 项目中的神经网络时,我发现了 RSNNS 包,我创建并训练了多个多层感知器 (MLP),并调整了隐藏单元的数量和学习率。这些模型的训练和测试 RMSE 的一般性能非常差且随机,事实上,我使用 alpha 和 n 参数的对数转换值来避免偏差并考虑它们近似对数正态分布,但这并没有多大帮助:( . 我被推荐使用 nnet 和 caret 包,但我在调整代码时遇到了麻烦,我不知道我做错了什么,

#input dataset
basic <- read.table(url("https://dl.dropboxusercontent.com/s/m8qe4k5swz1m3ij/basic.txt?dl=1&token_hash=AAH6Z3d6fWTLoQZYi04Ys72sdufdERE5gm4v7eF0cgMlkQ"), header=T, sep=" ")
#output dataset
fitted <- read.table(url("https://dl.dropboxusercontent.com/s/rjx745ej80osbbu/fitted.txt?dl=1&token_hash=AAHP1zcPQyw4uSe8rw8swVm3Buqe3TP7I1j-4_SOeeUTvw"), header=T, sep=" ")

# Use log-transformed values of alpha and n output parameters
fitted$alpha <- log(fitted$alpha)
fitted$n <- log(fitted$n)


#Fit model with caret package
library(caret)
model <- train(x = basic, y = fitted, method='nnet', linout=TRUE, trace = FALSE,
               #Grid of tuning parameters to try:
               tuneGrid=expand.grid(.size=c(1,5,10),.decay=c(0,0.001,0.1)))
4

1 回答 1

3

caret只是它正在调用的算法的包装器,因此您可以在算法中指定任何参数,即使它不是插入符号调整网格中的选项。这是通过插入符号train()函数中的“...”来完成的,这基本上是说您可以将任何额外的参数传递给您正在调用的方法。我不确定您要针对 nnet 调用调整哪些参数(并且访问您的保管箱数据时遇到错误),因此这是一个将特定值传递给maxitand的简单示例Hess

> library(caret)
> m1 <- train(Species~.,data=iris, method='nnet', linout=TRUE, trace = FALSE,trControl=trainControl("cv"))
> #this time pass in values for maxint and Hess
> m2 <- train(Species~.,data=iris, method='nnet', linout=TRUE, trace = FALSE,trControl=trainControl("cv"),maxint=10,Hess=T)
> m1$finalModel$call
nnet.formula(formula = modFormula, data = data, size = tuneValue$.size, 
    decay = tuneValue$.decay, linout = TRUE, trace = FALSE)
> m2$finalModel$call
nnet.formula(formula = modFormula, data = data, size = tuneValue$.size, 
    decay = tuneValue$.decay, linout = TRUE, trace = FALSE, maxint = 10, 
    Hess = ..4)
于 2013-10-28T16:00:09.073 回答