R 插入符号 createFolds 与 createMultiFolds 差异

2024-01-10

我创建折叠以进行交叉验证caret.

我发现 createFolds 和 createMultiFolds 函数之间存在差异。在我看来,createFolds 是没有替换的,根据我的理解,这是正确的版本。 createMultiFolds 有两个缺陷,首先它使用替换,其次它每折叠的观察结果比预期多得多。

有谁知道为什么会出现这些差异,或者我是否必须以不同的方式指定它?最后我想使用重复的交叉验证。

这是一个 MWE:

library(caret)
data(mtcars)

set.seed(123)
folds <- createMultiFolds(y = mtcars$am, k = 5, times = 5)

set.seed(123)
folds <- createFolds(mtcars$am, k = 5)

输出如下:

createMultiFolds(仅前 5 个折叠):

Fold1.Rep1  1  2  3  4  6  7  8  9 10  11  12  13  14  15  16  18  20  22  23  24  25  26  27  29  30  31
Fold2.Rep1  1  2  3  5  6  7  8  9 11  12  14  16  17  18  19  20  21  22  23  24  25  28  29  31  32
Fold3.Rep1  2  4  5  6  7  8  9 10 11  12  13  15  17  18  19  20  21  23  26  27  28  29  30  31  32
Fold4.Rep1  1  2  3  4  5  6  7 10 13  14  15  16  17  18  19  21  22  23  24  25  26  27  28  29  30  32
Fold5.Rep1  1  3  4  5  8  9 10 11 12  13  14  15  16  17  19  20  21  22  24  25  26  27  28  30  31  32

创建折叠:

Fold1  5 17 19 21 28 32
Fold2  4 10 13 15 26 27 30
Fold3  1  3 14 16 22 24 25
Fold4  8  9 11 12 20 31
Fold5  2  6  7 18 23 29

如果你检查源代码createMultiFolds,你会看到它调用createFolds with returnTrain = TRUE。从文档来看,

returnTrain: a logical. When true, the values returned are the sample
          positions corresponding to the data used during training.
          This argument only works in conjunction with ‘list = TRUE’

因此,如果您修改createFolds适当地,一切都很好:

> library(caret)
> data(mtcars)
> set.seed(123)
> multiFolds <- createMultiFolds(y = mtcars$am, k = 5, times = 2)
> set.seed(123)
> folds1 <- createFolds(mtcars$am, k = 5, returnTrain = TRUE)
> folds2 <- createFolds(mtcars$am, k = 5, returnTrain = TRUE)
> all(multiFolds$Fold1.Rep1 == folds1$Fold1)
[1] TRUE
> all(multiFolds$Fold2.Rep1 == folds1$Fold2)
[1] TRUE
> all(multiFolds$Fold3.Rep1 == folds1$Fold3)
[1] TRUE
> all(multiFolds$Fold4.Rep1 == folds1$Fold4)
[1] TRUE
> all(multiFolds$Fold5.Rep1 == folds1$Fold5)
[1] TRUE
> all(multiFolds$Fold1.Rep2 == folds2$Fold1)
[1] TRUE
> all(multiFolds$Fold2.Rep2 == folds2$Fold2)
[1] TRUE
> all(multiFolds$Fold3.Rep2 == folds2$Fold3)
[1] TRUE
> all(multiFolds$Fold4.Rep2 == folds2$Fold4)
[1] TRUE
> all(multiFolds$Fold5.Rep2 == folds2$Fold5)
[1] TRUE

createMultiFolds 有两个缺陷,首先它使用替换 [...]

你从哪里得到这个?如果您谈论的是 1,则第一个是名称的一部分:Fold1.Rep1, Fold2.Rep1, …, Fold{k}.Rep{times}.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 插入符号 createFolds 与 createMultiFolds 差异 的相关文章

随机推荐