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