Qual é a diferença entre o conjunto de testes e o conjunto de validação?

431

Achei isso confuso quando uso a caixa de ferramentas de redes neurais no Matlab.
Ele dividiu o conjunto de dados brutos em três partes:

  1. conjunto de treinamento
  2. conjunto de validação
  3. Conjunto de teste

Percebo que em muitos algoritmos de treinamento ou aprendizado, os dados geralmente são divididos em duas partes, o conjunto de treinamento e o conjunto de teste.

Minhas perguntas são:

  1. qual é a diferença entre conjunto de validação e conjunto de teste?
  2. O conjunto de validação é realmente específico da rede neural? Ou é opcional.
  3. Para ir além, existe uma diferença entre validação e teste no contexto do aprendizado de máquina?
xiaohan2012
fonte
56
A pergunta é respondida no livro Elementos da aprendizagem estatística, página 222. O conjunto de validação é usado para a seleção do modelo, o conjunto de testes para o erro de previsão do modelo final (o modelo que foi selecionado pelo processo de seleção).
Mvctas
@mpiktas Você está se referindo ao capítulo "Avaliação e seleção de modelos"?
Celdor
2
Sim. O número da página era da 5ª edição impressa.
Mvctas
13
@mpiktas está no local. Aqui está o texto real: #The training set is used to fit the models; the validation set is used to estimate prediction error for model selection; the test set is used for assessment of the generalization error of the final chosen model. Ideally, the test set should be kept in a “vault,” and be brought out only at the end of the data analysis.
23316
1
Também gosto da explicação de Jason Brownlee .
Delrocco

Respostas:

254

Normalmente, para executar um aprendizado supervisionado, você precisa de dois tipos de conjuntos de dados:

  1. Em um conjunto de dados (seu "padrão-ouro"), você tem os dados de entrada juntamente com a saída correta / esperada. Esse conjunto de dados geralmente é devidamente preparado por humanos ou pela coleta de alguns dados de maneira semi-automática. Mas é importante que você tenha a saída esperada para cada linha de dados aqui, porque você precisa disso para aprendizado supervisionado.

  2. Os dados aos quais você aplicará seu modelo. Em muitos casos, esses são os dados nos quais você está interessado na saída do seu modelo e, portanto, ainda não tem nenhuma saída "esperada" aqui.

Ao executar o aprendizado de máquina, faça o seguinte:

  1. Fase de treinamento: você apresenta seus dados do seu "padrão ouro" e treina seu modelo, combinando a entrada com a saída esperada.
  2. Fase de validação / teste: para estimar o quão bem seu modelo foi treinado (que depende do tamanho dos seus dados, do valor que você gostaria de prever, inserir etc.) e estimar as propriedades do modelo (erro médio para preditores numéricos, erros de classificação para classificadores, recall e precisão para modelos IR etc.)
  3. Fase de aplicação: agora você aplica seu modelo recém-desenvolvido aos dados do mundo real e obtém os resultados. Como você normalmente não possui nenhum valor de referência nesse tipo de dados (caso contrário, por que você precisaria do seu modelo?), Você só pode especular sobre a qualidade da saída do seu modelo usando os resultados da sua fase de validação.

A fase de validação geralmente é dividida em duas partes :

  1. Na primeira parte, basta olhar para seus modelos e selecionar a abordagem de melhor desempenho usando os dados de validação (= validação)
  2. Então você estima a precisão da abordagem selecionada (= teste).

Daí a separação para 50/25/25.

Caso você não precise escolher um modelo apropriado a partir de várias abordagens concorrentes, basta subdividir seu conjunto de que você basicamente possui apenas um conjunto de treinamento e um conjunto de testes, sem executar a validação do seu modelo treinado. Eu, pessoalmente, particioná-los 70/30 então.

Veja também esta pergunta .

Alexander Galkin
fonte
21
Por que não escolheria o modelo com melhor desempenho com base no conjunto de testes, me livrando completamente do conjunto de validação?
Sebastian Graf
4
É por causa do excesso de ajuste? Ou porque queremos algumas estatísticas independentes baseadas no resultado do teste, apenas para estimativa de erros?
Sebastian Graf
12
@Sebastian [Se você usar somente o conjunto de teste:] "O erro conjunto de teste da final escolheu modelo irá subestimar o erro de teste de verdade, às vezes de forma significativa" [Hastie et al]
user695652
23
O conjunto de validação é frequentemente usado para ajustar hiperparâmetros. Por exemplo, na comunidade de aprendizagem profunda, ajustando o tamanho da camada de rede, número da unidade oculta, prazo de regularização (wether L1 ou L2) depende do conjunto de validação
xiaohan2012
2
Qual é a maneira correta de dividir os conjuntos? A seleção deve ser aleatória? E se você tiver fotos semelhantes? Isso não prejudicará sua capacidade de generalizar? Se você tiver dois conjuntos em locais separados, não seria melhor usar um como conjunto de treinamento e o outro como conjunto de teste?
Yonatan Simson 03/02
263

Conjunto de treinamento: um conjunto de exemplos usados ​​para aprender: ajustar os parâmetros do classificador No caso do Multilayer Perceptron (MLP), usaríamos o conjunto de treinamento para encontrar os pesos “ideais” com a regra de suporte posterior

Conjunto de validação: um conjunto de exemplos usados ​​para ajustar os parâmetros de um classificador. No caso MLP, usaríamos o conjunto de validação para encontrar o número “ótimo” de unidades ocultas ou determinar um ponto de parada para o algoritmo de retropropagação

Conjunto de testes: um conjunto de exemplos usados ​​apenas para avaliar o desempenho de um classificador totalmente treinado. No caso da MLP, usaríamos o teste para estimar a taxa de erro após escolher o modelo final (tamanho da MLP e pesos reais). o modelo final no conjunto de teste, você NÃO DEVE mais ajustá-lo!

Por que separar conjuntos de teste e validação? A estimativa da taxa de erro do modelo final nos dados de validação será enviesada (menor que a taxa de erro real), pois o conjunto de validação é usado para selecionar o modelo final. Após avaliar o modelo final no conjunto de teste, NÃO DEVE ajustar o modelo. mais distante!

Fonte: Introdução à Análise de Padrões, Ricardo Gutierrez-OsunaTexas Universidade A&M, Texas A&M University

mohsen najafzadeh
fonte
42
+1 em "VOCÊ NÃO DEVE ajustar o modelo mais!"
Stmax
6
Qual é a diferença entre "ajustar os parâmetros" e "ajustar os parâmetros"?
Metariat 6/08/2015
18
@stmax Para não ser pedante, mas uma vez que tenhamos o nosso erro de teste final e NÃO estamos satisfeitos com o resultado, o que faremos se não pudermos ajustar nosso modelo mais? ... Eu sempre me perguntei sobre esse caso.
Spacey
5
@ Tarantula, você pode continuar ajustando o modelo, mas precisará coletar um novo conjunto de testes. É claro que ninguém faz isso;) mas violar isso (especialmente quando você o repete várias vezes) pode levar o seu modelo a se ajustar ao conjunto de testes - o que resulta em pontuações irrealistas / otimistas demais.
stmax
4
Eu acho que essa nomenclatura é confusa. Você está certo ao dizer "NÃO DEVE ajustar o modelo mais" depois de usar o conjunto de testes, mas ... que área você pretendia fazer? Parar de trabalhar nisso? Na realidade, você precisa de toda uma hierarquia de conjuntos de testes. 1: Conjunto de validação - usado para ajustar um modelo, 2: Conjunto de teste, usado para avaliar um modelo e ver se você deve voltar à prancheta, 3: Conjunto de super teste, usado no algoritmo final-final para ver como é bom, 4: conjunto de hiper-teste, usado depois que os pesquisadores desenvolvem algoritmos MNIST há 10 anos para ver o quão loucamente
super adequados
66

Meus 5 anos de experiência em Ciência da Computação me ensinaram que nada é melhor que a simplicidade.

O conceito de conjuntos de dados 'Treinamento / Validação Cruzada / Teste' é tão simples quanto isso. Quando você tem um grande conjunto de dados, é recomendável dividi-lo em três partes:

++ Conjunto de treinamento (60% do conjunto de dados original): usado para criar nosso algoritmo de previsão. Nosso algoritmo tenta se ajustar às peculiaridades dos conjuntos de dados de treinamento. Nesta fase, geralmente criamos vários algoritmos para comparar seus desempenhos durante a fase de validação cruzada.

++ Conjunto de validação cruzada (20% do conjunto de dados original): esse conjunto de dados é usado para comparar os desempenhos dos algoritmos de previsão criados com base no conjunto de treinamento. Escolhemos o algoritmo que tem o melhor desempenho.

++ Conjunto de testes (20% do conjunto de dados original): agora escolhemos nosso algoritmo de previsão preferido, mas ainda não sabemos como ele será executado em dados do mundo real completamente invisíveis. Portanto, aplicamos o algoritmo de previsão escolhido em nosso conjunto de testes para ver como ele será executado, para que possamos ter uma idéia sobre o desempenho do algoritmo em dados invisíveis.

Notas:

-É muito importante lembrar que ignorar a fase de teste não é recomendado, porque o algoritmo que teve um bom desempenho durante a fase de validação cruzada não significa realmente que é realmente o melhor, porque os algoritmos são comparados com base na cruz conjunto de validação e suas peculiaridades e ruídos ...

-Durante a fase de teste, o objetivo é ver como o nosso modelo final será tratado de forma natural; portanto, se seu desempenho for muito ruim, devemos repetir todo o processo a partir da fase de treinamento.

innovIsmail
fonte
1
é fácil e confuso referir-se aos conjuntos como fases e vice-versa.
Matt O'Brien
2
@innovIsmail E se eu pular a etapa de validação? Digamos que eu tenha muitos algoritmos e treinei-los no conjunto de trem, então eu apenas aplicar todos eles para o conjunto de teste, então eu escolher aquele que tem o melhor desempenho no conjunto de teste
KevinKim
3
Parece-me que você está apenas pulando a etapa do teste.
Mihai Danila
1
> compare o desempenho dos algoritmos de previsão - o que é "um algoritmo" nesse contexto? seu modelo não é um algoritmo? é preciso construir vários modelos e treiná-los separadamente para obter várias fases para validar?
Boppity Bop
2
Essa simplicidade é uma ilusão, porque na situação de tamanho de amostra não grande, obteremos algoritmos preditivos substancialmente diferentes e resultados de validação caso as divisões aleatórias tenham sido repetidas.
Frank Harrell
33

Em cada etapa em que você é solicitado a tomar uma decisão (ou seja, escolha uma opção entre várias opções), você deve ter um conjunto / partição adicional para avaliar a precisão de sua escolha, para não escolher simplesmente o resultado mais favorável da aleatoriedade e confundir o final da distribuição com o centro 1 . A esquerda é o pessimista. O certo é o otimista. O centro é o pragmatista. Seja o pragmático.

insira a descrição da imagem aqui

Etapa 1) Treinamento: Cada tipo de algoritmo tem suas próprias opções de parâmetro (o número de camadas em uma rede neural, o número de árvores em uma floresta aleatória, etc.). Para cada um dos seus algoritmos, você deve escolher uma opção. É por isso que você tem um conjunto de treinamento.

Etapa 2) Validando: Agora você tem uma coleção de algoritmos. Você deve escolher um algoritmo. É por isso que você tem um conjunto de testes. A maioria das pessoas escolhe o algoritmo com melhor desempenho no conjunto de validação (e tudo bem). Mas, se você não mede a taxa de erro do seu algoritmo com melhor desempenho no conjunto de testes e apenas acompanha a taxa de erro no conjunto de validação, confundiu cegamente o "melhor cenário possível" para o "cenário mais provável". Essa é uma receita para o desastre.

Etapa 3) Teste: Suponho que se seus algoritmos não tivessem nenhum parâmetro, você não precisaria de uma terceira etapa. Nesse caso, sua etapa de validação seria sua etapa de teste. Talvez o Matlab não solicite parâmetros ou você tenha optado por não usá-los, e essa é a fonte da sua confusão.

1 Muitas vezes, é útil entrar em cada etapa com a suposição (hipótese nula) de que todas as opções são iguais (por exemplo, todos os parâmetros são iguais ou todos os algoritmos são iguais), daí a minha referência à distribuição.

2 Esta imagem não é minha. Eu o tirei deste site: http://www.teamten.com/lawrence/writings/bell-curve.png

Ryan Zotti
fonte
3
Penso que a primeira frase capta a resposta fundamental a esta pergunta melhor do que qualquer outra resposta. "Em cada etapa em que você é solicitado a tomar uma decisão (ou seja, escolha uma opção entre várias opções), você deve ter um conjunto / partição adicional para avaliar a precisão de sua escolha ..."
kobejohn
Pergunta: Se eu quero encontrar o melhor RandomForest (RF) e fingir que existe apenas um hiper parâmetro de RF, que é o número de árvores (N), na etapa 1, corro muitos RF com N diferente para construir a floresta ; na etapa 2, aplique-as no teste de validação e escolha a RF com N * que apresenta o menor erro sobre o teste de validação; em seguida, na etapa3, aplico a RF com N * ao conjunto de testes e obtenho uma estimativa imparcial do verdadeiro erro de teste dessa RF com N *. Mas eu poderia aplicar todas as minhas RFs no conjunto de testes e escolher a que apresentasse o menor erro de teste, que pode não ser N *. Então esse é o ponto de fazer a validação step2?
KevinKim
1
@KevinKim: Se você aplicar seu conjunto de testes a todas as RFs e usar os resultados para fazer outra escolha (escolha outro modelo), basta repetir a etapa de validação. Você decidiu "Preciso obter o menor erro com um modelo!". Esse é o ponto de treinar e validar, NÃO testar. O teste é apenas sobre: ​​eu treinei e escolhi um modelo, agora vamos ver como ele funciona "em geral". Obviamente, o conjunto de testes "geral" é apenas mais uma fatia de dados que pode ou não estar super ajustada, mas o ponto é que VOCÊ não ajustou conscientemente seu modelo a ele por escolhas.
Honeybear
A divisão tríplice é apenas uma abordagem muito comum (A) para fornecer uma idéia de como o modelo generaliza (B) com esforço limitado e (C) dados observados limitados. Se você deseja fazer melhor em termos de (B), pode fazer o que está sugerindo: Use conjuntos de validação diferentes para ajustar a generalização. Com dados limitados chamados validação cruzada: repita o treinamento e a validação com conjuntos de testes e treinamentos variados (para redes neurais em que o treinamento pode levar semanas, isso não é uma coisa).
Honeybear
1
MAS: O desempenho do modelo "no mundo real" ainda é desconhecido. É apenas uma suposição validada e testada, que ele terá um bom desempenho em dados não vistos e, para fins científicos, isso geralmente é considerado suficiente. Se você agora voltar a gerar e selecionar modelos, até que um ajuste o conjunto de validação E o conjunto de testes perfeitamente, você degenerou seu conjunto de testes para um conjunto de validação. Melhor fazer a validação cruzada para isso. Caso seu desempenho seja constantemente significativamente pior no conjunto de testes, é sempre uma opção que seus dados sejam apenas mal divididos e você deseje reiniciar com conjuntos reorganizados.
Honeybear
21

Não se segue que você precisa dividir os dados de qualquer maneira. O bootstrap pode fornecer estimativas menores de erro ao quadrado médio da precisão da previsão usando toda a amostra para desenvolver e testar o modelo.

Frank Harrell
fonte
1
Portanto, você não defende a validação cruzada através da divisão de grandes conjuntos de dados para teste / validação de modelo preditivo?
OFish
9
Não, a menos que o conjunto de dados seja enorme ou a relação sinal: ruído seja alta. A validação cruzada não é tão precisa quanto a inicialização na minha experiência e não usa todo o tamanho da amostra. Em muitos casos, você deve repetir a validação cruzada de 50 a 100 vezes para obter a precisão adequada. Mas em seus conjuntos de dados tem mais de 20.000 assuntos, abordagens simples, como validação de amostras divididas, geralmente são boas.
Frank Harrell
2
É muito bom saber disso! Obrigado. E vindo de você, essa é uma ótima "fonte" de informações. Felicidades!
OFish
1
A validação de amostra dividida geralmente apresenta desempenho pior que o rigoroso bootstrap. Crie uma aparência de autoinicialização externa que repita todas as etapas de aprendizado supervisionado (todas as etapas que usam Y). O bootstrap de otimismo Efron-Gong estima quanto o modelo preditivo se desintegra em dados não vistos pelo algoritmo, sem reter dados.
Frank Harrell
1
Sim, com ênfase na repetição . É a divisão única que é problemática.
Frank Harrell
13

Uma tarefa típica de aprendizado de máquina pode ser visualizada como o seguinte loop aninhado:

while (error in validation set > X) {
    tune hyper-parameters
    while (error in training set > Y) {
        tune parameters
    }
}

Normalmente, o loop externo é realizado por humanos , no conjunto de validação , e o loop interno pela máquina , no conjunto de treinamento . Você precisa de um terceiro conjunto de testes para avaliar o desempenho final do modelo.

Em outras palavras, o conjunto de validação é o conjunto de treinamento para humanos.

Yu Zhou
fonte
9

Uma maneira de pensar nesses três conjuntos é que dois deles ( traininge validation) vêm do passado, enquanto o testconjunto vem do "futuro". O modelo deve ser construído e ajustado usando dados do "passado" ( training/ validationdata), mas nunca testdados provenientes do "futuro".

Para dar um exemplo prático, digamos que estamos construindo um modelo para prever o desempenho dos jogadores de beisebol no futuro. Usaremos dados de 1899-2014 para criar um teste validationdefinir. Depois que o modelo for construído e ajustado nesses dados, usaremos os dados de 2015 (na verdade no passado!) Como um conjunto de testes, que, da perspectiva do modelo, parece dados "futuros" e de forma alguma influenciou a criação do modelo . (Obviamente, em teoria, poderíamos esperar pelos dados de 2016 se realmente quisermos!)

Obviamente, estou usando aspas em todos os lugares, porque a ordem temporal real dos dados pode não coincidir com o futuro real (por definição, toda a geração de dados provavelmente ocorreu no passado real). Na realidade, o testconjunto pode ser simplesmente dados do mesmo período que os conjuntos training/ validationque você "espera". Dessa maneira, não teve influência no ajuste do modelo, mas esses dados não são realmente provenientes do futuro.

thecity2
fonte
4
Depois de ler todas as outras respostas, essa resposta fez com que "clique" para mim! Você treina com o conjunto de trens, verifique se não está se ajustando demais ao conjunto de validação (e se o modelo e os hiperparâmetros funcionam com "dados desconhecidos") e depois avalia com o conjunto de testes - "novos dados" - se você agora tem quaisquer poderes preditivos ..!
22417 stolsvik
Essa é uma maneira justa de ver no sentido de que os testdados nunca devem fazer parte do processo de treinamento: e se os tratarmos como dados "futuros", isso se tornará um erro impossível de se cometer.
javadba 20/03
7

A maioria dos algoritmos de mineração de dados supervisionados segue estas três etapas:

  1. O conjunto de treinamento é usado para construir o modelo. Contém um conjunto de dados que possui variáveis ​​pré-classificadas de destino e preditor.
  2. Normalmente, um conjunto de dados ou conjunto de testes de reserva é usado para avaliar o desempenho do modelo com dados fora do conjunto de treinamento. O conjunto de testes contém os dados dos resultados pré-classificados, mas eles não são usados ​​quando os dados do conjunto de testes são executados no modelo até o final, quando os dados pré-classificados são comparados com os resultados do modelo. O modelo é ajustado para minimizar erros no conjunto de teste.
  3. Outro conjunto de dados de espera ou conjunto de validação é usado para avaliar o modelo ajustado na etapa 2, onde, novamente, os dados do conjunto de validação são executados no modelo ajustado e os resultados são comparados aos dados pré-classificados não utilizados.
Scott
fonte
4

Algumas pessoas ficam confusas sobre o motivo de usarmos um conjunto de validação, portanto, darei uma explicação simples e intuitiva do que acontecerá se você não usar um conjunto de dados de validação.

Se você não usar um conjunto de validação, terá que escolher hiperparâmetros e decidir quando parar o treinamento com base no desempenho do modelo no conjunto de dados de teste. Se você decidir quando interromper o treinamento com base no desempenho do modelo no conjunto de dados de teste, poderá parar o treinamento quando o modelo tiver um bom desempenho no conjunto de dados de teste. Em seguida, ao relatar seus resultados, você relata a precisão no conjunto de dados de teste. O problema é que você poderia dizer que seu modelo se saiu muito bem quando, na verdade, foi apenas uma variação aleatória que fez com que ele se saísse melhor apenas no conjunto de testes.

Se você usar um conjunto de validação para decidir quando interromper o treinamento, a precisão do modelo no conjunto de testes será mais um reflexo imparcial de quão bem ele é executado na tarefa em geral e mostra que você não otimizou o modelo apenas para ter um bom desempenho no conjunto de testes.

dan dan
fonte
2

Eu gostaria de acrescentar outras respostas muito boas aqui, apontando para uma abordagem relativamente nova no aprendizado de máquina chamada "privacidade diferencial" (consulte os artigos de Dwork; o Blog do Vetor Win para obter mais informações). A ideia permite realmente reutilizar o conjunto de testes sem comprometer o desempenho do modelo final. Em uma configuração típica, o conjunto de testes é usado apenas para estimar o desempenho final; idealmente, nem se pode olhar para ele.

Como está bem descrito neste blog do Win Vector (consulte também outras entradas), é possível "usar" o conjunto de testes sem influenciar o desempenho do modelo. Isso é feito usando o procedimento especial chamado "privacidade diferencial". O aluno não terá acesso direto ao conjunto de testes.

Vladislavs Dovgalecs
fonte
-1

Minha idéia é que essas opções na caixa de ferramentas de redes neurais sejam para evitar ajustes excessivos. Nesta situação, os pesos são especificados apenas para os dados de treinamento e não mostram a tendência global. Por ter um conjunto de validação, as iterações são adaptáveis ​​para onde diminuições no erro de dados de treinamento causam diminuições nos dados de validação e aumentos no erro de dados de validação; juntamente com a diminuição do erro nos dados de treinamento, isso demonstra o fenômeno de super adaptação.

Azade
fonte
Ouso dizer que os conjuntos de testes adicionam uma verificação de sanidade a todo o processo. Você pode ter uma curva de treinamento que replica a curva de validação / perda a cada época. Mas se a precisão do seu conjunto de testes não melhorar com épocas ou tanques, você não terá condições de fazê-lo. Você está se ajustando demais.
agcala 02/04