我正在设计一个神经网络模型,该模型使用有限的更多扩展输入数据(如纹理、体积密度和一两个保水性)来预测 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)))