Automatizar a divisão de treino e teste em um dataset

Entendendo a importância da DIVISÃO.

Quando se trata de construir um modelo de machine learning, a qualidade dos dados é fundamental. Mas como garantir que seu modelo aprenda de forma eficaz a relação intrínseca dos dados existentes e generalize bem para novos dados?

Uma das respostas é a forma como o dataset é dividido

Imagine que você, Cientista de Dados, está treinando um modelo para identificar cães e gatos em imagens. Se você utilizar todas as imagens do seu dataset para treinar o modelo, ele pode se tornar muito “esperto” para os dados específicos que viu, mas pode ter dificuldades em classificar novas imagens que nunca viu antes, acarretando o fenômeno conhecido como overfiting.

Por que Dividir o Dataset (conjunto de dados)?

A divisão do conjunto de dados em um conjunto de treinamento e um conjunto de teste é uma prática comum em machine learning, com o intuito de mitigar o overfiting e avaliar o desempenho do modelo de forma imparcial.

Conjunto de Treinamento

Conjunto de Teste

É a parte do conjunto de dados que o modelo utiliza para aprender as relações entre as features (caracterpisticas) e o target (alvo ou resultado desejado).

É a parte do conjunto de dados que o modelo nunca viu durante o treinamento.

Como Fazer a Divisão?

Existem diversas técnicas para dividir o conjunto de dados, mas a mais comum é a divisão aleatória. Essa técnica garante que ambos os conjuntos sejam representativos do conjunto de dados original.

  • Aleatoriedade: É fundamental que a divisão seja aleatória para evitar vieses na amostra.
  • Proporção: A proporção mais comum é 80% para treinamento e 20% para teste, mas essa pode variar dependendo do tamanho do conjunto de dados e da complexidade do problema.

Automatizador

Abaixo, entrego um script que pode automatizar a tarefa de dividir o conjunto de dados em treino e teste. O script foi escrito em linguagem python.

#Bibliotecas necessárias
import pandas as pd
import sklearn
from sklearn.model_selection import train_test_split

#funcão automatizadora de divisão de dataset
def divide_dataset(dataframe, coluna_target, test_size, random_state=42)
   """
   Explicação da função:

   divide_dataset: Como o próprio nome diz, ela vai dividir o dataset

   Parâmetros da função:
   dataframe: O dataframe dos dados;
   coluna_target: A coluna alvo;
   test_size: a proporção da divisão do teste;
   random_state: Seed (semente) para geração de números aleatórios 
   (42 é o padrão)

   Retorno: 
   - X_train: Conjunto de treino para as variáveis independentes.
   - X_test: Conjunto de teste para as variáveis independentes.
   - y_train: Conjunto de treino para a variável alvo.
   - y_test: Conjunto de teste para a variável alvo.
   """
   #Dados de entrada
   X = dataframe.drop(coluna_target, axis = 1)

   #Dados de saída
   y = data[coluna_target]

   #Divisão em treino e teste
   X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                       test_size = test_size,
                                                       random-state = random_state

   return X_train, X_test, y_train, y_test  

Uma resposta para “Automatizar a divisão de treino e teste em um dataset”

  1. […] ajudar, no post “Automatizar a divisão de treino e teste em um dataset“ compartilho um scprit para a divisão do […]