使用R中的插入符重复平衡k折交叉验证

时间:2016-09-27 20:49:27

标签: r r-caret cross-validation

我想使用caret包执行重复的k-fold交叉验证。这可以在trainControl()函数中指定。

我的问题是,使用trainControl(method="repeatedcv", number=k, repeats=n)创建的折叠平衡了吗?这些k折叠的生成方式与createFolds()生成的平衡生成方式相同吗?

为清楚起见,这里是平衡和不平衡k折叠的例子:

iris物种分解:

table(iris$Species)
# setosa versicolor  virginica 
#     50         50         50

现在,我们创建随机不平衡和平衡折叠:

k <- 10

unbalanced <- sample(rep(seq(k), length=length(iris$Species)))

bList <- createFolds(iris$Species, k)

# Below, we reformat the list of folds
balanced <- rep(-1, length(iris$Species))
for (i in seq_len(k)) balanced[bList[[i]]] <- i

现在,我们可以看到每组k-folds的类细分。

classBreakdownTable <- function(i, folds) table(as.factor(iris$Species)[which(folds == i)])

sapply(seq_len(k), classBreakdownTable, unbalanced)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# setosa        4    6    8    4    4    4    7    6    5     2
# versicolor    5    5    1    5    5    7    4    6    6     6
# virginica     6    4    6    6    6    4    4    3    4     7

sapply(seq_len(k), classBreakdownTable, balanced)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# setosa        5    5    5    5    5    5    5    5    5     5
# versicolor    5    5    5    5    5    5    5    5    5     5
# virginica     5    5    5    5    5    5    5    5    5     5

1 个答案:

答案 0 :(得分:1)

答案是肯定的。

如果method = "repeatedcv"调用createMultiFolds函数,该函数在内部调用createFolds,但在repeats = n

中指定n次