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

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

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

Шаги, необходимые для перекрестной проверки K-кратной проверки:

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

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

Применение техники K-кратной классификации

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

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

The very first requirement is to set up the R environment by loading all required libraries as well as packages to carry out the complete process without any failure. Below is the implementation of this step.

R

# loading required packages
  
# 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)

 Step 2: Exploring the dataset

In order to perform manipulations on the data set, it is very necessary to inspect it first. It will give a clear idea about the structure as well as the various kinds of data types present in the data set. For this purpose, the data set must be assigned to a variable. Below is the code to do the same.

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 

Согласно приведенной выше информации, набор данных содержит 250 строк и 9 столбцов. Тип данных независимых переменных - < dbl>, который происходит от double и означает число с плавающей запятой двойной точности. Целевая переменная имеет тип данных <fct> означает фактор, и это желательно для модели классификации. Более того, целевая переменная имеет 2 результата, а именно « Вниз» и « Вверх», где соотношение этих двух категорий почти 1: 1, т. Е. Они сбалансированы. Все категории целевой переменной должны быть примерно равными, чтобы модель была объективной. Для этого существует множество техник, например:

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

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

In this step, the trainControl() function is defined to set the value of the K parameter and then the model is developed as per the steps involved in the K-fold technique. 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 = "cv"
                              number = 10)
  
  
# 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

After training and validation of the model, it is time to calculate the overall accuracy of the model. Below is the code to generate a summary of the model.

R



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


Выход:

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

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

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

  usekernel Точность Каппа    
  ЛОЖЬ 0,9543996 0,9083514
   ИСТИНА 0,9711870 0,9422498

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

Реализуйте технику K-кратной регрессии

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

Шаг 1. Импорт всех необходимых пакетов

Set up the R environment by importing all necessary packages and libraries. Below is the implementation of this step.

R

# loading required packages 
  
# package to perform data manipulation 
# and visualization 
library(tidyverse) 
  
# package to compute 
# cross - validation methods 
library(caret) 
  
# installing package to 
# import desired dataset 
install.packages("datarium")

Step 2: Loading and inspecting the dataset

In this step, the desired dataset is loaded in the R environment. After that, some rows of the data set are printed in order to understand its structure. Below is the code to carry out this task.

R

# loading the dataset 
data("marketing", package = "datarium"
  
# inspecting the dataset 
head(marketing)


Выход:

 youtube facebook распродажа газет
1 276,12 45,36 83,04 26,52
2 53,40 47,16 54,12 12,48
3 20,64 55,08 83,16 11,16
4 181,80 49,56 70,20 22,20
5 216,96 12,96 70,08 15,48
6 10,44 58,68 90,00 8,64

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

The value of the K parameter is defined in the trainControl() function and the model is developed according to the steps mentioned in the algorithm of the K-fold cross-validation technique. Below is the implementation.

R

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

Step 4: Evaluate the model performance

As mentioned in the algorithm of K-fold 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)


Выход:

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

200 образцов
  3 предсказатель

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

  RMSE Rsquared MAE     
  2,027409 0,9041909 1,539866

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

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

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

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

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