Часто, когда мы подгоняем алгоритмы машинного обучения к наборам данных, мы сначала разделяем набор данных на обучающий набор и тестовый набор.
В R существует три распространенных способа разделения данных на обучающие и тестовые наборы:
Метод 1: используйте базу R
#make this example reproducible
set. seed (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. seed (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. seed (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')
В следующих примерах показано, как использовать каждый метод на практике со встроенным набором данных iris в R.
Пример 1. Разделение данных на обучающий и тестовый наборы с использованием базы R
В следующем коде показано, как использовать базу R для разделения набора данных радужной оболочки на обучающий и тестовый наборы, используя 70 % строк в качестве обучающего набора, а оставшиеся 30 % — в качестве тестового набора.
#load iris dataset
data(iris)
#make this example reproducible
set. seed (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
dim(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. seed (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
dim(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. seed (1)
#create ID variable
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
dim(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