使用插入符号包时自定义训练行

时间:2016-06-10 13:02:53

标签: r r-caret cross-validation training-data

我在R中使用插入符号包以适合多个模型。 当我使用trainControl函数而不设置索引参数时,一切都适用于各种方法。但是,当我想通过索引参数手动设置不同折叠的训练行时,我在拟合时会出现以下错误:
出了点问题;缺少所有RMSE指标值 我尝试了不同的方法参数,因为文档没有告诉用户应该使用哪个索引参数集。

如果答案不是微不足道,我会提供一个例子。

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,如果您碰巧使用较旧版本的R和插入符号,请务必使用index参数的命名列表(不使用这些列表可能导致相对难以追踪错误,例如{{3} })。

Caret的维护者Max在this one中说tuneControl method index参数如果设置index参数则无关紧要 - 这是有意义的因此,您可以定义您的分区包含哪些样本,以及您拥有多少个分区,这几乎指定了重新采样过程。

这是一个最小的工作示例作为参考(请注意library(caret) library(plyr) # 5CV with 3 repeats = 15 partitions m1 <- train(x = iris[,1:2], y = iris[,5], method='lda', trControl = trainControl(method = 'repeatedcv', number = 5, repeats = 3)) # similar behaviour with using index index <- llply(1:15, function(x) sample(nrow(iris), round(nrow(iris)*4/5))) names(index) <- 1:15 m2 <- train(x = iris[,1:2], y = iris[,5], method='lda', trControl = trainControl(index = index)) 的命名):

index

这就是> str(index) List of 15 $ 1 : int [1:120] 47 28 91 54 130 53 37 19 5 85 ... $ 2 : int [1:120] 65 58 39 120 127 80 102 145 97 132 ... $ 3 : int [1:120] 113 14 7 62 65 99 108 105 76 123 ... $ 4 : int [1:120] 124 92 46 1 27 140 33 147 57 6 ... [...] 的样子:

indexOut

PS:如果您未在trainControl中设置index,则\r的特定分区中的所有样本都将用于评估用这个分区训练的模型。如果您想要对评估样本进行子集,则可能不需要这样做。有关详细信息,请参阅this answer