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:
- conjunto de treinamento
- conjunto de validação
- 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:
- qual é a diferença entre conjunto de validação e conjunto de teste?
- O conjunto de validação é realmente específico da rede neural? Ou é opcional.
- Para ir além, existe uma diferença entre validação e teste no contexto do aprendizado de máquina?
machine-learning
validation
xiaohan2012
fonte
fonte
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.
Respostas:
Normalmente, para executar um aprendizado supervisionado, você precisa de dois tipos de conjuntos de dados:
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.
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:
A fase de validação geralmente é dividida em duas partes :
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 .
fonte
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
fonte
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.
fonte
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.
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
fonte
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.
fonte
Uma tarefa típica de aprendizado de máquina pode ser visualizada como o seguinte loop aninhado:
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.
fonte
Uma maneira de pensar nesses três conjuntos é que dois deles (
training
evalidation
) vêm do passado, enquanto otest
conjunto vem do "futuro". O modelo deve ser construído e ajustado usando dados do "passado" (training
/validation
data), mas nuncatest
dados 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
test
evalidation
definir. 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
test
conjunto pode ser simplesmente dados do mesmo período que os conjuntostraining
/validation
que você "espera". Dessa maneira, não teve influência no ajuste do modelo, mas esses dados não são realmente provenientes do futuro.fonte
test
dados 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.A maioria dos algoritmos de mineração de dados supervisionados segue estas três etapas:
fonte
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.
fonte
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.
fonte
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.
fonte