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?
machine-learning
cross-validation
validation
ameba diz Restabelecer Monica
fonte
fonte
Respostas:
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.
fonte
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
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.
fonte
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 kk n n k k
Então, para responder às perguntas:
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.
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.kn k
Uma regra prática que aprendi é: quando é grande, pode ser pequeno, mas quando é pequeno, deve estar próximo de .k n k nn k n k n
fonte
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.)
fonte
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 ≤ 20m m≤20
Se use a validação cruzada k-fold com um relativamente grande, tendo em mente o custo computacional.k ≤ m20<m≤100 k≤m
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<m≤1,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 )m≥1,000,000 (k=5)
fonte
Resposta curta:
Eu recomendaria usar sempre o CV com pelo menos para:k=5
Você pode relaxar isso por:
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 - 1k A 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.k−1k
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.
fonte
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!
fonte
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.
fonte
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.
fonte
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.
fonte