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?
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:
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!
fonte
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:
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.
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ê '
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.
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.
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.
fonte
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.
fonte