Conjuntos de dados: como dividir o conjunto de dados original
Todos os bons projetos de engenharia de software dedicam energia considerável ao
teste dos apps. Da mesma forma, recomendamos testar seu
modelo de ML para determinar a precisão das previsões.
Conjuntos de treinamento, validação e teste
Teste um modelo com um conjunto de exemplos diferente do que foi
usado para treinar o modelo. Como você vai aprender
um pouco mais tarde, o teste
em exemplos diferentes é uma prova mais forte da adequação do modelo do que o teste
no mesmo conjunto de exemplos.
Onde você encontra esses exemplos diferentes? Tradicionalmente, no aprendizado de máquina,
você recebe esses exemplos diferentes dividindo o conjunto de dados original. Portanto, você pode
supor que precisa dividir o conjunto de dados original em dois subconjuntos:
Suponha que você treine no conjunto de treinamento e avalie no conjunto de teste
em várias rodadas. Em cada rodada, você usa os resultados do conjunto de testes
para orientar como atualizar os hiperparâmetros e o conjunto de recursos. Você
identificou algum problema com essa abordagem? Escolha apenas uma resposta.
Fazer muitas rodadas desse procedimento pode fazer com que o modelo
se ajuste implicitamente às peculiaridades do conjunto de testes.
Sim. Quanto mais vezes você usar o mesmo conjunto de testes,
maior será a probabilidade de o modelo se ajustar ao conjunto de testes.
Assim como um professor "ensinando para o teste", o modelo se encaixa inadvertidamente
no conjunto de teste, o que pode dificultar a adaptação dos dados reais.
Essa abordagem está correta. Afinal, você está treinando no conjunto de treinamento e avaliando em um conjunto de teste separado.
Na verdade, há um problema sutil aqui. Pense no que pode
dar errado aos poucos.
Essa abordagem é computacionalmente ineficiente. Não mude
os hiperparâmetros ou conjuntos de recursos após cada rodada de testes.
Testes frequentes são caros, mas essenciais. No entanto, os testes frequentes são muito menos caros do que o treinamento adicional. A otimização de hiperparâmetros e o conjunto de recursos pode melhorar significativamente a qualidade do modelo. Portanto, sempre reserve tempo e recursos computacionais para trabalhar neles.
Dividir o conjunto de dados em dois conjuntos é uma boa ideia, mas
uma abordagem melhor é dividir o conjunto de dados em três subconjuntos.
Além do conjunto de treinamento e do conjunto de teste, o terceiro subconjunto é:
Um conjunto de validação
realiza o teste inicial no modelo enquanto ele está sendo treinado.
Use o conjunto de validação para avaliar os resultados do conjunto de treinamento.
Depois que o uso repetido do conjunto de validação sugerir que o modelo está
fazendo boas previsões, use o conjunto de teste para verificar novamente o modelo.
A figura a seguir sugere esse fluxo de trabalho.
Na figura, "Tweak model" significa ajustar qualquer coisa sobre o modelo, desde a taxa de aprendizado, a adição ou remoção de recursos até a criação de um modelo completamente novo do zero.
Ao final desse fluxo de trabalho, você escolhe o modelo que tem o melhor desempenho no conjunto de teste.
O fluxo de trabalho mostrado na Figura 10 é ideal, mas, mesmo com ele,
os conjuntos de teste e de validação ainda "se desgastam" com o uso repetido.
Ou seja, quanto mais você usar os mesmos dados para tomar decisões sobre as configurações de hiperparâmetros ou outras melhorias do modelo, menor será a confiança de que o modelo vai fazer boas previsões com novos dados.
Por isso, é recomendável coletar mais dados para "atualizar" o conjunto de teste e o conjunto de validação. Começar de novo é uma ótima redefinição.
Exercício: verificar sua intuição
Você misturou todos os exemplos no conjunto de dados e dividiu
os exemplos em conjuntos de treinamento, validação e teste. No entanto, o valor de perda no conjunto de testes é tão baixo
que você suspeita de um erro. O que pode ter dado errado?
Muitos dos exemplos no conjunto de teste são duplicatas de exemplos
no conjunto de treinamento.
Sim. Isso pode ser um problema em um conjunto de dados com muitos exemplos redundantes. É altamente recomendável excluir exemplos duplicados do
conjunto de testes antes do teste.
O treinamento e o teste não são determinísticos. Às vezes, por acaso,
a perda do teste é muito baixa. Execute o teste novamente para confirmar o
resultado.
Embora a perda varie um pouco em cada execução, ela não deve variar tanto
que você pense que ganhou a loteria de machine learning.
Por acaso, o conjunto de teste continha exemplos em que o
modelo teve um bom desempenho.
Os exemplos foram bem misturados, então isso é extremamente improvável.
Outros problemas com séries de testes
Como a pergunta anterior ilustra, exemplos duplicados podem afetar a avaliação do modelo.
Depois de dividir um conjunto de dados em conjuntos de treinamento, validação e teste,
exclua todos os exemplos no conjunto de validação ou de teste que sejam duplicatas de
exemplos no conjunto de treinamento. O único teste justo de um modelo é contra
novos exemplos, não cópias.
Por exemplo, considere um modelo que prevê se um e-mail é spam usando
o assunto, o corpo do e-mail e o endereço de e-mail do remetente como recursos.
Suponha que você divida os dados em conjuntos de treinamento e teste, com uma divisão de 80-20.
Após o treinamento, o modelo alcança 99% de precisão no conjunto de treinamento e
no conjunto de teste. Você provavelmente espera uma precisão menor no conjunto de teste. Por isso, você analisa os dados novamente e descobre que muitos dos exemplos no conjunto de teste
são duplicações de exemplos no conjunto de treinamento. O problema é que você
não limpou as entradas duplicadas do mesmo e-mail de spam do seu banco de dados
de entrada antes de dividir os dados. Você treinou acidentalmente com alguns dos seus dados de teste.
Em resumo, um bom conjunto de teste ou de validação atende a todos os
seguintes critérios:
Grande o suficiente para gerar resultados de teste estatisticamente significativos.
Representa o conjunto de dados como um todo. Em outras palavras, não escolha
um conjunto de teste com características diferentes do conjunto de treinamento.
Representam os dados reais que o modelo vai encontrar
como parte do objetivo de negócios.
Zero exemplos duplicados no conjunto de treinamento.
Exercícios: teste seu conhecimento
Considerando um único conjunto de dados com um número fixo de exemplos,
qual das afirmações a seguir é verdadeira?
Cada exemplo usado no teste do modelo é um exemplo a menos usado
no treinamento do modelo.
A divisão de exemplos em conjuntos de treinamento/teste/validação é um jogo de soma zero.
Essa é a compensação central.
O número de exemplos no conjunto de teste precisa ser maior que o número de exemplos no conjunto de validação.
Em teoria, o conjunto de validação e o teste precisam conter o mesmo número de exemplos ou quase isso.
O número de exemplos no conjunto de teste precisa ser maior que o número de exemplos no conjunto de validação ou de treinamento.
O número de exemplos no conjunto de treinamento geralmente é maior do que o número de exemplos no conjunto de validação ou de teste. No entanto, não há requisitos de porcentagem para os diferentes conjuntos.
Suponha que seu conjunto de teste tenha exemplos suficientes para realizar um teste estatisticamente significativo. Além disso, o teste em relação
ao conjunto de teste gera uma perda baixa. No entanto, o modelo teve um desempenho ruim no mundo real. O que você deve fazer?
Determine como o conjunto de dados original é diferente dos dados reais.
Sim. Mesmo os melhores conjuntos de dados são apenas um resumo dos dados reais.
A verdade
tende a mudar com o tempo. Embora o conjunto de teste tenha correspondido bem ao conjunto de treinamento para sugerir uma boa qualidade do modelo, ele provavelmente não corresponde aos dados reais.
Talvez seja necessário treinar e testar novamente com um novo conjunto de dados.
Faça o teste novamente no mesmo conjunto de testes. Os resultados do teste podem ter sido
uma anomalia.
Embora o novo teste possa gerar resultados ligeiramente diferentes,
essa tática provavelmente não é muito útil.
Quantos exemplos o conjunto de testes deve conter?
Exemplos suficientes para gerar um teste estatisticamente significativo.
Sim. Quantos exemplos são? Você vai precisar testar.
Pelo menos 15% do conjunto de dados original.
15% pode ou não ser um número suficiente de exemplos.