Як розділити дані під час навчання & #038; набори тестів в r (3 методи)
Часто, коли ми адаптуємо алгоритми машинного навчання до наборів даних, ми спочатку ділимо набір даних на навчальний і тестовий набір.
Існує три поширених способи розділити дані на навчальні та тестові набори в R:
Спосіб 1: Використовуйте 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, ]
Спосіб 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