2016-09-27 12 views
0

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 

Répondre

1

La réponse est oui.

Si le method = "repeatedcv" appelle la fonction createMultiFolds, qui appelle en interne sur createFolds, mais n fois comme spécifié dans repeats = n