Разделите набор данных на обучающий и тестовый набор в R

Опубликовано: 10 Января, 2023

В этой статье мы увидим, как разделить набор данных на обучающий и тестовый наборы с помощью языка программирования R.

Способ 1: Использование базы R

Метод sample() в базе R используется для получения набора данных указанного размера в качестве входных данных. Набор данных может быть вектором, матрицей или кадром данных. Затем этот метод извлекает выборку из указанного набора данных. Выбранная выборка содержит элементы заданного размера из набора данных, которые могут быть выбраны как с заменой, так и без нее.

Метод выборки имеет следующую документацию в R:

Syntax: sample(vec, size, replace = FALSE, prob = NULL)

Arguments : 

  • vec – A vector or matrix of elements from where to choose the sample.
  • size – The total number of entries chosen. 
  • replace – Indicative of whether the sample should be done with or without replacement
  • prob – Probability weights indicating the proportion of elements to be kept in training and testing subsets 

Следующий фрагмент кода иллюстрирует процедуру, в которой сначала создается матрица набора данных.

R




# creating the data set
mat = matrix(
  # values from 1 to 21
  c(1:21),
  # No of rows
  nrow = 7,  
  # No of columns
  ncol = 3, 
  byrow = TRUE
)
print ("Dataset")
print (mat)
  
# divide the matrix into training set 70% and
# testing 30% respectively with replacement
sample <- sample(c(TRUE,FALSE), nrow(mat), 
                 replace=TRUE, prob=c(0.7,0.3))
  
# creating training dataset
train_dataset  <- mat[sample, ]
  
# creating testing dataset
test_dataset  <- mat[!sample, ]
  
print("Training Dataset")
print (train_dataset)
print("Testing Dataset")
print (test_dataset)

Выход:

Способ 2: Использование пакета dplyr в R

Пакет dplyr в R используется для выполнения манипуляций с данными и операций. Его можно загрузить и установить в рабочее пространство R с помощью следующей команды:

install.packages("dplyr")

Фрейм данных сначала создается с помощью метода data.frame в R. Затем с помощью оператора конвейера применяется метод sample_frac пакета dplyr. Метод sample_frac() в этом пакете используется для выбора случайной выборки из набора входных данных. Он используется для выбора указанного процента элементов из входного набора данных. Набор обучающих данных может быть создан с использованием этого метода. Он имеет следующий синтаксис:

Syntax: sample_frac(dataset, perc)

Arguments : 

  • dataset – The input dataset
  • perc – The percentage of sample used to include in the training dataset 

Для создания тестового набора данных можно использовать метод anti_join() этого пакета, который используется для выбора строк из основного входного набора данных, которые не лежат в наборе данных, указанном в качестве второго аргумента. В результате оба набора данных будут непересекающимися по своей природе. Метод имеет следующий синтаксис:

Syntax: anti_join(dataset, dataframe, by = col_name)

Arguments : 

  • dataset – The input dataset
  • dataframe – The input data frame to check and compare the values with 
  • by – The column name whose values are to be checked

R




# installing the reqd library
library("dplyr")
# creating a data frame
data_frame = data.frame(col1 = c(1:15),
                        col2 = letters[1:15],
                        col3 = c(0,1,1,1,0,0,0,0,
                                 0,1,1,0,1,1,0))
print("Data Frame")
print(data_frame)
  
print ("Training Dataset")
training_dataset  <- data_frame %>% dplyr::sample_frac(0.7)
print (training_dataset)
print ("Testing Dataset")
testing_dataset   <- dplyr::anti_join(data_frame,
                                      training_dataset, by = "col1")
print (testing_dataset)

Выход:

Способ 3: Использование пакета catools в R

Метод sample.split в пакете catools можно использовать для разделения входного набора данных на компоненты обучения и тестирования соответственно. Он делит указанный вектор на заранее определенное фиксированное соотношение, которое задается в качестве второго аргумента метода.

Syntax: sample.split(vec , SplitRatio = x)

Arguments : 

  • vec – The vector comprising of the data labels
  • SplitRatio – Indicator of the splitting ratio to be used 

Этот метод создает логический вектор с количеством записей, эквивалентным указанной длине вектора. Подмножество основного входного набора данных затем может быть извлечено с использованием выборочного вектора и метода подмножества в этом пакете. Теперь доступ к обучающему набору данных можно получить, используя следующий синтаксис:

Syntax: subset(data-frame, sample == TRUE/FALSE)

Arguments : 

  • data-frame – The data set to create the sample from 
  • sample – The rows from the dataset will be accessed wherever the values of the sample vector hold true. 

Наборы данных для обучения и тестирования могут быть созданы с использованием метода subset() соответственно.

R




# installing the reqd library
library("caTools")
  
# creating a data frame
data_frame = data.frame(col1 = c(1:15),
                        col2 = letters[1:15],
                        col3 = c(0,1,1,1,0,0,0,
                                 0,0,1,1,0,1,1,0))
print("Data Frame")
print(data_frame)
  
# creating a sample diving into the ratio of 60:40
sample <- sample.split(data_frame$col2, SplitRatio = 0.6)
print ("Training Dataset")
  
# check if sample is true 
training_dataset  <- subset(data_frame, sample == TRUE)
print (training_dataset)
print ("Testing Dataset")
  
# check if sample holds false
testing_dataset   <- subset(data_frame, sample == FALSE)
print (testing_dataset)

Выход: