Pular para o conteúdo

Como dividir treino e teste com o sklearn?

[

Divida seu conjunto de dados com a função train_test_split() do scikit-learn

Um dos aspectos chave do aprendizado de máquina supervisionado é a avaliação e validação do modelo. Ao avaliar o desempenho preditivo do seu modelo, é essencial que o processo seja imparcial. Usando a função train_test_split() da biblioteca de ciência de dados scikit-learn, você pode dividir seu conjunto de dados em subconjuntos que minimizam o potencial de viés no seu processo de avaliação e validação.

A importância da divisão dos dados

O aprendizado de máquina supervisionado envolve a criação de modelos que mapeiam precisamente as entradas fornecidas (variáveis independentes, ou preditoras) para as saídas fornecidas (variáveis dependentes, ou respostas).

Como você mede a precisão do seu modelo depende do tipo de problema que você está tentando resolver. Na análise de regressão, você geralmente usa o coeficiente de determinação, erro quadrático médio, erro médio absoluto, ou quantidades similares. Para problemas de classificação, frequentemente se aplicam a acurácia, precisão, recall, pontuação F1 e indicadores relacionados.

Os valores numéricos aceitáveis que medem a precisão variam de acordo com o campo. Você pode encontrar explicações detalhadas em fontes como Statistics By Jim, Quora e muitos outros.

Treinamento, Validação e Conjuntos de Teste

Ao avaliar um modelo, é necessário dividir seu conjunto de dados em três partes distintas: treinamento, validação e teste. Cada uma dessas partes desempenha um papel fundamental no processo de avaliação do modelo.

Treinamento: O conjunto de treinamento é usado para ajustar os parâmetros do modelo. Durante o treinamento, o modelo é exposto aos exemplos de entrada e suas saídas correspondentes, permitindo que ele aprenda a mapear os preditores para as respostas.

Validação: O conjunto de validação é usado para ajustar os hiperparâmetros do modelo e para avaliá-lo durante o treinamento. Ele permite que você faça ajustes no modelo antes de avaliá-lo no conjunto de teste.

Teste: O conjunto de teste é usado para avaliar o desempenho do modelo final, uma vez que todos os ajustes e otimizações tenham sido feitos. É um conjunto de dados independente que o modelo não viu durante o treinamento ou validação, garantindo assim uma avaliação imparcial.

Underfitting e Overfitting

Um dos principais motivos para dividir o conjunto de dados em treinamento, validação e teste é evitar problemas de underfitting e overfitting.

Underfitting: Um modelo sofre de underfitting quando ele não é capaz de aprender o padrão subjacente nos dados de treinamento. Isso geralmente ocorre quando o modelo é muito simples ou não é treinado o suficiente.

Overfitting: Por outro lado, o overfitting ocorre quando o modelo se ajusta demais aos dados de treinamento e não é capaz de generalizar para novos dados. Isso geralmente ocorre quando o modelo é muito complexo ou quando há poucos exemplos de treinamento.

A divisão adequada dos dados em treinamento, validação e conjuntos de teste ajuda a evitar tanto o underfitting quanto o overfitting, permitindo que você avalie seu modelo de forma imparcial.

Pré-requisitos para usar a função train_test_split()

A função train_test_split() está disponível no módulo sklearn.model_selection da biblioteca scikit-learn. Para utilizá-la, você precisará ter o scikit-learn instalado no seu ambiente de desenvolvimento. Caso não tenha, você pode instalá-lo usando o pip:

pip install -U scikit-learn

Após instalar o scikit-learn, você pode importar a função train_test_split() no seu código Python da seguinte forma:

from sklearn.model_selection import train_test_split

Aplicação da função train_test_split()

Agora que você entende a importância de dividir o conjunto de dados e está familiarizado com a função train_test_split(), vamos ver como aplicá-la na prática. A função train_test_split() divide seu conjunto de dados em subconjuntos de treinamento e teste, de acordo com uma proporção especificada.

Por exemplo, suponha que você tenha um conjunto de dados com 1000 exemplos e deseja dividir em 80% de treinamento e 20% de teste. Você pode fazer isso da seguinte maneira:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

A função train_test_split() aceita várias outras opções, como a possibilidade de embaralhar os dados, definir uma semente para reprodução dos resultados e dividir em conjuntos de treinamento, validação e teste. Você pode consultar a documentação oficial do scikit-learn para obter mais informações sobre as opções disponíveis.

Aprendizado de Máquina Supervisionado com a função train_test_split()

Agora que você conhece a função train_test_split() e sabe como usá-la para dividir seu conjunto de dados, vamos ver como combiná-la com métodos de aprendizado de máquina supervisionado.

Exemplo Minimalista de Regressão Linear

Vamos começar com um exemplo minimalista de regressão linear. Suponha que você tenha um conjunto de dados com uma única característica (X) e as respectivas saídas (y).

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Dados de exemplo
X = [[1], [3], [5], [7], [9]]
y = [3, 5, 7, 9, 11]
# Divisão dos dados em treinamento e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Treinamento do modelo de regressão linear
model = LinearRegression()
model.fit(X_train, y_train)
# Avaliação do modelo no conjunto de teste
score = model.score(X_test, y_test)
print("Score:", score)

Neste exemplo, dividimos nosso conjunto de dados em treinamento e teste usando a função train_test_split(). Em seguida, criamos uma instância do modelo de regressão linear LinearRegression() e treinamos o modelo com os dados de treinamento. Por fim, avaliamos o desempenho do modelo no conjunto de teste usando o método score().

Exemplo de Regressão

Agora, vamos considerar um exemplo de regressão mais complexo. Suponha que você tenha um conjunto de dados com várias características (X) e as respectivas saídas (y).

from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
# Dados de exemplo
X = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
y = [10, 20, 30, 40]
# Divisão dos dados em treinamento e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Treinamento do modelo de regressão Ridge
model = Ridge()
model.fit(X_train, y_train)
# Avaliação do modelo no conjunto de teste
score = model.score(X_test, y_test)
print("Score:", score)

Neste exemplo, seguimos a mesma lógica de divisão dos dados em treinamento e teste e instanciação do modelo de regressão Ridge. Em seguida, treinamos o modelo com os dados de treinamento e avaliamos seu desempenho no conjunto de teste.

Exemplo de Classificação

Por último, vamos ver um exemplo de classificação. Suponha que você tenha um conjunto de dados com características (X) e as respectivas classes (y).

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Dados de exemplo
X = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
y = [0, 1, 0, 1]
# Divisão dos dados em treinamento e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Treinamento do modelo de regressão logística
model = LogisticRegression()
model.fit(X_train, y_train)
# Avaliação do modelo no conjunto de teste
score = model.score(X_test, y_test)
print("Score:", score)

Neste exemplo, realizamos a divisão dos dados em treinamento e teste, criamos uma instância do modelo de regressão logística LogisticRegression() e treinamos o modelo com os dados de treinamento. Por fim, avaliamos o desempenho do modelo no conjunto de teste.

Outras Funcionalidades de Validação

O scikit-learn oferece outras funcionalidades de validação além da divisão do conjunto de dados com a função train_test_split(). Alguns exemplos incluem validação cruzada, validação por grupos e validação por bootstrap. Essas funcionalidades podem ser úteis dependendo do cenário específico do seu projeto.

Conclusão

Neste tutorial, você aprendeu sobre a importância da divisão adequada do conjunto de dados em treinamento, validação e teste. O uso correto da função train_test_split() do scikit-learn permite que você avalie seu modelo de forma imparcial, evitando problemas de underfitting e overfitting.

Além disso, você viu exemplos práticos de como aplicar a função train_test_split() em problemas de regressão linear, regressão e classificação. Combinando essa função com os métodos de aprendizado de máquina supervisionado do scikit-learn, você pode construir modelos precisos e confiáveis.

Continue explorando as funcionalidades do scikit-learn e aplicando essas técnicas nos seus próprios projetos de aprendizado de máquina. A prática constante e a experimentação são essenciais para se tornar um bom cientista de dados.