2016-09-27 31 views
0

我想使用caret包执行重复的k次交叉验证。这可以在trainControl()函数中指定。在R中使用插入符号进行重复平衡k倍交叉验证

我的问题是,使用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-折叠的类别细分。

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

答案是肯定的。

如果method = "repeatedcv"它调用的函数createMultiFolds,这对createFolds内部调用,但n倍的repeats = n

规定