No artigo em que detectamos câncer de mama com KNN, dividimos o conjunto de dados em duas partes: uma reservada para treino e outra para teste. Neste texto, falaremos sobre como dividir seu conjunto de dados para treinamento e teste de modelos de machine learning.
Como dividir seu conjunto de dados: Para quê dividir?
Dividir o conjunto de dados é importante para evitar algo chamado overfitting. Esse termo é usado para nomear a especialização do algoritmo no conjunto de dados. Mas isso não seria bom?
Na verdade, não. Se o conjunto de dados representasse 100% da população total, talvez isso fosse útil. Mas devemos sempre lembrar que o conjunto de dados é uma amostra de uma população, ou seja, ele não é exatamente fiel a sua população, pois muitos elementos ficaram de fora dele, elementos que temos interesse em classificar.
O ideal é que o modelo tenha a capacidade de generalização, ou seja, capacidade de acertar a uma taxa alta, porém constante. Se o modelo virar um especialista no conjunto de dados, ele pode ter um desempenho de 100% daquele conjunto, mas ao testar ele com outros elementos, ele tem um desempenho ruim.
Então, precisamos dividir o conjunto de dados em 3 partes: treino, teste e validação. Fazendo isso, podemos fazer o treinamento do modelo com uma parte separada do conjunto de dados, e testá-lo em outra parte. Dessa forma, saberemos o real desempenho do modelo, pois ele estará trabalhando com dados que ele nunca viu antes.
Como dividir seu conjunto de dados: Treino, teste e validação
Geralmente, separamos a maior parte do conjunto de dados para treino, e uma parte menor para teste e validação. O tamanho destas últimas deve ser significativo, pelo menos 10% do conjunto de dados total. As proporções variam caso a caso, mas na dúvida, podemos adotar a seguinte proporção:
- 70% dos dados para treino
- 15% dos dados para teste
- 15% dos dados para validação
Os dados de treino servem para treinar o modelo. No caso, o modelo irá aprender a partir desses dados e eles têm que estar separados da validação e teste, para evitar overfitting.
Os dados de teste, servem para calcularmos o desempenho do modelo, acurácia e etc. É com esse conjunto que saberemos se o modelo realmente está aprendendo ou não alguma coisa com o conjunto de dados e o usaremos como métrica para avaliar o modelo.
Já os dados de validação são para teste de hiperparâmetros ou outros modelos. Se você quiser, pode usar o conjunto de teste e validação como o mesmo conjunto, é uma forma de abordar. Em redes neurais, por exemplo, podemos usar o conjunto de validação para testar número de neurônios da camada escondida, função ativação, e outros hiperparâmetros. Mas essa discussão é para outro artigo.
Conclusão
Em suma, aprendemos pra que serve a divisão de um conjunto de dados para treinamentos de modelos de machine learning. Nunca faça essas análises sem fazer as partições adequadamente, pois os resultados podem ser ilusórios. Em posts futuros, estaremos colocando em prática esses conceitos.