Vous pouvez peut-être y penser de cette façon. Disons que vous avez un ensemble de données où il y a 100 échantillons, 90 en classe 'A' et 10 en classe 'B'. Dans cette conception très déséquilibrée, si vous faites des groupes aléatoires normaux, vous pourriez finir par construire des modèles sur très peu (ou MÊME AUCUN!) De la classe 'B'. Si vous construisez un modèle qui est formé sur des données où il y a si peu, voire aucune, de l'autre classe, comment pourriez-vous vous attendre à ce qu'il prédise efficacement le groupe le plus rare? La validation croisée stratifiée permet la randomisation mais garantit également que ces ensembles de données déséquilibrés ont certaines des deux classes.
Pour apaiser les inquiétudes concernant l'utilisation de CV stratifié avec des ensembles de données plus «équilibrés», regardons un exemple utilisant le code R.
require(mlbench)
require(caret)
require(cvTools)
# using the Sonar dataset (208 samples)
data(Sonar)
# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))
> prop.table(table(Sonar$Class))
M R
0.5336538 0.4663462
# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)
# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)
# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M R
0.5338312 0.4661688
non_strat_dist
> non_strat_dist
M R
0.5328571 0.4671429
Comme vous pouvez le voir, dans un ensemble de données bien équilibré, les plis auront une distribution similaire par hasard. Par conséquent, le CV stratifié est simplement une mesure d'assurance dans ces circonstances. Cependant, pour corriger la variance, vous devez examiner les distributions de chaque pli. Dans certaines circonstances (même à partir de 50-50), vous pourriez avoir des plis qui ont des divisions de 30-70 par hasard (vous pouvez exécuter le code ci-dessus et voir cela se produire réellement!). Cela pourrait conduire à un modèle moins performant car il n'avait pas assez d'une classe pour le prédire avec précision, augmentant ainsi la variance globale du CV. Ceci est évidemment plus important lorsque vous avez des échantillons «limités» où vous êtes plus susceptibles d'avoir des différences de distribution très extrêmes.
Maintenant, avec de très grands ensembles de données, la stratification peut ne pas être nécessaire car les plis seront suffisamment grands pour contenir probablement encore au moins une bonne proportion de la classe «plus rare». Cependant, il n'y a vraiment aucune perte de calcul et aucune raison réelle de renoncer à la stratification si vos échantillons sont déséquilibrés, peu importe la quantité de données dont vous disposez à mon avis.