Come suddividere i dati in allenamento & #038; set di test in r (3 metodi)
Spesso, quando adattiamo gli algoritmi di machine learning ai set di dati, prima dividiamo il set di dati in un set di addestramento e un set di test.
Esistono tre modi comuni per suddividere i dati in set di training e test in R:
Metodo 1: utilizzare Base R
#make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample(c( TRUE , FALSE ), nrow(df), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- df[sample, ] test <- df[!sample, ]
Metodo 2: utilizzare il pacchetto caTools
library (caTools) #make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample. split (df$any_column_name, SplitRatio = 0.7 ) train <- subset(df, sample == TRUE ) test <- subset(df, sample == FALSE )
Metodo 3: utilizzare il pacchetto dplyr
library (dplyr) #make this example reproducible set. seeds (1) #create ID column df$id <- 1:nrow(df) #use 70% of dataset as training set and 30% as test set train <- df %>% dplyr::sample_frac( 0.70 ) test <- dplyr::anti_join(df, train, by = ' id ')
Gli esempi seguenti mostrano come utilizzare ciascun metodo nella pratica con il set di dati iris integrato in R.
Esempio 1: dividere i dati in set di training e test utilizzando Base R
Il codice seguente mostra come utilizzare la base R per dividere il set di dati dell’iride in un set di training e un set di test, utilizzando il 70% delle righe come set di training e il restante 30% come set di testing:
#load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c( TRUE , FALSE ), nrow(iris), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- iris[sample, ] test <- iris[!sample, ] #view dimensions of training set sun(train) [1] 106 5 #view dimensions of test set dim(test) [1] 44 5
Dal risultato possiamo vedere:
- Il set di training è un frame di dati di 106 righe e 5 colonne.
- Il test è un blocco dati di 44 righe e 5 colonne.
Poiché il database originale aveva 150 righe in totale, il set di training contiene circa 106/150 = 70,6% delle righe originali.
Possiamo anche visualizzare le prime righe del training set se vogliamo:
#view first few rows of training set
head(train)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
Esempio 2: dividere i dati in set di training e test utilizzando caTools
Il codice seguente mostra come utilizzare il pacchetto caTools in R per dividere il set di dati iris in un set di training e un set di testing, utilizzando il 70% delle righe come set di training e il restante 30% come set di testing:
library (caTools) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample. split (iris$Species, SplitRatio = 0.7 ) train <- subset(iris, sample == TRUE ) test <- subset(iris, sample == FALSE ) #view dimensions of training set sun(train) [1] 105 5 #view dimensions of test set dim(test) [1] 45 5
Dal risultato possiamo vedere:
- Il set di training è un frame di dati di 105 righe e 5 colonne.
- Il test è un blocco dati di 45 righe e 5 colonne.
Esempio 3: dividere i dati in set di training e test utilizzando dplyr
Il codice seguente mostra come utilizzare il pacchetto caTools in R per dividere il set di dati iris in un set di training e un set di testing, utilizzando il 70% delle righe come set di training e il restante 30% come set di testing:
library (dplyr) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #create variable ID iris$id <- 1:nrow(iris) #Use 70% of dataset as training set and remaining 30% as testing set train <- iris %>% dplyr::sample_frac( 0.7 ) test <- dplyr::anti_join(iris, train, by = ' id ') #view dimensions of training set sun(train) [1] 105 6 #view dimensions of test set dim(test) [1] 45 6
Dal risultato possiamo vedere:
- Il set di training è un frame di dati di 105 righe e 6 colonne.
- Il test è un blocco dati di 45 righe e 6 colonne.
Tieni presente che questi set di training e test contengono una colonna “id” aggiuntiva che abbiamo creato.
Assicurati di non utilizzare questa colonna (o di rimuoverla completamente dai frame di dati) quando regoli l’algoritmo di machine learning.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre operazioni comuni in R:
Come calcolare MSE in R
Come calcolare l’RMSE in R
Come calcolare l’R quadrato corretto in R