Как разделить данные при обучении & #038; наборы тестов в r (3 метода)


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

В R существует три распространенных способа разделения данных на обучающие и тестовые наборы:

Метод 1: используйте базу 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, ]

Способ 2. Используйте пакет 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 )

Способ 3. Используйте пакет 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 ')

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

Пример 1. Разделение данных на обучающие и тестовые наборы с использованием Base R

В следующем коде показано, как использовать базу R для разделения набора данных радужной оболочки глаза на набор для обучения и тестирования, используя 70% строк в качестве набора для обучения, а оставшиеся 30% — в качестве набора для тестирования:

 #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

По результату мы видим:

  • Обучающий набор представляет собой кадр данных из 106 строк и 5 столбцов.
  • Тест представляет собой блок данных из 44 строк и 5 столбцов.

Поскольку исходная база данных содержала всего 150 строк, обучающий набор содержит примерно 106/150 = 70,6% исходных строк.

Мы также можем отобразить первые несколько строк обучающего набора, если захотим:

 #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

Пример 2. Разделение данных на обучающие и тестовые наборы с помощью caTools

В следующем коде показано, как использовать пакет caTools в R для разделения набора данных радужной оболочки глаза на набор для обучения и тестирования, используя 70% строк в качестве набора для обучения, а оставшиеся 30% — в качестве набора для тестирования:

 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

По результату мы видим:

  • Обучающий набор представляет собой кадр данных из 105 строк и 5 столбцов.
  • Тест представляет собой блок данных из 45 строк и 5 столбцов.

Пример 3. Разделение данных на наборы обучения и тестирования с помощью dplyr

В следующем коде показано, как использовать пакет caTools в R для разделения набора данных радужной оболочки глаза на набор для обучения и тестирования, используя 70% строк в качестве набора для обучения, а оставшиеся 30% — в качестве набора для тестирования:

 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

По результату мы видим:

  • Обучающий набор представляет собой кадр данных из 105 строк и 6 столбцов.
  • Тест представляет собой блок данных из 45 строк и 6 столбцов.

Обратите внимание, что эти обучающие и тестовые наборы содержат дополнительный столбец «id», который мы создали.

Убедитесь, что вы не используете этот столбец (или полностью удаляете его из фреймов данных) при настройке алгоритма машинного обучения.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как рассчитать MSE в R
Как рассчитать RMSE в R
Как рассчитать скорректированный R-квадрат в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *