Повторная K-кратная перекрестная проверка в программировании на R

Опубликовано: 17 Февраля, 2022

Повторение K-кратности является наиболее предпочтительным методом перекрестной проверки как для классификационных, так и для регрессионных моделей машинного обучения. Перетасовка и случайная выборка набора данных несколько раз является основной процедурой повторяющегося алгоритма K-кратного увеличения, и это приводит к созданию надежной модели, поскольку она охватывает максимальное количество операций обучения и тестирования. Работа этого метода перекрестной проверки для оценки точности модели машинного обучения зависит от 2 параметров. Первый параметр - K, который является целочисленным значением и указывает, что данный набор данных будет разделен на K складок (или подмножеств). Среди K складок модель обучается на подмножествах K-1, а оставшееся подмножество будет использоваться для оценки производительности модели. Эти шаги будут повторяться до определенного количества раз, которое будет определяться вторым параметром этого алгоритма, и, таким образом, он получил свое название как Repeated K-fold, то есть алгоритм перекрестной проверки K-кратного повторения повторяется определенное количество раз. раз.

Этапы повторной K-кратной перекрестной проверки:

Каждая итерация повторяющегося K-кратного алгоритма является реализацией обычного алгоритма K-кратности. В K-кратной методике перекрестной проверки используются следующие шаги:

  1. Разбить набор данных на K подмножеств случайным образом
  2. Для каждого из разработанных подмножеств точек данных
    • Рассматривайте это подмножество как набор для проверки
    • Все остальные подмножества использовать в тренировочных целях
    • Обучение модели и оценка ее на проверочном или тестовом наборе.
    • Рассчитать ошибку прогноза
  3. Повторите вышеуказанный шаг K раз, т.е. до тех пор, пока модель не будет обучена и протестирована на всех подмножествах.
  4. Сгенерируйте общую ошибку прогнозирования, взяв среднее значение ошибок прогнозирования в каждом случае.

Таким образом, в методе повторной k-кратной перекрестной проверки вышеуказанные шаги будут повторяться для данного набора данных определенное количество раз. На каждой итерации будет происходить совершенно другое разделение набора данных на K-кратные области, и оценка производительности модели также будет отличаться. Наконец, средняя оценка производительности во всех случаях даст окончательную точность модели. Для выполнения этих сложных задач многократного K-кратного метода язык R предоставляет богатую библиотеку встроенных функций и пакетов. Ниже приведен пошаговый подход к реализации многократной K-кратной перекрестной проверки модели машинного обучения классификации и регрессии.

Внедрить повторную K-кратную перекрестную проверку классификации

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

Шаг 1. Загрузка необходимых пакетов и библиотек

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

R

# load the library
  
# package to perform data manipulation 
# and visualization 
library(tidyverse)
  
# package to compute 
# cross - validation methods
library(caret)
  
  
# loading package to 
# import desired dataset
library(ISLR)

Шаг 2. Изучение набора данных

After importing the required libraries, its time to load the dataset in the R environment. Exploration of the dataset is also very important as it gives an idea if any change is required in the dataset before using it for training and testing purposes. Below is the code to carry out this task.

R

# assigning the complete dataset
# Smarket to a variable
dataset <- Smarket[complete.cases(Smarket), ] 
  
# display the dataset with details 
# like column name and its data type
# along with values in each row
glimpse(dataset)
  
# checking values present
# in the Direction column 
# of the dataset
table(dataset$Direction)


Выход:

 Ряды: 1250
Колонны: 9
$ Год <dbl> 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, ...
$ Lag1 <dbl> 0,381, 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, 0,680, 0,701, -0,562, 0,546, -1 ...
$ Lag2 <dbl> -0,192, 0,381, 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, 0,680, 0,701, -0,562, 0 ...
$ Lag3 <dbl> -2,624, -0,192, 0,381, 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, 0,680, 0,701, -...
$ Lag4 <dbl> -1,055, -2,624, -0,192, 0,381, 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, 0,680, ...
$ Lag5 <dbl> 5,010, -1,055, -2,624, -0,192, 0,381, 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, ...
Объем $ <dbl> 1.19130, 1.29650, 1.41120, 1.27600, 1.20570, 1.34910, 1.44500, 1.40780, 1.16400, 1.23260, 1.30900, 1.25800, 1.09800, 1.05310, ...
$ Сегодня <dbl> 0,959, 1,032, -0,623, 0,614, 0,213, 1,392, -0,403, 0,027, 1,303, 0,287, -0,498, -0,189, 0,680, 0,701, -0,562, 0,546, -1,747, 0 ...
$ Direction <fct> вверх, вверх, вниз, вверх, вверх, вверх, вниз, вверх, вверх, вверх, вниз, вниз, вверх, вверх, вниз, вверх, вниз, вверх, вниз, вниз, вниз, вниз, вверх , Вниз, вниз, вверх ...

> таблица (набор данных $ Direction)

Вниз до 
 602 648

Приведенная выше информация предполагает, что независимые переменные набора данных имеют тип данных <dbl>, что означает число с плавающей запятой двойной точности. Целевая переменная набора данных - «Направление», и это желаемый тип данных, который является типом данных фактор (<fct>) . В зависимой переменной представлены значения «Вниз» и «Вверх», и они примерно равны. Если есть случай дисбаланса классов в целевой переменной, то для исправления этого используются следующие методы:

  • Даунсэмплинг
  • Вверх выборка
  • Гибридная выборка с использованием SMOTE и ROSE

Шаг 3: Построение модели с помощью повторяющегося алгоритма K-fold

The trainControl() function is defined to set the number of repetitions and the value of the K parameter. After that, the model is developed as per the steps involved in the repeated K-fold algorithm. Below is the implementation.

R

# setting seed to generate a  
# reproducible random sampling
set.seed(123)
  
# define training control which
# generates parameters that further
# control how models are created
train_control <- trainControl(method = "repeatedcv"
                              number = 10, repeats = 3)
  
# building the model and 
# predicting the target varibale
# as per the Naive Bayes classifier
model <- train(Direction~., data = dataset, 
               trControl = train_control, method = "nb")

Step 4: Evaluating the accuracy of the model

На этом последнем этапе будет сгенерирована оценка производительности модели после ее тестирования на всех возможных валидационных свертках. Ниже приведен код для печати точности и общего обзора разработанной модели.

R

# summarize results of the
# model after calcualting
# prediction error in each case
print(model)

Выход:

 Наивный байесовский 

1250 образцов
   8 предсказатель
   2 класса: «Вниз», «Вверх» 

Без предварительной обработки
Передискретизация: перекрестная проверка (10 раз, повторяется 3 раза) 
Сводка размеров выборки: 1124, 1125, 1126, 1125, 1125, 1126, ... 
Результаты ресэмплинга по параметрам настройки:

  usekernel Точность Каппа    
  ЛОЖЬ 0,9562616 0,9121273
   ИСТИНА 0,9696037 0,9390601

Параметр настройки 'fL' оставался постоянным на значении 0.
Параметр настройки «adjust» оставался постоянным на значении 1.
Точность использовалась для выбора оптимальной модели с использованием наибольшего значения.
Окончательные значения, использованные для модели, были fL = 0, usekernel = TRUE и adjust = 1.

Реализовать повторную K-кратную перекрестную проверку регрессии

Модели регрессионного машинного обучения предпочтительны для тех наборов данных, в которых целевая переменная имеет непрерывный характер, например температуру области, стоимость товара и т. Д. Значения целевой переменной являются либо целыми числами, либо числами с плавающей запятой. Ниже приведены шаги, необходимые для реализации повторяющегося k-кратного алгоритма в качестве метода перекрестной проверки в регрессионных моделях.

Шаг 1. Загрузка набора данных и необходимых пакетов

As the first step, the R environment must be loaded with all essential packages and libraries to perform various operations. Below is the code to import all the required libraries.

R

# loading required packages 
  
# package to perform data manipulation 
# and visualization 
library(tidyverse) 
  
# package to compute 
# cross - validation methods 
library(caret)

Step 2: Loading and inspecting the dataset

Once all packages are imported, its time to load the desired dataset. Here “trees” dataset is used for the regression model, which is an inbuilt dataset of R language. moreover, in order to build a correct model, it is necessary to know the structure of the dataset. All these tasks can be performed using the below code.

R

# access the data from R’s datasets package
data(trees)
  
# look at the first several rows of the data
head(trees)


Выход:

 Обхват Высота Объем
1 8,3 70 10,3
2 8,6 65 10,3
3 8,8 63 10,2
4 10,5 72 16,4
5 10,7 81 18,8
6 10,8 83 19,7

Шаг 3: Построение модели с помощью повторяющегося алгоритма K-fold

The trainControl() function is defined to set the number of repetitions and the value of the K parameter. After that, the model is developed as per the steps involved in the repeated K-fold algorithm. Below is the implementation.

R

# setting seed to generate a  
# reproducible random sampling 
set.seed(125)  
  
# defining training control as 
# repeated cross-validation and  
# value of K is 10 and repetation is 3 times 
train_control <- trainControl(method = "repeatedcv",  
                              number = 10, repeats = 3) 
  
# training the model by assigning sales column 
# as target variable and rest other column 
# as independent varaible 
model <- train(Volume ~., data = trees,  
               method = "lm"
               trControl = train_control)

Step 4:  Evaluating the accuracy of the model

As per the algorithm of repeated K-fold technique that model is tested against every unique fold(or subset) of the dataset and in each case, the prediction error is calculated and at last, the mean of all prediction errors is treated as the final performance score of the model. So, below is the code to print the final score and overall summary of the model. 

R

# printing model performance metrics 
# along with other details 
print(model)


Выход:

 Линейная регрессия 

31 образец
 2 предсказатель

Без предварительной обработки
Передискретизация: перекрестная проверка (10 раз, повторяется 3 раза) 
Резюме размеров выборки: 28, 28, 28, 29, 28, 28, ... 
Результаты ресэмплинга:

  RMSE Rsquared MAE     
  4,021691 0,957571 3,362063

Параметр настройки «перехват» оставался постоянным на значении ИСТИНА.

Преимущества повторной перекрестной проверки в K-кратном порядке

  • Очень эффективный метод оценки ошибки прогноза и точности модели.
  • При каждом повторении выборка данных перемешивается, что приводит к появлению различных разделений выборки данных.

Недостатки повторной K-кратной перекрестной проверки

  • Более низкое значение K приводит к смещению модели, а более высокое значение K может привести к изменчивости показателей производительности модели. Таким образом, важно использовать правильное значение K для модели (обычно желательно K = 5 и K = 10).
  • При каждом повторении алгоритм должен обучать модель с нуля, что означает, что время вычислений для оценки модели увеличивается на количество повторений.