Como dividir dados em treinamento & #038; conjuntos de testes em r (3 métodos)
Freqüentemente, quando adaptamos algoritmos de aprendizado de máquina a conjuntos de dados, primeiro dividimos o conjunto de dados em um conjunto de treinamento e um conjunto de teste.
Existem três maneiras comuns de dividir dados em conjuntos de treinamento e teste em R:
Método 1: Use 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, ]
Método 2: use o pacote 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 )
Método 3: use o pacote 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 ')
Os exemplos a seguir mostram como usar cada método na prática com o conjunto de dados de íris integrado em R.
Exemplo 1: Divida os dados em conjuntos de treinamento e teste usando Base R
O código a seguir mostra como usar a base R para dividir o conjunto de dados da íris em um conjunto de treinamento e teste, usando 70% das linhas como conjunto de treinamento e os 30% restantes como conjunto de teste:
#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
Pelo resultado podemos ver:
- O conjunto de treinamento é um quadro de dados de 106 linhas e 5 colunas.
- O teste é um bloco de dados de 44 linhas e 5 colunas.
Como o banco de dados original tinha 150 linhas no total, o conjunto de treinamento contém aproximadamente 106/150 = 70,6% das linhas originais.
Também podemos exibir as primeiras linhas do conjunto de treinamento se quisermos:
#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
Exemplo 2: Divida os dados em conjuntos de treinamento e teste usando caTools
O código a seguir mostra como usar o pacote caTools em R para dividir o conjunto de dados iris em um conjunto de treinamento e teste, usando 70% das linhas como conjunto de treinamento e os 30% restantes como conjunto de teste:
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
Pelo resultado podemos ver:
- O conjunto de treinamento é um quadro de dados de 105 linhas e 5 colunas.
- O teste é um bloco de dados de 45 linhas e 5 colunas.
Exemplo 3: Divida os dados em conjuntos de treinamento e teste usando dplyr
O código a seguir mostra como usar o pacote caTools em R para dividir o conjunto de dados iris em um conjunto de treinamento e teste, usando 70% das linhas como conjunto de treinamento e os 30% restantes como conjunto de teste:
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
Pelo resultado podemos ver:
- O conjunto de treinamento é um quadro de dados de 105 linhas e 6 colunas.
- O teste é um bloco de dados de 45 linhas e 6 colunas.
Observe que esses conjuntos de treinamento e teste contêm uma coluna “id” adicional que criamos.
Certifique-se de não usar esta coluna (ou removê-la totalmente dos quadros de dados) ao ajustar seu algoritmo de aprendizado de máquina.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras operações comuns em R:
Como calcular MSE em R
Como calcular RMSE em R
Como calcular R-quadrado ajustado em R