Comment diviser les données en formation & #038; Ensembles de tests dans R (3 méthodes)



Souvent, lorsque nous adaptons des algorithmes d’apprentissage automatique à des ensembles de données, nous divisons d’abord l’ensemble de données en un ensemble d’apprentissage et un ensemble de test.

Il existe trois manières courantes de diviser les données en ensembles d’entraînement et de test dans R :

Méthode 1 : utiliser Base R

#make this example reproducible
set.seed(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, ]

Méthode 2 : utiliser le package caTools

library(caTools)

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

Méthode 3 : utiliser le package dplyr

library(dplyr)

#make this example reproducible
set.seed(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')

Les exemples suivants montrent comment utiliser chaque méthode en pratique avec l’ ensemble de données iris intégré dans R.

Exemple 1 : diviser les données en ensembles de formation et de test à l’aide de Base R

Le code suivant montre comment utiliser la base R pour diviser l’ensemble de données iris en un ensemble d’entraînement et de test, en utilisant 70 % des lignes comme ensemble d’entraînement et les 30 % restants comme ensemble de test :

#load iris dataset
data(iris)

#make this example reproducible
set.seed(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
dim(train)

[1] 106   5

#view dimensions of test set
dim(test)

[1] 44 5

À partir du résultat, nous pouvons voir :

  • L’ensemble de formation est un bloc de données de 106 lignes et 5 colonnes.
  • Le test est un bloc de données de 44 lignes et 5 colonnes.

Étant donné que la base de données d’origine comportait 150 lignes au total, l’ensemble d’apprentissage contient environ 106/150 = 70,6 % des lignes d’origine.

Nous pouvons également afficher les premières lignes de l’ensemble d’entraînement si nous le souhaitons :

#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

Exemple 2 : diviser les données en ensembles de formation et de test à l’aide de caTools

Le code suivant montre comment utiliser le package caTools dans R pour diviser l’ensemble de données iris en un ensemble d’entraînement et de test, en utilisant 70 % des lignes comme ensemble d’entraînement et les 30 % restants comme ensemble de test :

library(caTools)

#load iris dataset
data(iris)

#make this example reproducible
set.seed(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
dim(train)

[1] 105   5

#view dimensions of test set
dim(test)

[1] 45 5

À partir du résultat, nous pouvons voir :

  • L’ensemble de formation est un bloc de données de 105 lignes et 5 colonnes.
  • Le test est un bloc de données de 45 lignes et 5 colonnes.

Exemple 3 : diviser les données en ensembles de formation et de test à l’aide de dplyr

Le code suivant montre comment utiliser le package caTools dans R pour diviser l’ensemble de données iris en un ensemble d’entraînement et de test, en utilisant 70 % des lignes comme ensemble d’entraînement et les 30 % restants comme ensemble de test :

library(dplyr)

#load iris dataset
data(iris)

#make this example reproducible
set.seed(1)

#create ID variable
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
dim(train)

[1] 105 6

#view dimensions of test set
dim(test)

[1] 45 6

À partir du résultat, nous pouvons voir :

  • L’ensemble de formation est un bloc de données de 105 lignes et 6 colonnes.
  • Le test est un bloc de données de 45 lignes et 6 colonnes.

Notez que ces ensembles de formation et de test contiennent une colonne « id » supplémentaire que nous avons créée.

Assurez-vous de ne pas utiliser cette colonne (ou de la supprimer entièrement des blocs de données) lors de l’ajustement de votre algorithme d’apprentissage automatique.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans R :

Comment calculer MSE dans R
Comment calculer le RMSE dans R
Comment calculer le R-carré ajusté en R

Ajouter un commentaire

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