Por que apenas três partições? (treinamento, validação, teste)


61

Quando você está tentando ajustar modelos a um grande conjunto de dados, o conselho comum é particionar os dados em três partes: o conjunto de dados de treinamento, validação e teste.

Isso ocorre porque os modelos geralmente têm três "níveis" de parâmetros: o primeiro "parâmetro" é a classe do modelo (por exemplo, SVM, rede neural, floresta aleatória), o segundo conjunto de parâmetros são os parâmetros de "regularização" ou "hiperparâmetros" ( por exemplo, coeficiente de penalidade de laço, escolha de kernel, estrutura de rede neural) e o terceiro conjunto são geralmente considerados os "parâmetros" (por exemplo, coeficientes para as covariáveis).

Dada uma classe de modelo e uma opção de hiperparâmetros, seleciona-se os parâmetros, escolhendo os parâmetros que minimizam o erro no conjunto de treinamento. Dada uma classe de modelo, é possível ajustar os hiperparâmetros minimizando o erro no conjunto de validação. Um seleciona a classe do modelo pelo desempenho no conjunto de testes.

Mas por que não mais partições? Frequentemente, é possível dividir os hiperparâmetros em dois grupos e usar uma "validação 1" para ajustar o primeiro e "validação 2" para ajustar o segundo. Ou pode-se até tratar o tamanho dos dados de treinamento / dados de validação divididos como um hiperparâmetro a ser ajustado.

Isso já é uma prática comum em alguns aplicativos? Existe algum trabalho teórico sobre o particionamento ideal de dados?

Respostas:


79

Primeiro, acho que você está enganado sobre o que as três partições fazem. Você não faz escolhas com base nos dados de teste. Seus algoritmos ajustam seus parâmetros com base nos dados de treinamento. Em seguida, você os executa nos dados de validação para comparar seus algoritmos (e seus parâmetros treinados) e decidir sobre um vencedor. Em seguida, você executa o vencedor nos seus dados de teste para fornecer uma previsão de quão bem ele será no mundo real.

Você não valida os dados de treinamento, porque isso superaria seus modelos. Você não para na pontuação do vencedor da etapa de validação porque está ajustando iterativamente as coisas para obter um vencedor na etapa de validação e, portanto, precisa de um teste independente (para o qual você não está se ajustando especificamente) para fornecer um idéia de quão bem você vai fazer fora da arena atual.

Segundo, eu acho que um fator limitante aqui é a quantidade de dados que você possui. Na maioria das vezes, nem queremos dividir os dados em partições fixas, daí o CV.


2
A questão conceitual que tive foi que, se você estiver comparando modelos suficientes, estará se ajustando efetivamente aos dados de validação quando "decidir um vencedor" usando os dados de validação. Portanto, ainda pode ser um ponto para particionar os dados de validação.
charles.y.zheng

Penso que a camada de validação de treinamento e a de teste de validação servem a propósitos diferentes em algum sentido, e que você precisa comparar modelos em um conjunto de validação comum para declarar um vencedor. Portanto, não tenho certeza de que camadas adicionais ajudem. (Embora meu conhecimento não seja profundo o suficiente para realmente saber.) A coisa mais próxima que posso pensar em sua sugestão é como a competição pela Netflix foi realizada. Acredito que eles usaram conjuntos de testes parciais para impedir que as equipes subissem o gradiente do conjunto de testes, mas acho que é diferente.
Wayne

2
@ user10882, seu comentário não está correto, nem o Firebugs. Ambos os (1) parâmetros do modelo (pesos, limites) e (2) os chamados parâmetros "hiper" (número de camadas ocultas, número de árvores de decisão), podem ter uma interpretação e sensação muito diferentes, mas são apenas parâmetros que distinguem entre diferentes modelos . Use os dados de treinamento para otimizar todos eles, use os dados de validação para evitar ajustes excessivos e use a validação cruzada para garantir que seus resultados sejam estáveis. Os dados de teste servem apenas para especificar o desempenho esperado do seu modelo, não os utilize para aceitá-lo / rejeitá-lo.
Ytsen de Boer

1
n

1
@YtsendeBoer: É justo - se você usar o sth como uma parada antecipada baseada em validação, concordo que os limites sejam borrados, pelo menos em termos do procedimento de otimização. Na minha opinião, isso não mescla completamente o conceito de "hiperparâmetro" com o de um normal. Ainda existem muitas situações em que eles são tratados de maneira diferente, e eu também penso sobre eles de maneira diferente em termos de seus papéis na definição de um modelo. De qualquer forma, espero que essa discussão tenha sido útil para outros para ilustrar as (sutis) diferenças e semelhanças entre esses conceitos =).
Ruben van Bergen

0

Esta é uma pergunta interessante, e achei útil com a resposta de @Wayne.

Pelo meu entendimento, dividir o conjunto de dados em diferentes partições depende do objetivo do autor e do requisito do modelo na aplicação no mundo real.

Normalmente, temos dois conjuntos de dados: treinamento e teste. O treinamento é usado para encontrar os parâmetros dos modelos ou para ajustá-los. O teste é usado para avaliar o desempenho do modelo em dados não vistos (ou dados do mundo real).

Se apenas dermos um passo no treinamento, é óbvio que há um processo de treinamento e um teste (ou validação).

No entanto, dessa maneira, pode surgir o problema de excesso de ajuste quando o modelo é treinado com um conjunto de dados, uma vez. Isso pode levar à instabilidade do modelo no problema do mundo real. Uma maneira de resolver esse problema é validar cruzadamente (CV) o modelo no conjunto de dados de treinamento. Isso significa que dividimos o conjunto de dados de treinamento em dobras diferentes, mantendo uma dobra para testar o modelo que é treinado com outras dobras. O vencedor é agora o que apresenta perda mínima (com base em nossa própria função objetiva) em todo o processo do CV. Ao fazer isso, podemos garantir que minimizamos a chance de excesso de ajuste no processo de treinamento e selecionamos o vencedor certo. O conjunto de testes é novamente usado para avaliar o vencedor nos dados invisíveis.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.