Pourquoi utiliser la validation croisée stratifiée? Pourquoi cela n'endommage-t-il pas les avantages liés à la variance?

29

On m'a dit qu'il est avantageux d'utiliser la validation croisée stratifiée, en particulier lorsque les classes de réponse sont déséquilibrées. Si l'un des objectifs de la validation croisée est d'aider à rendre compte du caractère aléatoire de notre échantillon de données de formation d'origine, faire en sorte que chaque pli ait la même distribution de classe irait à l'encontre de cela, sauf si vous étiez sûr que votre ensemble de formation d'origine avait une distribution de classe représentative.

Ma logique est-elle défectueuse?

EDIT Je suis intéressé de savoir si cette méthode endommage le bien du CV. Je peux voir pourquoi il est nécessaire si vous avez un petit échantillon / des classes très déséquilibrées / les deux pour éviter de ne pas avoir un seul représentant de la classe mineure dans un pli.

L'article Apples-to-Apples in Cross-Validation Studies: Pitfalls in Classifier Performance Measurement met bien en avant les arguments en faveur de la stratification, mais tous les arguments semblent équivaloir à `` la stratification fournit une sauvegarde et plus de cohérence '', mais aucune sauvegarde ne serait requise étant donné suffisamment Les données.

La réponse est-elle simplement "Nous l'utilisons par nécessité car nous avons rarement assez de données." ?

James Owers
la source

Réponses:

18

Le bootstrapping cherche à simuler l'effet du prélèvement d'un nouvel échantillon dans la population, et ne cherche pas à garantir des ensembles de tests distincts (résidus après N de l'échantillonnage de N avec remplacement).

RxK-fold La validation croisée garantit K plis de test distincts mais est ensuite répété R fois pour différents partitionnements aléatoires pour permettre aux hypothèses d'indépendance de tenir pour K-CV, mais cela est perdu avec la répétition.

La validation croisée stratifiée viole le principe selon lequel les étiquettes de test n'auraient jamais dû être examinées avant le calcul des statistiques, mais cela est généralement considéré comme inoffensif car le seul effet est d'équilibrer les plis, mais cela conduit à une perte de diversité ( une perte de variance indésirable). Cela va encore plus loin de l'idée Boostrap de construire un échantillon similaire à ce que vous tireriez naturellement de l'ensemble de la population. On peut soutenir que la stratification est importante pour remédier aux défauts des algorithmes de classification, car ils sont trop facilement biaisés par une sur ou sous-représentation des classes. Un algorithme qui utilise des techniques d'équilibrage (par sélection ou pondération) ou optimise une mesure de hasard (Kappa ou de préférence Informedness) est moins impacté par cela, bien que même de tels algorithmes puissent '

Forcer chaque repli à avoir au moins m instances de chaque classe, pour certains petits m, est une alternative à la stratification qui fonctionne à la fois pour Bootstrapping et CV. Il a un biais de lissage, ce qui fait que les plis ont tendance à être plus équilibrés qu'ils ne le seraient autrement.

Réensembles et diversité: si les classificateurs appris sur les plis d'apprentissage sont utilisés pour la fusion et pas seulement pour l'estimation de l'erreur de généralisation, la rigidité croissante du CV, du Bootstrap stratifié et du CV stratifié entraîne une perte de diversité et potentiellement de la résilience, par rapport au Bootstrap, Bootstrap forcé et CV forcé.

David MW Powers
la source
Serait-il possible de fournir des documents de référence sur la façon dont le bootstrap stratifié "échoue" là où le bootstrap forcé "est meilleur"?
usεr11852 dit Réintégrer Monic le
16

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.

cdeterman
la source
Oui, cela a un sens total. Cependant, c'est un cas très spécifique et vous le faites pour tenir compte du manque de données. Si vous aviez 10 000 échantillons, le feriez-vous? Ma question est, idéalement et avec suffisamment de données, est-ce une bonne idée?
James Owers du
1
@kungfujam, cela dépend du déséquilibre de vos données. Même avec d'énormes quantités de données, vous pourriez vous retrouver avec très peu de l'autre classe (au hasard). Il y a des recherches à ce sujet. Bien qu'un peu daté, Kohavi a rapporté cela stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. Il n'y a pas de schéma d'échantillonnage parfait, mais dans les plans déséquilibrés, la stratification est une bonne approche.
cdeterman
Merci pour ça. Je venais de trouver le papier Kohavi. Vieux mais de qualité. Je peux voir qu'en général les classes ne sont pas parfaitement équilibrées et les données sont limitées => la stratification est généralement meilleure ... mais étant donné un équilibre raisonnable, j'ai l'impression que c'est une violation!
James Owers
@kungfujam, quelle partie considérez-vous comme une violation? Les k-folds sont randomisés, sauf qu'ils nécessitent spécifiquement une certaine proportion des différents groupes. Vous pourriez y penser comme créant au hasard vos plis à partir de chaque groupe et en les combinant ensemble pour un pli agrégé, conservant ainsi la randomisation qui vous préoccupe. Étant donné un équilibre raisonnable (par exemple 60% -40%), il est probable que vos plis auront de toute façon des proportions similaires avec ou sans stratification (une certaine variation bien sûr).
cdeterman
1
J'ai l'impression que cela va à l'encontre du point. Votre échantillon d'origine est «aléatoire». En tant que tel, je pensais que CV était censé essayer de tenir compte de cela, produisant des rééchantillons variés, et vous conduisant à produire un modèle de variance plus robuste en pénalisant les modèles qui varient au fur et à mesure que les données d'entrée changent. Si vous limitez vos plis pour qu'ils correspondent aux proportions de l'échantillon d'origine, j'ai l'impression que dans un certain sens, vous l'empêchez de le faire. Vous pouvez très bien produire un modèle avec un biais plus faible, mais je pense qu'il aurait une variance plus élevée.
James Owers