Como criar um conjunto de treinamento e teste a partir de um dataframe do pandas


Ao ajustar modelos de aprendizado de máquina a conjuntos de dados, geralmente dividimos o conjunto de dados em dois conjuntos:

1. Conjunto de treinamento: usado para treinar o modelo (70-80% do conjunto de dados original)

2. Conjunto de testes: usado para obter uma estimativa imparcial do desempenho do modelo (20-30% do conjunto de dados original)

Em Python, existem duas maneiras comuns de dividir um DataFrame do pandas em um conjunto de treinamento e um conjunto de teste:

Método 1: use train_test_split() do sklearn

 from sklearn. model_selection import train_test_split

train, test = train_test_split(df, test_size= 0.2 , random_state= 0 )

Método 2: use sample() de pandas

 train = df. sample (frac= 0.8 , random_state= 0 )
test = df. drop ( train.index )

Os exemplos a seguir mostram como usar cada método com o seguinte DataFrame do pandas:

 import pandas as pd
import numpy as np

#make this example reproducible
n.p. random . seeds (1)

#create DataFrame with 1,000 rows and 3 columns
df = pd. DataFrame ( {' x1 ': np.random.randint (30,size=1000),
                   ' x2 ': np. random . randint (12, size=1000),
                   ' y ': np. random . randint (2, size=1000)})

#view first few rows of DataFrame
df. head ()

        x1 x2 y
0 5 1 1
1 11 8 0
2 12 4 1
3 8 7 0
4 9 0 0

Exemplo 1: use train_test_split() do sklearn

O código a seguir mostra como usar a função train_test_split() do sklearn para dividir o DataFrame do pandas em conjuntos de treinamento e teste:

 from sklearn. model_selection import train_test_split

#split original DataFrame into training and testing sets
train, test = train_test_split(df, test_size= 0.2 , random_state= 0 )

#view first few rows of each set
print ( train.head ())

     x1 x2 y
687 16 2 0
500 18 2 1
332 4 10 1
979 2 8 1
817 11 1 0

print ( test.head ())

     x1 x2 y
993 22 1 1
859 27 6 0
298 27 8 1
553 20 6 0
672 9 2 1

#print size of each set
print (train. shape , test. shape )

(800, 3) (200, 3)

Pelo resultado podemos ver que dois conjuntos foram criados:

  • Conjunto de treinamento: 800 linhas e 3 colunas
  • Conjunto de teste: 200 linhas e 3 colunas

Observe que test_size controla a porcentagem de observações do DataFrame original que pertencerá ao conjunto de teste e o valor random_state torna a divisão reproduzível.

Exemplo 2: Use sample() de pandas

O código a seguir mostra como usar a função pandas sample() para dividir o DataFrame do pandas em conjuntos de treinamento e teste:

 #split original DataFrame into training and testing sets
train = df. sample (frac= 0.8 , random_state= 0 )
test = df. drop ( train.index )

#view first few rows of each set
print ( train.head ())

     x1 x2 y
993 22 1 1
859 27 6 0
298 27 8 1
553 20 6 0
672 9 2 1

print ( test.head ())

    x1 x2 y
9 16 5 0
11 12 10 0
19 5 9 0
23 28 1 1
28 18 0 1

#print size of each set
print (train. shape , test. shape )

(800, 3) (200, 3)

Pelo resultado podemos ver que dois conjuntos foram criados:

  • Conjunto de treinamento: 800 linhas e 3 colunas
  • Conjunto de teste: 200 linhas e 3 colunas

Observe que frac controla a porcentagem de observações do DataFrame original que pertencerá ao conjunto de treinamento e o valor random_state torna a divisão reproduzível.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em Python:

Como realizar regressão logística em Python
Como criar uma matriz de confusão em Python
Como calcular a precisão balanceada em Python

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *