Validação de retenção vs. validação cruzada

54

Para mim, parece que a validação de espera é inútil. Ou seja, dividir o conjunto de dados original em duas partes (treinamento e teste) e usar a pontuação do teste como uma medida de generalização é um tanto inútil.

A validação cruzada da dobra K parece fornecer melhores aproximações de generalização (como ela treina e testa em todos os pontos). Então, por que usaríamos a validação de espera padrão? Ou até falar sobre isso?

ameba diz Restabelecer Monica
fonte
10
por que você acha que é inútil? Você pode ler a seção 7 da teoria dos elementos de aprendizagem estatística para uma análise formal de seus prós e contras. Estatisticamente falando, o k-fold é melhor, mas o uso de um conjunto de testes não é necessariamente ruim. Intuitivamente, você precisa considerar que um conjunto de testes (quando usado corretamente) é de fato um conjunto de dados que não foi usado em nenhum treinamento. Portanto, é definitivamente útil, em certo sentido, avaliar um modelo. Além disso, o k-fold é muito caro, portanto, a espera é uma espécie de "aproximação" do que o k-fold faz (exceto para alguém com baixo poder computacional).
Charlie Parker
Certo. Do ponto de vista teórico, o K-fold é mais preciso, mas UM pouco mais computacionalmente caro. A pergunta era: por que não SEMPRE faça a validação cruzada com dobra K?
2
Eu vejo. Eu argumentaria que o motivo é sempre sempre computacional. A dobra em K aproxima o erro de generalização melhor, portanto, do ponto de vista estatístico, a dobra em K é o método de escolha que acredito. O hold-out é muito mais simples de implementar E não requer treinamento como muitos modelos. Na prática, o treinamento de um modelo pode ser bastante caro.
Charlie Parker
11
Certo - mas acho que o argumento "caro demais para a computação" é bastante frágil. Quase o tempo todo, nosso objetivo é desenvolver os modelos mais precisos. No entanto, existe esse paradoxo em que muitos dos experimentos realizados na literatura têm apenas um único conjunto de validação de espera.
11
Pergunta - Elementos da teoria da aprendizagem estatística, seção 7.10.1, intitulada "Validação cruzada K fold" parece indicar que manter os dados de teste totalmente separados dos dados de treinamento (como na validação de espera) é ideal, e a validação k fold é apenas um compromisso, pois os dados são muitas vezes escassos. Ainda sou novo em estatísticas, você poderia apontar como a validação cruzada é de fato mais precisa?
Num24

Respostas:

21

Meu único palpite é que você pode aguentar com três horas de experiência em programação; o outro leva uma semana em princípio e seis meses em prática.

Em princípio, é simples, mas escrever código é tedioso e demorado. Como Linus Torvalds disse, "programadores ruins se preocupam com o código. Bons programadores se preocupam com estruturas de dados e seus relacionamentos". Muitas das pessoas que fazem estatística são programadores ruins, sem culpa própria. Fazer a validação cruzada k-fold de maneira eficiente (e com isso quero dizer, de uma maneira que não é terrivelmente frustrante para depurar e usar mais de uma vez) no R requer um entendimento vago das estruturas de dados, mas essas estruturas geralmente são ignoradas em "introdução tutoriais de programação estatística ". É como a pessoa idosa que usa a Internet pela primeira vez. Realmente não é difícil, leva apenas meia hora extra para descobrir pela primeira vez, mas é novo e isso torna confuso, por isso é fácil ignorar.

Você tem perguntas como esta: Como implementar uma validação hold-out em R . Nenhuma ofensa destinada, seja qual for, ao solicitante. Mas muitas pessoas simplesmente não são alfabetizadas em código. O fato de as pessoas estarem fazendo validação cruzada é suficiente para me fazer feliz.

Parece bobagem e trivial, mas isso vem da experiência pessoal, tendo sido esse cara e tendo trabalhado com muitas pessoas que eram esse cara.

shadowtalker
fonte
18
Talvez, como alguém que se formou em CS, tenha uma visão um pouco distorcida disso, mas se você puder implementar a validação de retenção corretamente (o que já significa dividir o conjunto de dados em duas partes e usar um para treinamento e outro para teste), o A única coisa que você precisa alterar é a proporção da divisão e coloca tudo em um loop. Parece difícil acreditar que isso seria um grande problema.
Voo
3
@Voo: além disso, não basta programar aqui: você deve entender bem o problema para poder julgar quais fatores de confusão devem ser considerados durante o processo de divisão. Veja, por exemplo, stats.stackexchange.com/questions/20010/… . Acho que vejo esse tipo de problema com mais frequência do que problemas de codificação "puros" (embora nunca se saiba: alguém que mal consegue codificar uma divisão simples das linhas na matriz de dados geralmente também cometerá o erro de não dividir) por exemplo, no nível do paciente)
cbeleites suporta Monica
Note também que você pode fazer adequadas (por exemplo, paciente / dia de medição / ...) dividir hold-out sem qualquer programação em tudo, separando os arquivos do instrumento de medição produz ...
cbeleites suporta Monica
5
Para os votantes ascendentes: observe que fiz uma pergunta separada que questiona minha lógica. stats.stackexchange.com/q/108345/36229
shadowtalker
11
Eu não acho que a resposta explicando a diferença entre dois métodos de validação cruzada deve ser sempre tempo humano de aprender, absurdamente tendenciosa e não é útil
rgalbo
40

O hold-out é frequentemente usado como sinônimo de validação com conjunto de testes independente, embora existam diferenças cruciais entre dividir os dados aleatoriamente e projetar um experimento de validação para testes independentes.

Conjuntos de testes independentes podem ser usados ​​para medir o desempenho da generalização que não pode ser medido por reamostragem ou validação de retenção, por exemplo, o desempenho para casos futuros desconhecidos (= casos que são medidos posteriormente, após o término do treinamento). Isso é importante para saber por quanto tempo um modelo existente pode ser usado para novos dados (pense, por exemplo, no desvio do instrumento). Mais geralmente, isso pode ser descrito como medir o desempenho da extrapolação para definir os limites de aplicabilidade.

Outro cenário em que o hold-out pode realmente ser benéfico é: é muito fácil garantir que os dados de treinamento e teste sejam separados adequadamente - muito mais fácil do que na validação de reamostragem: por exemplo

  1. decidir a divisão (por exemplo, designação aleatória de casos)
  2. a medida
  3. dados de medição e referência dos casos de treinamento => modelagem \ nem medições nem referências de casos de teste são entregues à pessoa que modela.
  4. modelo final + medidas dos casos retidos => previsão
  5. compare previsões com referência para casos retidos.

Dependendo do nível de separação necessário, cada etapa pode ser realizada por outra pessoa. Como primeiro nível, não entregar nenhum dado (nem mesmo as medições) dos casos de teste ao modelador permite ter certeza de que nenhum dado de teste vaza no processo de modelagem. Em um segundo nível, as medidas finais do modelo e do caso de teste poderiam ser entregues a mais alguém, e assim por diante.

Sim, você paga por isso com a menor eficiência das estimativas de espera comparadas à validação de reamostragem. Mas já vi muitos trabalhos em que suspeito que a validação de reamostragem não separa adequadamente os casos (no meu campo, temos muitos dados agrupados / hierárquicos / agrupados).

Aprendi minha lição sobre vazamentos de dados para reamostragem, retirando um manuscrito uma semana após o envio, quando descobri que havia um vazamento anteriormente não detectado (executando testes de permutação ao lado) no meu procedimento de divisão (erro de digitação no cálculo do índice).

Às vezes, o hold-out pode ser mais eficiente do que encontrar alguém que esteja disposto a dedicar tempo para verificar o código de reamostragem (por exemplo, para dados agrupados), a fim de obter o mesmo nível de certeza sobre os resultados. No entanto, o IMHO geralmente não é eficiente para fazer isso antes de você estar no estágio em que você precisa medir, por exemplo, o desempenho futuro (primeiro ponto) - em outras palavras, quando você precisa configurar um experimento de validação para o modelo existente.

OTOH, em situações de tamanho pequeno de amostra, o hold-out não é uma opção: você precisa manter casos de teste suficientes para que os resultados do teste sejam precisos o suficiente para permitir a conclusão necessária (lembre-se: 3 corretos de 3 casos de teste para classificação significam um binomial intervalo de confiança de 95% que varia muito abaixo de 50:50 de suposição!) Frank Harrell apontaria para a regra geral de que pelo menos ca. São necessários 100 casos (de teste) para medir adequadamente uma proporção [como a fração dos casos previstos corretamente] com uma precisão útil.


Atualização: há situações em que a divisão adequada é particularmente difícil de obter e a validação cruzada se torna inviável. Considere um problema com vários fatores de confusão. A divisão é fácil se esses fatores de confusão forem rigorosamente aninhados (por exemplo, um estudo com vários pacientes possui várias amostras de cada paciente e analisa várias células de cada amostra): você divide no nível mais alto da hierarquia de amostragem (em termos de paciente) . Mas você pode ter fatores de confusão independentes que não estão aninhados, por exemplo, variação ou variação diária causada por diferentes experimentadores que executam o teste. Você precisa garantir que a divisão seja independente para todosfatores de confusão no nível mais alto (os fatores de confusão aninhados serão automaticamente independentes). É muito difícil cuidar disso se alguns fatores de confusão forem identificados apenas durante o estudo, e projetar e executar um experimento de validação pode ser mais eficiente do que lidar com divisões que não deixam quase nenhum dado nem para treinamento nem para teste dos modelos substitutos.

cbeleites suporta Monica
fonte
6
Eu gostaria de poder dar mais de +1 para esta resposta muito completa. Gostei particularmente de você mencionar seu problema com um vazamento de dados, pois ilustra efetivamente que pode ser longe de ser trivial descartar tais problemas, mesmo para especialistas. Esta é uma boa verificação da realidade!
Marc Claesen
Você não está implorando a pergunta? Sim, a divisão é difícil, devido a fatores de confusão, mas é difícil, independentemente de você estar fazendo uma validação de espera única ou uma validação cruzada de dobra em k, não é? (Obrigado por uma resposta perspicaz independentemente!)
Nils von Barth
11
@ NilsvonBarth: Não vejo como meus argumentos são circulares: o OP pergunta "por que [de todo] use validação de retenção") e dou várias razões práticas. O uso estatisticamente mais eficiente de um número limitado de casos nem sempre é a propriedade mais importante do desenho do estudo. (Embora, na minha experiência, muitas vezes seja devido a números de casos extremamente limitados: estou aconselhando muito mais vezes o CV k-fold repetido / iterado em vez de esperar). Para alguns fatores de confusão, a divisão física é possível e fácil - e uma maneira muito eficiente de evitar pré-visualizações. Quem sabe se vamos descobrir que duplamente ...
cbeleites suporta Monica
pode ser necessária uma análise estatística cega dos dados em relação a muitos documentos falsos positivos em algum momento?
Cbeleites suporta Monica
2
@NilsvonBarth: Cuidado com o hold-out garantindo independência: é fácil implementar o hold-out dessa maneira (pelo hold-out físico dos casos, ou seja, as amostras de teste são guardadas e medidas somente após o término do treinamento do modelo), mas frequentemente o termo hold-out é usado para o que é realmente muito mais como uma única divisão aleatória dos dados - e, em seguida, todas as possibilidades de cometer erros na divisão também podem ser feitas com hold-out!
cbeleites suporta Monica
8

Pode ser útil esclarecer um pouco a terminologia. Se deixarmos ser um número inteiro menor que (ou igual a) onde é o tamanho da amostra e particionarmos a amostra em subamostras únicas, o que você está chamando de validação de retenção é realmente apenas duas vezes ( = 2 ) validação cruzada. A validação cruzada é apenas uma ferramenta para estimar as taxas de erro fora da amostra (ou generalização) de um modelo específico. A necessidade de estimar a taxa de erro fora da amostra é comum e gerou uma literatura inteira. Veja, para iniciantes, o capítulo 7 da ESL .n n k kknnkk

Então, para responder às perguntas:

  1. Por que falar sobre isso? Pedagogicamente. Vale a pena pensar na validação do Hold-out como um caso especial - e apenas ocasionalmente útil - de um método bastante útil com muitas, muitas variações.

  2. Por que usar isso? Se alguém tiver a sorte de ter um conjunto de dados colossal (em termos de observações, ), então faz sentido dividir os dados no meio - treinamento em um meio e teste no outro -. Isso faz sentido por razões computacionais, pois tudo o que é necessário é adequado uma vez e previsto uma vez (em vez de vezes). E faz sentido do ponto de vista da "estimativa de grandes amostras", já que você tem uma tonelada de observações para ajustar seu modelo.knk

Uma regra prática que aprendi é: quando é grande, pode ser pequeno, mas quando é pequeno, deve estar próximo de .k n k nnknkn

Zoë Clark
fonte
13
Não acho que o holdout seja o mesmo que a validação 2 vezes, porque na validação 2 vezes você ajustará dois modelos e calculará a média dos erros nos dois conjuntos de validação.
Alex
8

Se o procedimento de seleção e ajuste de modelo não puder ser codificado, porque é subjetivo, ou parcialmente, envolvendo a visualização de gráficos e similares, a validação de espera pode ser o melhor que você pode fazer. (Suponho que você talvez possa usar algo como Turk Mecânico em cada dobra do CV, embora eu nunca tenha ouvido falar disso.)

Scortchi - Restabelecer Monica
fonte
6

Só queria adicionar algumas diretrizes simples que Andrew Ng mencionou em nossa classe CS 229 em Stanford sobre validação cruzada. Essas são as práticas que ele segue em seu próprio trabalho.

Seja o número de amostras no seu conjunto de dados. Se use a validação cruzada Deixe um fora.m 20mm20

Se use a validação cruzada k-fold com um relativamente grande, tendo em mente o custo computacional.k m20<m100km

Se use validação cruzada com dobra k regular . Ou, se não houver potência computacional suficiente e , use validação cruzada de espera.( k = 5 ) m > 10 , 000100<m1,000,000(k=5)m>10,000

Se usam a validação cruzada de espera, mas se a potência computacional estiver disponível, você pode usar a validação cruzada de dobras se desejar extrair esse desempenho extra do seu modelo.( k = 5 )m1,000,000(k=5)

Oscilação isópcica
fonte
5

Resposta curta:

Eu recomendaria usar sempre o CV com pelo menos para:k=5

  • modelos complexos
  • resultados finais que precisam seguir restrições de validade

Você pode relaxar isso por:

  • treinamento em conjuntos de dados realmente grandes
  • treinando modelos simples
  • prototipagem quando o tempo é um problema

Alguns de vocês mencionaram que programar isso em R pode ser um problema. Eu recomendo que você dê uma olhada no pacote "mlr" . Ele agrupa pacotes diferentes em uma interface unificada, fornecendo também métodos avançados de reamostragem e avaliação de desempenho.

Dê uma olhada: http://mlr-org.github.io/mlr-tutorial/release/html/resample/ e: http://mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm

Mais algumas explicações - o que o CV realmente faz é quebrar a compensação da variação de viés:

Agora, o problema que ambas as abordagens tentam resolver é estimar o erro de generalização, que depende dos dados que foram usados ​​para treinar um modelo.

O holdout tem um problema com tendência e variação:

Ao diminuir a quantidade de dados que testamos, apresentamos variação ao nosso erro de generalização estimado, pois os dados de teste podem não representar muito bem a distribuição subjacente. Isso, por si só, não apresenta um viés, pois, na expectativa, o desempenho estimado estará correto.

Porém, diminuir o conjunto de treinamento introduz um viés pessimista, pois novamente a distribuição subjacente não está bem representada nos dados e o modelo também não pode ajustá-los. Tornar o conjunto de treinamento muito pequeno também apresenta variação.

À medida que o tamanho do treinamento e do conjunto de testes se determinam, isso nos deixa com uma compensação: viés pessimista versus alta variação.

k - 1kA validação cruzada fold resolve esse problema mantendo o conjunto de treinamento grande (uma fração de dos dados é usada para treinamento em todas as iterações) e lidando com a variação do erro de teste, reamostrando . Depois de todas as iterações, testamos o desempenho em todas as observações do conjunto de dados com um aluno. Obviamente, isso requer mais tempo de computação do que simples validação.k1k

A validação cruzada é especialmente importante para alunos mais complexos (alta variação). Esses geralmente também são mais caros em termos computacionais, o que pode tornar todo o processo bastante demorado.

gcsk
fonte
3

Todos esses são comentários úteis. Basta levar mais um em consideração. Quando você possui dados suficientes, o uso do Hold-Out é uma maneira de avaliar um modelo específico (um modelo SVM específico, um modelo CART específico etc.), enquanto que se você usar outros procedimentos de validação cruzada, estará avaliando metodologias (sob suas condições de problema ) em vez de modelos (metodologia SVM, metodologia CART etc.).

Espero que isso seja útil!

Indo
fonte
3

Modelar com dados sérios de tempo é uma exceção para mim. O K fold não pode funcionar em alguns casos quando você precisa prever o futuro com base nos dados anteriores. Os conjuntos de testes devem ser os dados futuros e você nunca poderá tocá-los na fase de treinamento. ex previsão de venda ou mercado de ações. A retenção é útil nesses casos.

Qian Liu
fonte
Tempo de dados sérios?
nbro 28/10
3

Basta colocar; Tempo. Validação cruzada, você executa a rotina de treinamento k vezes (ou seja, uma vez para cada conjunto de retenção). Se você tiver dados grandes, poderá levar muitas horas ou até dias para treinar o modelo para apenas um conjunto de dados, multiplicando-o por k ao usar a validação cruzada.

Portanto, embora a validação cruzada seja o melhor método, em certas circunstâncias isso não é viável, e o tempo que levaria poderia ter sido melhor gasto modelando os dados de maneiras diferentes ou testando diferentes funções de perda para obter um modelo melhor.

Minha preferência pessoal é obter dados de validação de todo o conjunto de dados. Portanto, em vez de pegar um único pedaço de 10% da cabeça ou da cauda dos dados, eu tomo 2% de 5 pontos no conjunto de dados. Isso torna os dados de validação um pouco mais representativos dos dados como um todo.

BigBadMe
fonte
Embora seja uma pergunta antiga e uma nova resposta, estou votando nisso porque desafia a afirmação infundada de que "o K-fold é mais preciso, mas UM pouco mais computacionalmente caro", que as outras respostas estavam ignorando ou passando muito rapidamente.
The Laconic
0

Note-se que nem sempre é possível aplicar a validação cruzada. Considere os conjuntos de dados dependentes do tempo para que você queira usar os dados históricos para treinar um modelo preditivo para o comportamento futuro. Nesse caso, você deve aplicar a validação de espera.

Elahe Naserian
fonte
2
Nesse caso, você deve fazer a validação direta.
Neil G