Come creare un treno e un set di test da un pandas dataframe


Quando adattiamo i modelli di machine learning ai set di dati, spesso dividiamo il set di dati in due set:

1. Set di training: utilizzato per addestrare il modello (70-80% del set di dati originale)

2. Set di test: utilizzato per ottenere una stima imparziale delle prestazioni del modello (20-30% del set di dati originale)

In Python, ci sono due modi comuni per dividere un DataFrame panda in un set di addestramento e un set di test:

Metodo 1: utilizzare train_test_split() di sklearn

 from sklearn. model_selection import train_test_split

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

Metodo 2: usa sample() dai panda

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

Gli esempi seguenti mostrano come utilizzare ciascun metodo con i seguenti DataFrame panda:

 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

Esempio 1: usa train_test_split() da sklearn

Il codice seguente mostra come utilizzare la funzione train_test_split() di sklearn per dividere il DataFrame panda in set di training e 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)

Dal risultato possiamo vedere che sono stati creati due set:

  • Set di allenamento: 800 righe e 3 colonne
  • Set di prova: 200 righe e 3 colonne

Tieni presente che test_size controlla la percentuale di osservazioni del DataFrame originale che apparterranno al set di test e il valore random_state rende riproducibile la divisione.

Esempio 2: utilizzare sample() da panda

Il codice seguente mostra come utilizzare la funzione pandas sample() per suddividere il DataFrame pandas in set di training e 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)

Dal risultato possiamo vedere che sono stati creati due set:

  • Set di allenamento: 800 righe e 3 colonne
  • Set di prova: 200 righe e 3 colonne

Si noti che frac controlla la percentuale di osservazioni dal DataFrame originale che apparterranno al set di addestramento e il valore random_state rende riproducibile la divisione.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in Python:

Come eseguire la regressione logistica in Python
Come creare una matrice di confusione in Python
Come calcolare la precisione bilanciata in Python

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *