【问题标题】:caret::train: specify training data parameterscaret::train:指定训练数据参数
【发布时间】:2013-11-06 15:41:45
【问题描述】:

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

【问题讨论】:

  • 我不明白,你的问题是什么?
  • 是否可以使用 caret 包训练具有更多输出参数的 NN?
  • 您是否要求train 一次可以使用多个结果?如果是这样,它一次只能使用一个。

标签: r neural-network r-caret


【解决方案1】:

caret 只是它调用的算法的包装器,因此您可以在算法中指定任何参数,即使它不是插入符号调整网格中的选项。这是通过插入符号的train() 函数中的“...”来完成的,这基本上是说您可以将任何额外的参数传递给您正在调用的方法。我不确定你想为你的 nnet 调用调整哪些参数(而且我在访问你的保管箱数据时遇到错误)所以这是一个将特定值传递给 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)

【讨论】:

  • 这对我帮助很大。谢谢!
猜你喜欢
  • 2012-05-16
  • 2015-12-28
  • 2018-03-11
  • 2017-06-01
  • 2014-06-15
  • 2014-05-23
  • 2018-03-16
  • 2019-06-27
  • 2017-07-20
相关资源
最近更新 更多