Карет - это сокращение от C классификация A и RE gression T дождь. Это полный пакет, охватывающий все этапы конвейера для создания прогнозной модели машинного обучения. В этом уроке я объясню следующие темы:
- Как установить каретку
- Как создать простую модель
- Как использовать перекрестную проверку, чтобы избежать переобучения
- Как добавить к вашим данным простую предварительную обработку
- Как подобрать оптимальные параметры для выбранной вами модели
- Как увидеть наиболее важные функции / переменные для вашей модели
- Как использовать вашу модель для прогнозирования
Установка
Установить каретку так же просто, как установить любой другой пакет в R. Просто используйте приведенный ниже код. Если вы используете RStudio (что рекомендуется), вы также можете установить его, нажав «инструменты» ›« Установить пакеты… »на панели инструментов.
install.packages("caret")
Создание простой модели
Мы сделаем это с помощью функции train (). Функция train () является основной функцией каретки. Как следует из названия, он используется для обучения модели, то есть для применения алгоритма к набору данных и создания модели, представляющей этот набор данных.
Функция train () имеет три основных параметра:
- Формула
- Набор данных
- Метод (или алгоритм)
Параметр формула - это то место, где вы указываете, что является вашей зависимой переменной (что вы хотите предсказать) и независимыми переменными (характеристиками). Подробнее о том, как написать формулу, я расскажу ниже.
Параметр набор данных - это ваши данные.
Параметр method - это строка, определяющая, какую модель классификации или регрессии использовать.
В этом руководстве я использую набор данных mtcars. Это один из встроенных наборов данных R. Ниже приводится объяснение этого набора данных:
Автомобильные дорожные испытания Motor Trend (mtcars)
Описание
Данные были взяты из американского журнала Motor Trend 1974 года и включают расход топлива и 10 аспектов автомобильного дизайна и характеристик для 32 автомобилей (модели 1973–74).
Формат Фрейм данных с 32 наблюдениями по 11 переменным.
- миль на галлон: миль / (США) галлон
- цилиндр: Число цилиндров
- disp: смещение (куб. дюйм)
- л.с.: Полная мощность
- drat: Передаточное число заднего моста
- Вес: Вес (1000 фунтов)
- qsec: время 1/4 мили
- vs: V/S
- am: Коробка передач (0 = автоматический, 1 = ручной)
- gear: количество передних передач
- 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. Он используется для предварительной обработки ваших данных.
В этом примере мы собираемся использовать следующую предварительную обработку:
- центрировать данные (т.е. вычислить среднее значение для каждого столбца и вычесть его из каждого соответствующего значения);
- масштабировать данные (т.е. помещать все данные в одну шкалу, например шкалу от 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
Вы можете сравнить прогнозируемые значения с реальными значениями. Есть несколько показателей, которые вы можете использовать, чтобы убедиться, что ваша модель является хорошим предиктором, но мы не будем здесь вдаваться в подробности.
Спасибо за чтение. Я надеюсь, что это было полезное и приятное чтение.