caret :: train:指定训练数据参数

时间:2013-10-27 23:49:26

标签: r neural-network r-caret

我正在设计一种神经网络模型,该模型使用有限的更多扩展输入数据(如纹理,体积密度和一个或两个保水性)来预测van genuchten保水参数(theta_r,thera_s,alpha,n)的估计。调查R项目中的神经网络我发现了RSNNS包,我创建并训练了多个多层感知器(MLP),并调整了隐藏单元的数量和学习速率。以这些模型的训练和测试RMSE为特征的一般性能非常差且随机,实际上,我使用了对数字和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)))

1 个答案:

答案 0 :(得分:2)

caret只是它调用的算法的包装器,因此您可以在算法中指定任何参数,即使它不是插入符调优网格中的选项。这是通过插入符号train()函数中的“...”来完成的,这基本上就是说你可以将任何额外的参数传递给你正在调用的方法。我不确定你想要调整哪些参数来调用你的nnet(我访问你的dropbox数据时出错)所以这里有一个简单的例子,将特定的值传递给maxitHess

> 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)