É sempre melhor usar todo o conjunto de dados para treinar o modelo final?


24

Uma técnica comum após o treinamento, validando e testando o modelo de preferência do Machine Learning é usar o conjunto de dados completo, incluindo o subconjunto de testes, para treinar um modelo final para implementá- lo, por exemplo, em um produto.

Minha pergunta é: é sempre melhor fazê-lo? E se o desempenho realmente se deteriorar?

Por exemplo, vamos supor que o modelo tenha cerca de 65% na classificação do subconjunto de testes. Isso pode significar que o modelo não foi treinado de forma insuficiente OU que o subconjunto de testes consiste em discrepâncias. No último caso, treinar o modelo final com eles diminuiria seu desempenho e você descobrirá somente após a implantação.

Reescrevendo minha pergunta inicial:

Se você tivesse uma demonstração única de um modelo , como implantá-lo em eletrônica embarcada a bordo de um experimento caro de foguete, você confiaria em um modelo que foi treinado novamente com o subconjunto de teste na etapa final sem ser re-testado? testado em seu novo desempenho?

Respostas:


14

Depois de obter os hiperparâmetros ideais para o seu modelo, após o treinamento e a validação cruzada etc., em teoria, não há problema em treinar o modelo em todo o conjunto de dados para implantar na produção. Em teoria, isso generalizará melhor.

NO ENTANTO, você não pode mais fazer declarações estatísticas / de desempenho nos dados de teste, pois não há mais um conjunto de dados de teste.

Se você implantar um modelo na produção usando todo o conjunto de dados de treinamento e conhecer os verdadeiros valores da variável de destino dos novos dados recebidos (ou seja, os dados nos quais o modelo de produção está fazendo previsões), poderá calcular as métricas de desempenho em tempo real como esses novos dados são como dados de teste (não eram vistos pelo modelo durante o treinamento). A partir desse processo, você pode atualizar os hiperparâmetros dos modelos para obter melhor desempenho.

Mas se você soubesse os valores-alvo dos novos dados, por que você treinaria um modelo em primeiro lugar?

Em geral, eu diria que, se você tiver dados suficientes com variedade suficiente, embaralhe e divida os dados 80:20 training: test deve ser suficiente para treinar um modelo robusto e não precisa se preocupar com problemas de generalização (assumindo, é claro, que você regulariza o modelo).


Marcou com +1, obrigado pela resposta! parece que o aleatório embaralhamento do conjunto de dados antes da divisão em 80/20 provavelmente nos faz sentir "estatisticamente" confiantes (:
pcko1

2
O desempenho em seu conjunto de testes retido deve generalizar para toda a população, desde que você o tenha feito corretamente. Embora você não tenha um conjunto de testes depois de aplicar seu método a todo o conjunto de dados, o desempenho em seus conjuntos originais de treinamento / teste com validação cruzada é um estimador imparcial do desempenho do algoritmo de treinamento. Esse é o objetivo do CV - não treinar ou parametrizar um modelo, mas estimar o desempenho do processo de construção do modelo. Seu desempenho em qualquer conjunto de testes antes da modelagem de dados completos é sua estimativa de desempenho nos dados completos.
Nuclear Wang

13

Pergunta interessante. Pessoalmente, não vi isso para produtos entrando em produção, mas entendo a lógica.

Teoricamente, quanto mais dados seu modelo implantado tiver, melhor será generalizado. Portanto, se você treinou o modelo no conjunto completo de dados disponíveis, ele deve generalizar melhor do que um modelo que apenas tenha visto, por exemplo, conjuntos de trens / val (por exemplo, ~ 90%) a partir do conjunto completo de dados.

O problema com isso (e a razão pela qual dividimos os dados em conjuntos de trens / val / testes em primeiro lugar!) É que queremos poder fazer declarações estatísticas sobre a precisão dos dados não vistos. Assim que treinamos novamente um modelo em todos os dados, não é mais possível fazer tais afirmações.

[Editar]

Aqui está uma pergunta relacionada sobre validação cruzada , onde a resposta aceita faz pontos semelhantes a mim e menciona outras maneiras de fazer as coisas.


Fazemos um loop:

  1. treinar um modelo
  2. se satisfatório, vá para a etapa 5
  3. mudar modelo
  4. vá para o passo 1
  5. avaliar o desempenho no conjunto de testes
  6. Modelo atual com precisão de teste encontrado na etapa 5

Eventualmente, se você conseguir uma ótima pontuação no conjunto de testes, poderá afirmar que ele se generaliza bem. Portanto, a questão de saber se o treinamento no conjunto de dados completo melhorará o desempenho de dados futuros não vistos não é estritamente algo que você possa testar. Evidência empírica de melhor desempenho em outros conjuntos de problemas relacionados seria a única fonte ou orientação no momento em que você deve tomar a decisão.

Uma verificação de sanidade seria testar o modelo re-treinado novamente no conjunto de testes original; esperando ter uma pontuação mais alta do que nunca quando o modelo viu apenas o conjunto trem / válvula, porque ele realmente viu o conjunto de testes durante o treinamento. Isso não me deixaria 100% confiante de que este modelo final é superior em todos os casos futuros, mas pelo menos é o melhor possível com os dados fornecidos.

Talvez haja argumentos mais rigorosos contra fazer o que você diz (provavelmente motivado academicamente), mas parece atraente para aplicações práticas!


Marcou com +1, obrigado pelo seu esforço e por apontar essa postagem, eu perdi! Quanto à sua sugestão de testar o modelo em todo o conjunto de dados de treinamento no final, acho que você não obtém nenhuma visão valiosa sobre o resultado. Simplesmente porque o treinamento do algoritmo geralmente é baseado na otimização das funções de custo, o modelo treinado é ideal, dados os dados do treinamento. A baixa precisão nos dados do trem não significa que não é o ideal, apenas significa que simplesmente não pode melhorar, considerando o conjunto de dados e a arquitetura do algoritmo selecionado. Você não pode inferir nada por sua validade externa com isso.
pcko1

1
De nada! Concordo totalmente com sua afirmação (embora eu tenha dito para testar o modelo final treinado no teste de origem dados do , não para treinar). De qualquer forma, eu ainda gostaria de ver que o modelo final não fez algo completamente inesperado. Teoria e prática nem sempre alinhar :)
n1k31t4

6

Um ponto que precisa ser enfatizado sobre o aprendizado de máquina estatística é que não há garantias . Quando você estima o desempenho usando um conjunto estendido, isso é apenas uma estimativa . As estimativas podem estar erradas.

Isso leva algum tempo para se acostumar, mas é algo com o qual você terá que se acostumar. Quando você diz "E se o desempenho realmente se deteriorar?", A resposta é certa, isso pode acontecer. O desempenho real pode ser pior do que o estimado / previsto. Também poderia ser melhor. Ambos são possíveis. Isso é inevitável. Existe alguma incerteza inerente e irredutível.

Ao avaliar o desempenho usando um conjunto de testes retido, você está usando dados do passado para tentar prever o desempenho futuro. Como se costuma dizer, o desempenho passado não garante resultados futuros . Este é um fato da vida que nós apenas temos que aceitar.

Você não pode deixar isso imobilizá-lo. O fato de ser possível fazer pior do que o previsto não é um motivo para evitar a implantação na produção de um modelo treinado nos dados. Em particular, também é possível fazer mal se você não fizer isso. É possível que um modelo treinado em todos os dados (trem + validação + teste) seja pior do que um modelo treinado apenas na parte trem + validação. Também é possível que seja melhor. Portanto, em vez de procurar uma garantia, temos que nos perguntar: o que nos dá a melhor chance de sucesso? Qual é o mais provável de ser o mais eficaz?

E, nesse caso, quando você deseja implantar na produção, o melhor que você pode fazer é usar todos os dados disponíveis. Em termos de desempenho esperado, o uso de todos os dados não é pior do que o uso de alguns dados e é potencialmente melhor. Portanto, você também pode usar todos os dados disponíveis para treinar o modelo ao criar o modelo de produção. As coisas ainda podem dar errado - sempre é possível ter azar, sempre que você usa métodos estatísticos - mas isso oferece a melhor chance possível para que as coisas corram bem.

Em particular, a prática padrão é a seguinte:

  1. Reserve alguns dos seus dados em um conjunto de testes retido. Não existe uma regra rígida sobre qual fração usar, mas, por exemplo, você pode reservar 20% para o conjunto de testes e manter os 80% restantes para treinamento e validação. Normalmente, todas as divisões devem ser aleatórias.

  2. Em seguida, use os dados de treinamento e validação para experimentar várias arquiteturas e hiperparâmetros, experimentando para encontrar o melhor modelo possível. Pegue os 80% retidos para treinamento e validação e divida-os em um conjunto de treinamento e um conjunto de validação, e treine um modelo usando o conjunto de treinamento e meça sua precisão no conjunto de validação. Se você estiver usando a validação cruzada, faça isso dividido várias vezes e calcule a média dos resultados no conjunto de validação; caso contrário, você fará uma única divisão (por exemplo, uma divisão de 70% / 30% dos 80% ou algo assim) e avaliará o desempenho no conjunto de validação. Se você tiver muitos hiperparâmetros para tentar, faça isso uma vez para cada configuração candidata de hiperparâmetro. Se você tiver muitas arquiteturas para tentar, faça isso para cada arquitetura candidata. Você pode iterar isso, usando o que você '

  3. Quando estiver satisfeito, você congela a opção de arquitetura, hiperparâmetros, etc. Agora, sua experimentação está concluída. Depois de atingir esse ponto, você nunca poderá tentar outras opções novamente (sem obter um novo conjunto de testes) - portanto, não atinja esse ponto até ter certeza de que está pronto.

  4. Quando estiver pronto, você treinará um modelo no conjunto completo de treinamento + validação (80%) usando a arquitetura e os hiperparâmetros selecionados anteriormente. Em seguida, meça sua precisão no conjunto de testes retido. Essa é sua estimativa / previsão de quão precisa será essa abordagem de modelagem. Você recebe um único número aqui. Esse número é o que é: se você não estiver satisfeito com ele, não poderá voltar às etapas 1 e 2 e fazer mais experimentações; isso seria inválido.

  5. Por fim, para uso em produção, você pode treinar um modelo em todo o conjunto de dados, treinamento + validação + conjunto de testes e colocá-lo em uso em produção. Observe que você nunca mede a precisão desse modelo de produção, pois não possui dados restantes para fazer isso; você já usou todos os dados. Se você deseja uma estimativa de quão bem o desempenho será, você poderá usar a precisão estimada da etapa 4 como sua previsão do desempenho da produção, pois essa é a melhor previsão disponível de seu desempenho futuro. Como sempre, não há garantias - essa é apenas a melhor estimativa possível, dadas as informações disponíveis. Certamente é possível que isso possa ser pior do que você previu ou melhor do que você previu - isso sempre é verdade.


Marcou com +1 o esforço, mesmo que eu não concorde plenamente :) por exemplo, quando você menciona "Em termos de desempenho esperado, o uso de todos os dados não é pior do que o uso de alguns dados, e potencialmente melhor". Não vejo o raciocínio por trás disso. Por outro lado, o segundo ponto que você menciona parece muito importante, validação cruzada! essencialmente, você treina / valida com todas as amostras e, portanto, provavelmente rejeita discrepâncias no modelo final escolhido. Obrigado pela sua resposta.
pcko1

@ pcko1, o princípio é simples. Se você possui dados, deve usar todos ou alguns deles? Por quê? Talvez quando obtemos dados, antes de fazer qualquer coisa, devêssemos pegar 10% deles e jogá-los fora e nunca olhar para eles. De fato, se jogar fora alguns é bom, jogar fora é ainda melhor, então talvez devamos jogar fora todos os nossos dados. Isso é um absurdo, certo? Por quê? Veja se você consegue descobrir o porquê e tente aplicá-lo a essa situação. Espero que isso faça você pensar!
DW

3

Um dos motivos de ter um conjunto de dados é evitar o ajuste excessivo. Se você emprega validação cruzada, essencialmente permite que todo o conjunto de dados atue como o conjunto de treinamento, mas a reciclagem não permitirá que você valide se há sinais de sobreajuste. Eu acho que de qualquer maneira (validação cruzada ou reciclagem com todo o conjunto de dados) não deve alterar drasticamente o resultado (do meu palpite não instruído), mas você não poderá fazer o ajuste do hiperparâmetro ou validar o desempenho do modelo, pois não tenha um conjunto de teste. Se acaba sendo melhor, é difícil dizer, mas acho que a única maneira de saber é fazer um A / B dos dois modelos com dados reais ao longo do tempo.

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.