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

Custom training rows when using caret package

我正在使用 R 中的 caret 包来拟合多个模型。 当我在不设置索引参数的情况下使用 trainControl 函数时,各种方法都可以正常工作。但是,当我想通过索引参数手动设置不同折叠的训练行时,拟合时出现以下错误:
出了点问题;所有 RMSE 指标值都缺失 我尝试了不同的方法参数,因为文档没有告诉用户应该使用哪个方法参数集。

如果答案不简单,我会提供一个例子。

谢谢!

首先,如果您碰巧使用旧版本的 R 和插入符号,请务必为 index 参数使用命名列表(不使用这样可能会导致相对难以追踪错误,例如 this one).

Max,插入符号的维护者,在 this answer 中声明,在 tuneControl 中,如果您设置 index 参数,则 method 参数不再重要 - 这这很有意义,因为您定义了 您的分区包含哪些样本 ,以及 您有多少个分区 ,这几乎指定了重采样过程。

这里有一个最小的工作示例作为参考(注意 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 ...
 [...]

PS:如果你不在trainControl中设置indexOut,所有不是的样本在[的特定分区中=12=] 将用于评估使用此分区训练的模型。如果您还想对评估样本进行子集化,这可能是不希望的。有关详细信息,请参阅