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