Comment créer un ensemble de train et de test à partir d’un DataFrame Pandas



Lors de l’ajustement de modèles d’apprentissage automatique à des ensembles de données, nous divisons souvent l’ensemble de données en deux ensembles :

1. Ensemble de formation : utilisé pour entraîner le modèle (70 à 80 % de l’ensemble de données d’origine)

2. Ensemble de tests : utilisé pour obtenir une estimation impartiale des performances du modèle (20 à 30 % de l’ensemble de données d’origine)

En Python, il existe deux manières courantes de diviser un DataFrame pandas en un ensemble d’entraînement et un ensemble de tests :

Méthode 1 : utilisez train_test_split() de sklearn

from sklearn.model_selection import train_test_split

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

Méthode 2 : utiliser sample() à partir de pandas

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

Les exemples suivants montrent comment utiliser chaque méthode avec le DataFrame pandas suivant :

import pandas as pd
import numpy as np

#make this example reproducible
np.random.seed(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

Exemple 1 : utilisez train_test_split() depuis sklearn

Le code suivant montre comment utiliser la fonction train_test_split() de sklearn pour diviser le DataFrame pandas en ensembles d’entraînement et de test :

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)

À partir du résultat, nous pouvons voir que deux ensembles ont été créés :

  • Ensemble de formation : 800 lignes et 3 colonnes
  • Ensemble de test : 200 lignes et 3 colonnes

Notez que test_size contrôle le pourcentage d’observations du DataFrame d’origine qui appartiendra à l’ensemble de test et que la valeur random_state rend la division reproductible.

Exemple 2 : utilisez sample() à partir de pandas

Le code suivant montre comment utiliser la fonction sample() de pandas pour diviser le DataFrame pandas en ensembles d’entraînement et de test :

#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)

À partir du résultat, nous pouvons voir que deux ensembles ont été créés :

  • Ensemble de formation : 800 lignes et 3 colonnes
  • Ensemble de test : 200 lignes et 3 colonnes

Notez que frac contrôle le pourcentage d’observations du DataFrame d’origine qui appartiendra à l’ensemble d’apprentissage et que la valeur random_state rend la division reproductible.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes en Python :

Comment effectuer une régression logistique en Python
Comment créer une matrice de confusion en Python
Comment calculer la précision équilibrée en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *