Por que usar a validação cruzada estratificada? Por que isso não prejudica o benefício relacionado à variação?

29

Disseram-me que é benéfico usar a validação cruzada estratificada, especialmente quando as classes de resposta são desequilibradas. Se um objetivo da validação cruzada é ajudar a explicar a aleatoriedade da nossa amostra de dados de treinamento original, certamente fazer com que cada dobra tenha a mesma distribuição de classe funcionaria contra isso, a menos que você tivesse certeza de que seu conjunto de treinamento original tinha uma distribuição representativa de classe.

Minha lógica é falha?

EDIT Estou interessado em saber se esse método danifica o bem do CV. Percebo por que é necessário ter uma amostra pequena / classes muito desequilibradas / ambas para evitar não ter um único representante da classe menor em uma dobra.

O artigo Maçãs a Maçãs em estudos de validação cruzada: armadilhas na medição de desempenho do classificador apresenta bem o caso da estratificação, mas todos os argumentos parecem equivaler a 'A estratificação fornece uma salvaguarda e mais consistência', mas nenhuma salvaguarda seria necessária, dado o suficiente dados.

A resposta é simplesmente "Nós o usamos por necessidade, pois raramente temos dados suficientes". ?

James Owers
fonte

Respostas:

18

O Bootstrapping procura simular o efeito de extrair uma nova amostra da população e não procura garantir conjuntos de testes distintos (resíduos após a amostragem N de N com substituição).

A validação cruzada de dobras de RxK garante K dobras de teste distintas, mas é repetida vezes R para diferentes particionamentos aleatórios para permitir que suposições de independência sejam válidas para o K-CV, mas isso é perdido com a repetição.

A validação cruzada estratificada viola o princípio de que os rótulos dos testes nunca deveriam ter sido analisados ​​antes do cálculo das estatísticas, mas geralmente isso é considerado inócuo, pois o único efeito é equilibrar as dobras, mas leva à perda de diversidade ( perda de variação indesejada). Ele se afasta ainda mais da idéia do Boostrap de construir uma amostra semelhante à que você tiraria naturalmente de toda a população. Indiscutivelmente, a principal razão pela qual a estratificação é importante é tratar dos defeitos nos algoritmos de classificação, pois eles são facilmente influenciados pela representação excessiva ou subrepresentada das classes. Um algoritmo que utiliza técnicas de balanceamento (por seleção ou ponderação) ou otimiza uma medida com chance de acerto (Kappa ou preferencialmente Informedness) é menos impactado por isso, embora mesmo esses algoritmos possam '

Forçar cada dobra a ter pelo menos m instâncias de cada classe, por alguns m pequenos, é uma alternativa à estratificação que funciona tanto para o Bootstrapping quanto para o CV. Ele tem um viés de suavização, tornando as dobras tendem a ser mais equilibradas do que seria de esperar.

Conjuntos e diversidade: se os classificadores aprendidos nas dobras de treinamento são usados ​​para fusão, não apenas para estimar erros de generalização, a crescente rigidez do CV, Bootstrap estratificado e CV estratificado leva à perda de diversidade e potencial resiliência, em comparação com o Bootstrap, o Bootstrap forçado e CV forçado.

David MW Powers
fonte
Seria possível, por favor, fornecer alguns documentos de referência sobre como o bootstrap estratificado "falha" onde o bootstrap forçado "é melhor"?
usεr11852 diz Reinstate Monic
16

Talvez você possa pensar dessa maneira. Digamos que você tenha um conjunto de dados em que haja 100 amostras, 90 na classe 'A' e 10 na classe 'B'. Nesse projeto muito desequilibrado, se você criar grupos aleatórios normais, poderá criar modelos em muito poucos (ou até NENHUM!) Da classe 'B'. Se você está construindo um modelo que é treinado em dados em que há tão poucos, ou mesmo nenhum, da outra classe, como você espera que ele preveja efetivamente o grupo mais raro? A validação cruzada estratificada permite a randomização, mas também garante que esses conjuntos de dados desequilibrados possuam algumas das duas classes.

Para pacificar as preocupações sobre o uso de CV estratificado com conjuntos de dados mais 'equilibrados', vejamos um exemplo usando o código 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 

Como você pode ver, em um conjunto de dados bem equilibrado, as dobras terão uma distribuição semelhante por acaso. Portanto, o CV estratificado é simplesmente uma medida de garantia nessas circunstâncias. No entanto, para lidar com a variação, é necessário examinar as distribuições de cada dobra. Em algumas circunstâncias (mesmo começando de 50 a 50), você pode ter dobras com divisões de 30 a 70 por acaso (você pode executar o código acima e ver isso realmente acontecendo!). Isso pode levar a um modelo com pior desempenho, pois não possui classe suficiente para prever com precisão, aumentando assim a variação geral do CV. Obviamente, isso é mais importante quando você tem amostras "limitadas", nas quais é mais provável que haja diferenças muito extremas na distribuição.

Agora, com conjuntos de dados muito grandes, a estratificação pode não ser necessária porque as dobras serão grandes o suficiente para provavelmente ainda conter pelo menos uma boa proporção da classe 'mais rara'. No entanto, não há realmente perda computacional e nenhuma razão real para renunciar à estratificação se suas amostras estiverem desequilibradas não importa quantos dados você tenha na minha opinião pessoal.

cdeterman
fonte
Sim, isso faz total sentido. No entanto, este é um caso muito específico e você está fazendo isso para explicar a falta de dados. Se você tivesse 10.000 amostras, faria isso? Minha pergunta é, idealmente, e com dados suficientes, é uma boa idéia?
James Owers
1
@kungfujam, depende de quão desequilibrados são seus dados. Mesmo com enormes quantidades de dados, você pode acabar com muito poucos da outra classe (aleatoriamente). Há alguma pesquisa sobre isso. Embora um pouco datado, Kohavi relatou isso stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. Não existe um esquema de amostragem perfeito, mas em projetos desequilibrados, a estratificação é uma boa abordagem.
cdeterman
Obrigado por isso. Acabei de encontrar o jornal Kohavi. Velho mas bom. Percebo que, em geral, as classes não são perfeitamente equilibradas e os dados são limitados => a estratificação geralmente é melhor ... mas, considerando o equilíbrio razoável, sinto que é uma violação!
quer
@kungfujam, que parte você considera uma violação? As dobras k são randomizadas, exceto que exigem especificamente uma certa proporção dos diferentes grupos. Você pode pensar nisso como criar aleatoriamente suas dobras de cada grupo e combiná-las para uma dobra agregada, mantendo assim a randomização com a qual você está preocupado. Dado um saldo razoável (por exemplo, 60% a 40%), é provável que suas dobras tenham proporções semelhantes de qualquer maneira, com ou sem estratificação (algumas variações, é claro).
Cd2 #
1
Eu sinto que isso derrota o ponto. Sua amostra original é 'aleatória'. Como tal, pensei que o CV deveria tentar explicar isso, produzindo diferentes amostras e levá-lo a produzir um modelo mais robusto de variação, penalizando modelos que variam conforme os dados de entrada mudam. Se você restringir suas dobras para corresponder às proporções da amostra original, senti que, em certo sentido, você está impedindo isso de fazer isso. Você pode muito bem produzir um modelo com um viés menor, mas eu diria que ele teria uma variação maior.
James Owers