Как разделить данные при обучении & #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