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

Aggiungi un commento

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