Як розділити дані під час навчання & #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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *