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