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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *