Карет - это сокращение от C классификация A и RE gression T дождь. Это полный пакет, охватывающий все этапы конвейера для создания прогнозной модели машинного обучения. В этом уроке я объясню следующие темы:

  1. Как установить каретку
  2. Как создать простую модель
  3. Как использовать перекрестную проверку, чтобы избежать переобучения
  4. Как добавить к вашим данным простую предварительную обработку
  5. Как подобрать оптимальные параметры для выбранной вами модели
  6. Как увидеть наиболее важные функции / переменные для вашей модели
  7. Как использовать вашу модель для прогнозирования

Установка

Установить каретку так же просто, как установить любой другой пакет в R. Просто используйте приведенный ниже код. Если вы используете RStudio (что рекомендуется), вы также можете установить его, нажав «инструменты» ›« Установить пакеты… »на панели инструментов.

install.packages("caret")

Создание простой модели

Мы сделаем это с помощью функции train (). Функция train () является основной функцией каретки. Как следует из названия, он используется для обучения модели, то есть для применения алгоритма к набору данных и создания модели, представляющей этот набор данных.

Функция train () имеет три основных параметра:

  1. Формула
  2. Набор данных
  3. Метод (или алгоритм)

Параметр формула - это то место, где вы указываете, что является вашей зависимой переменной (что вы хотите предсказать) и независимыми переменными (характеристиками). Подробнее о том, как написать формулу, я расскажу ниже.

Параметр набор данных - это ваши данные.

Параметр method - это строка, определяющая, какую модель классификации или регрессии использовать.

В этом руководстве я использую набор данных mtcars. Это один из встроенных наборов данных R. Ниже приводится объяснение этого набора данных:

Автомобильные дорожные испытания Motor Trend (mtcars)

Описание

Данные были взяты из американского журнала Motor Trend 1974 года и включают расход топлива и 10 аспектов автомобильного дизайна и характеристик для 32 автомобилей (модели 1973–74).

Формат Фрейм данных с 32 наблюдениями по 11 переменным.

  1. миль на галлон: миль / (США) галлон
  2. цилиндр: Число цилиндров
  3. disp: смещение (куб. дюйм)
  4. л.с.: Полная мощность
  5. drat: Передаточное число заднего моста
  6. Вес: Вес (1000 фунтов)
  7. qsec: время 1/4 мили
  8. vs: V/S
  9. am: Коробка передач (0 = автоматический, 1 = ручной)
  10. gear: количество передних передач
  11. carb: Количество карбюраторов

Давайте посмотрим на фрейм данных.

data(mtcars)    # Load the dataset
head(mtcars)

?mtcars         # Get more information about this dataset

Теперь давайте создадим регрессионные модели, чтобы предсказать, сколько миль на галлон (миль на галлон) может проехать модель автомобиля на основе других атрибутов.

Формула может быть записана как «x ~ y, z, w», где x - зависимая переменная, в нашем случае миль на галлон, а y, z и w независимы. переменные. Если вы хотите передать все атрибуты, вы можете написать это как «x ~.» .

library(caret)
# Simple linear regression model (lm means linear model)
model <- train(mpg ~ wt,
               data = mtcars,
               method = "lm")

# Multiple linear regression model
model <- train(mpg ~ .,
               data = mtcars,
               method = "lm")

# Ridge regression model
model <- train(mpg ~ .,
               data = mtcars,
               method = "ridge") # Try using "lasso"

Вот как вы можете использовать функцию train () для создания различных базовых моделей. Легко, не правда ли?

K-кратная перекрестная проверка

У функции train () есть и другие необязательные параметры. Давайте узнаем, как добавить повторную выборку к нашей модели, добавив параметр trControl (управление поездом) в нашу функцию train ().

Процесс повторной выборки может быть выполнен с помощью перекрестной проверки K-кратной перекрестной проверки, перекрестной проверки с исключением по одному или самонастройки. В этом примере мы собираемся использовать 10-кратную перекрестную проверку. Для этого нам нужно использовать другую функцию каретки, trainControl (). Проверьте код ниже.

## 10-fold CV
# possible values: boot", "boot632", "cv", "repeatedcv", "LOOCV", "LGOCV"
fitControl <- trainControl(method = "repeatedcv",   
                           number = 10,     # number of folds
                           repeats = 10)    # repeated ten times

model.cv <- train(mpg ~ .,
               data = mtcars,
               method = "lasso",  # now we're using the lasso method
               trControl = fitControl)  

model.cv   
## The lasso 
## 
## 32 samples
## 10 predictors
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 10 times) 
## Summary of sample sizes: 28, 30, 28, 28, 29, 29, ... 
## Resampling results across tuning parameters:
## 
##   fraction  RMSE      Rsquared   MAE     
##   0.1       4.660950  0.8873870  3.841383
##   0.5       2.824138  0.8735388  2.468004
##   0.9       3.243825  0.8400985  2.797594
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was fraction = 0.5.

Добавление предварительной обработки

Функция train () имеет еще один необязательный параметр, называемый preProcess. Он используется для предварительной обработки ваших данных.

В этом примере мы собираемся использовать следующую предварительную обработку:

  1. центрировать данные (т.е. вычислить среднее значение для каждого столбца и вычесть его из каждого соответствующего значения);
  2. масштабировать данные (т.е. помещать все данные в одну шкалу, например шкалу от 0 до 1)

Однако существует больше возможностей предварительной обработки, таких как «BoxCox», «YeoJohnson», «expoTrans», «range», «knnImpute», «bagImpute», «medianImpute», «pca», «ica» и «SpaceSign». .

model.cv <- train(mpg ~ .,
               data = mtcars,
               method = "lasso",
               trControl = fitControl,
               preProcess = c('scale', 'center')) # default: no pre-processing

?train    # if you need more information about the train function

model.cv
## The lasso 
## 
## 32 samples
## 10 predictors
## 
## Pre-processing: scaled (10), centered (10) 
## Resampling: Cross-Validated (10 fold, repeated 10 times) 
## Summary of sample sizes: 29, 30, 29, 28, 29, 29, ... 
## Resampling results across tuning parameters:
## 
##   fraction  RMSE      Rsquared   MAE     
##   0.1       4.597673  0.9072492  3.821535
##   0.5       2.755728  0.8968303  2.411330
##   0.9       3.183950  0.8820037  2.778551
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was fraction = 0.5.

Нахождение гиперпараметров модели

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

Чтобы сгенерировать возможные значения, я собираюсь использовать функцию expand.grid из базовой библиотеки. Чтобы объяснить использование tuneGrid, я воспользуюсь методом гребневой регрессии.

Краткое объяснение

Метод гребня уменьшает коэффициенты переменных-предикторов до 0 по мере роста лямбда. Этот эффект сжатия снижает гибкость модели, уменьшая и ее дисперсию, но увеличивая смещение. Идея регрессии Риджа состоит в том, чтобы найти значение лямбда, которое является удовлетворительным компромиссом между смещением и дисперсией.

С помощью приведенного ниже кода мы можем найти лучший лямбда-параметр для регрессии гребня от 10 ^ -2 до 10 ^ 10.

# Here I generate a dataframe with a column named lambda with 100 values that goes from 10^10 to 10^-2
lambdaGrid <- expand.grid(lambda = 10^seq(10, -2, length=100))

model.cv <- train(mpg ~ .,
               data = mtcars,
               method = "ridge",
               trControl = fitControl,
               preProcess = c('scale', 'center'),
               tuneGrid = lambdaGrid,   # Test all the lambda values in the lambdaGrid dataframe
               na.action = na.omit)   # Ignore NA values

model.cv

## Ridge Regression 
## 
## 32 samples
## 10 predictors
## 
## Pre-processing: scaled (10), centered (10) 
## Resampling: Cross-Validated (10 fold, repeated 10 times) 
## Summary of sample sizes: 28, 29, 28, 29, 30, 28, ... 
## Resampling results across tuning parameters:
## 
##   lambda        RMSE       Rsquared   MAE      
##   1.000000e-02   3.133764  0.8542752   2.700711
##   1.321941e-02   3.097225  0.8559508   2.670390
##   1.747528e-02   3.057315  0.8583961   2.637061
##   2.310130e-02   3.015005  0.8621809   2.600386
##   3.053856e-02   2.971543  0.8672769   2.562851
... # too much output so i cut it out
##   1.000000e+10  25.370412  0.8901093  23.047829
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was lambda = 0.1629751.

Когда вы вызываете model.cv, вы можете видеть метрики RMSE, Rsquared и MAE для каждого тестируемого значения лямбда, и модель также выводит лучший выбор лямбда среди протестированных значений. В данном случае это было лямбда = 0,1629751.

Есть еще один способ поиска гиперпараметров без передачи списка значений в функцию train (). Мы можем использовать search = «random» внутри trainControl (), и функция автоматически проверит диапазон значений.

fitControl <- trainControl(## 10-fold CV
                           method = "repeatedcv",
                           number = 10,
                           repeats = 10,
                           search = "random")  # hyper-parameters random search 

model.cv <- train(mpg ~ .,
               data = mtcars,
               method = "ridge",
               trControl = fitControl,
               preProcess = c('scale', 'center'),
               na.action = na.omit)

model.cv
## Ridge Regression 
## 
## 32 samples
## 10 predictors
## 
## Pre-processing: scaled (10), centered (10) 
## Resampling: Cross-Validated (10 fold, repeated 10 times) 
## Summary of sample sizes: 28, 29, 29, 29, 28, 28, ... 
## Resampling results across tuning parameters:
## 
##   lambda        RMSE       Rsquared   MAE      
##   7.830203e-05   3.428075  0.8533706   2.950310
##   9.214823e-05   3.427668  0.8533953   2.949997
##   8.645309e+00  15.314730  0.9024834  13.994384
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was lambda = 9.214823e-05.

Переменная важность

Теперь давайте узнаем, как определить самые важные переменные для нашей модели. Мы можем использовать функцию Caret varImp. Возврат varImp можно передать функции ggplot для создания визуализации.

ggplot(varImp(model.cv))

Как мы видим на графике, переменная смещения является наиболее важной для нашей прогнозной модели.

Прогнозы

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

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

predictions <- predict(model.cv, mtcars)

predictions
##           Mazda RX4       Mazda RX4 Wag          Datsun 710 
##            22.59767            22.11103            26.25381 
##      Hornet 4 Drive   Hornet Sportabout             Valiant 
##            21.23520            17.69025            20.38318 
##          Duster 360           Merc 240D            Merc 230 
##            14.38382            22.49686            24.41665 
##            Merc 280           Merc 280C          Merc 450SE 
##            18.70104            19.19260            14.17669 
##          Merc 450SL         Merc 450SLC  Cadillac Fleetwood 
##            15.60112            15.74344            12.03039 
## Lincoln Continental   Chrysler Imperial            Fiat 128 
##            10.93585            10.49555            27.77480 
##         Honda Civic      Toyota Corolla       Toyota Corona 
##            29.89355            29.51135            23.64401 
##    Dodge Challenger         AMC Javelin          Camaro Z28 
##            16.94227            17.73144            13.30775 
##    Pontiac Firebird           Fiat X1-9       Porsche 914-2 
##            16.68855            28.29431            26.15559 
##        Lotus Europa      Ford Pantera L        Ferrari Dino 
##            27.63590            18.87023            19.69368 
##       Maserati Bora          Volvo 142E 
##            13.93917            24.37227

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

Спасибо за чтение. Я надеюсь, что это было полезное и приятное чтение.