Perché usare la validazione incrociata stratificata? Perché questo non danneggia i benefici correlati alla varianza?


29

Mi è stato detto che è utile utilizzare la validazione incrociata stratificata, specialmente quando le classi di risposta sono sbilanciate. Se uno scopo della convalida incrociata è quello di aiutare a spiegare la casualità del nostro campione di dati di allenamento originale, fare sicuramente ogni piega con la stessa distribuzione di classe avrebbe funzionato contro questo a meno che tu non fossi sicuro che il tuo set di allenamento originale avesse una distribuzione rappresentativa di classe.

La mia logica è difettosa?

EDIT Mi interessa sapere se questo metodo danneggia il bene del CV. Posso capire perché è necessario avere un piccolo campione / classi molto sbilanciate / entrambe per evitare di non avere un solo rappresentante della classe minore in una piega.

Il documento Apples-to-Apple in Cross-Validation Studies: insidie ​​nella classificazione delle misurazioni delle prestazioni espone bene il caso della stratificazione, ma tutti gli argomenti sembrano equivalere a "La stratificazione fornisce una protezione e una maggiore coerenza", ma non sarebbe necessaria alcuna protezione data dati.

La risposta è semplicemente "Lo usiamo per necessità poiché raramente disponiamo di dati sufficienti". ?

Risposte:


18

Il bootstrap cerca di simulare l'effetto del prelievo di un nuovo campione dalla popolazione e non cerca di garantire set di test distinti (residui dopo N da N campionamento con sostituzione).

La convalida incrociata RxK-fold assicura K distinzioni di test distinte ma viene quindi ripetuta R volte per diversi partizioni casuali per consentire l'assunzione di ipotesi di indipendenza per K-CV, ma questo si perde con la ripetizione.

La validazione incrociata stratificata viola il principio secondo cui le etichette dei test non avrebbero mai dovuto essere esaminate prima che le statistiche fossero calcolate, ma questo è generalmente ritenuto innocuo in quanto l'unico effetto è bilanciare le pieghe, ma porta a una perdita di diversità ( una indesiderata perdita di varianza). Si allontana ancora di più dall'idea di Boostrap di costruire un campione simile a quello che attireresti naturalmente da tutta la popolazione. Probabilmente il motivo principale per cui la stratificazione è importante è affrontare i difetti negli algoritmi di classificazione, poiché sono troppo facilmente distorti dalla sovra o dalla sottorappresentazione delle classi. Un algoritmo che utilizza tecniche di bilanciamento (mediante selezione o ponderazione) o ottimizza una misura corretta per caso (Kappa o preferibilmente Informedness) ne è meno influenzato, sebbene anche tali algoritmi possano "

Forzare ogni piega per avere almeno m istanze di ogni classe, per alcuni m piccoli, è un'alternativa alla stratificazione che funziona sia per Bootstrapping che per CV. Presenta una distorsione uniforme, rendendo le pieghe tendenzialmente più equilibrate di quanto non ci si aspetterebbe altrimenti.

Riunioni e diversità: se i classificatori appresi sulle pieghe dell'allenamento vengono utilizzati per la fusione non solo per la stima dell'errore di generalizzazione, la rigidità crescente di CV, Bootstrap stratificato e CV stratificato porta alla perdita di diversità e potenzialmente alla resilienza rispetto a Bootstrap, Bootstrap forzato e CV forzato.


Sarebbe possibile fornire alcuni documenti di riferimento su come il bootstrap stratificato "fallisce" laddove il bootstrap forzato "è migliore"?
usεr11852 dice Reinstate Monic il

16

Forse puoi pensarlo in questo modo. Supponiamo che tu abbia un set di dati in cui ci sono 100 campioni, 90 nella classe 'A' e 10 nella classe 'B'. In questo progetto molto sbilanciato se fai normali gruppi randomizzati, potresti finire per costruire modelli su un numero estremamente limitato (o ANCORA NESSUNO!) Della classe "B". Se stai costruendo un modello che è addestrato sui dati in cui ci sono così pochi, o addirittura nessuno, dell'altra classe come puoi aspettarti che preveda in modo efficace il gruppo più raro? La convalida incrociata stratificata consente la randomizzazione ma assicura anche che questi set di dati non bilanciati abbiano alcune di entrambe le classi.

Per placare le preoccupazioni sull'uso di CV stratificato con set di dati più "bilanciati", diamo un'occhiata a un esempio usando il codice 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 

Come puoi vedere, in un set di dati ben bilanciato le pieghe avranno una distribuzione simile per caso. Pertanto il CV stratificato è semplicemente una misura di garanzia in queste circostanze. Tuttavia, per affrontare la varianza è necessario esaminare le distribuzioni di ogni piega. In alcune circostanze (anche a partire dal 50-50) potresti avere delle pieghe che hanno divisioni di 30-70 per caso (puoi eseguire il codice qui sopra e vedere che ciò sta realmente accadendo!). Ciò potrebbe portare a un modello con prestazioni peggiori perché non aveva abbastanza di una classe per prevederlo con precisione, aumentando così la varianza complessiva del CV. Ciò è ovviamente più importante quando hai campioni "limitati" in cui è più probabile che tu abbia differenze molto estreme nella distribuzione.

Ora con set di dati molto grandi, la stratificazione potrebbe non essere necessaria perché le pieghe saranno abbastanza grandi da contenere probabilmente almeno una buona proporzione della classe "più rara". Tuttavia, non c'è davvero alcuna perdita computazionale e nessuna vera ragione per rinunciare alla stratificazione se i tuoi campioni sono sbilanciati, non importa quanti dati hai a mio avviso personale.


Sì, questo ha perfettamente senso. Tuttavia, questo è un caso molto specifico e lo stai facendo per tenere conto della mancanza di dati. Se avessi 10.000 campioni, lo faresti? La mia domanda è, idealmente e dato abbastanza dati, è una buona idea?
James Owers,

1
@kungfujam, dipende da quanto sono sbilanciati i tuoi dati. Anche con enormi quantità di dati, potresti finire con pochissime altre classi (in modo casuale). C'è qualche ricerca al riguardo. Anche se un po 'datato, Kohavi lo ha riferito stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. Non esiste uno schema di campionamento perfetto, ma nei progetti sbilanciati la stratificazione è un buon approccio.
cdeterman,

Grazie per questo. Avevo appena trovato il giornale Kohavi. Vecchio ma buono. Vedo che nelle classi generali non sono perfettamente bilanciati e che i dati sono limitati => la stratificazione è generalmente migliore ... ma dato un ragionevole equilibrio, mi sento come se fosse una violazione!
James Owers,

@kungfujam, quale parte consideri una violazione? Le k-fold sono randomizzate tranne per il fatto che richiedono specificamente una certa proporzione dei diversi gruppi. Potresti pensarlo come creare casualmente le tue pieghe da ciascun gruppo e combinarle insieme per una piega aggregata mantenendo così la randomizzazione di cui ti preoccupi. Dato un equilibrio ragionevole (ad es. 60% -40%), è probabile che le tue pieghe abbiano proporzioni simili comunque con o senza stratificazione (alcune variazioni ovviamente).
cdeterman,

1
Sento che sconfigge il punto. Il tuo campione originale è 'casuale'. In quanto tale, ho pensato che il CV avrebbe dovuto cercare di spiegarlo, producendo diversi campioni e portandoti a produrre un modello più robusto alla varianza penalizzando i modelli che variano al variare dei dati di input. Se limiti le tue pieghe in modo che corrispondano alle proporzioni del campione originale, ho sentito che in un certo senso lo stai impedendo di farlo. Potresti produrre un modello con una propensione inferiore, ma direi che avrebbe una varianza più elevata.
James Owers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.