Je souhaite effectuer une validation croisée répétée de k-fold à l'aide du package caret
. Ceci peut être spécifié dans la fonction trainControl()
.Validation croisée équilibrée répétée du k-fold à l'aide de caret dans R
Ma question est, les plis créés en utilisant trainControl(method="repeatedcv", number=k, repeats=n)
sont-ils équilibrés? Ces plis sont-ils générés de la même manière que les plis équilibrés générés par createFolds()
?
Pour plus de clarté, voici des exemples de k-plis symétriques et asymétriques:
La répartition des espèces iris
:
table(iris$Species)
# setosa versicolor virginica
# 50 50 50
Maintenant, nous créons des plis aléatoires asymétriques et symétriques:
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
Maintenant, nous visualisons la décomposition de classe pour chaque ensemble de k-plis.
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