XGBoost в программировании на R
XGBoost - это быстрый и эффективный алгоритм, который используют победители многих соревнований по машинному обучению. XG Boost работает только с числовыми переменными. Это часть метода повышения, в котором выбор выборки выполняется более разумно для классификации наблюдений. Интерфейсы XGBoost есть в C ++, R, Python, Julia, Java и Scala. Основные функции в XGBoost реализованы на C ++, поэтому модели легко использовать для разных интерфейсов. По статистике зеркала CRAN, пакет был скачан более 81 000 раз. Моделирование XgBoost состоит из двух техник: Bagging и Boosting.
- Бэггинг: это подход, при котором вы можете брать случайные выборки данных, строить алгоритмы обучения и использовать простые средства для определения вероятностей бэггинга.
- Повышение: это подход, при котором выбор подхода осуществляется более разумно, т. Е. Больший вес придается классификации наблюдений.
Параметры в XGBoost
- eta: Он уменьшает веса функций, чтобы сделать процесс повышения более консервативным. Диапазон составляет от 0 до 1. Он также известен как скорость обучения или коэффициент сжатия. Низкое значение eta означает, что модель более устойчива к переобучению.
- гамма: чем больше значение гаммы, тем более консервативным будет алгоритм. Диапазон от 0 до бесконечности.
- max_depth: максимальная глубина дерева может быть указана с
max_depth
параметра max_depth. - Подвыборка: это доля строк, которые модель случайным образом выбирает для выращивания деревьев.
- colsample_bytree: это отношение переменных, случайно выбранных для построения каждого дерева в модели.
Набор данных
Набор данных Big Mart состоит из 1559 товаров в 10 магазинах в разных городах. Определены определенные атрибуты каждого продукта и магазина. Он состоит из 12 функций, например, Item_Identifier (уникальный идентификатор продукта, присваиваемый каждому отдельному элементу), Item_Weight (включает вес продукта), Item_Fat_Content (описывает, является ли продукт с низким содержанием жира), Item_Visibility (упоминает процент от общая площадь отображения всех продуктов в магазине, выделенная конкретному продукту), Item_Type (описывает категорию продуктов питания, к которой принадлежит товар), Item_MRP (максимальная розничная цена (прейскурантная цена) продукта), Outlet_Identifier (присвоенный уникальный идентификатор магазина. Он состоит из буквенно-цифровой строки длиной 6), Outlet_Establishment_Year (указывает год открытия магазина), Outlet_Size (указывает размер магазина с точки зрения покрытой площади), Outlet_Location_Type (указывает размер города, в котором магазин расположен), Outlet_Type (указывает, является ли торговая точка просто продуктовым магазином или каким-то супермаркетом) и Item_Outlet_Sales (продажи продукта в конкретном магазине).
# Loading data train = fread ( "Train_UWu5bXk.csv" ) test = fread ( "Test_u94Q5KV.csv" ) # Structure str (train) |
Выполнение XGBoost для набора данных
Использование алгоритма XGBoost в наборе данных, который включает 12 функций с 1559 продуктами в 10 магазинах в разных городах.
# Installing Packages install.packages ( "data.table" ) install.packages ( "dplyr" ) install.packages ( "ggplot2" ) install.packages ( "caret" ) install.packages ( "xgboost" ) install.packages ( "e1071" ) install.packages ( "cowplot" ) # Loading packages library (data.table) # for reading and manipulation of data library (dplyr) # for data manipulation and joining library (ggplot2) # for ploting library (caret) # for modeling library (xgboost) # for building XGBoost model library (e1071) # for skewness library (cowplot) # for combining multiple plots # Setting test dataset # Combining datasets # add Item_Outlet_Sales to test data test[, Item_Outlet_Sales := NA ] combi = rbind (train, test) # Missing Value Treatment missing_index = which ( is.na (combi$Item_Weight)) for (i in missing_index){ item = combi$Item_Identifier[i] combi$Item_Weight[i] = mean (combi$Item_Weight [combi$Item_Identifier == item], na.rm = T) } # Replacing 0 in Item_Visibility with mean zero_index = which (combi$Item_Visibility == 0) for (i in zero_index){ item = combi$Item_Identifier[i] combi$Item_Visibility[i] = mean ( combi$Item_Visibility[combi$Item_Identifier == item], na.rm = T) } # Label Encoding # To convert categorical in numerical combi[, Outlet_Size_num := ifelse (Outlet_Size == "Small" , 0, ifelse (Outlet_Size == "Medium" , 1, 2))] combi[, Outlet_Location_Type_num := ifelse (Outlet_Location_Type == "Tier 3" , 0, ifelse (Outlet_Location_Type == "Tier 2" , 1, 2))] combi[, c ( "Outlet_Size" , "Outlet_Location_Type" ) := NULL ] # One Hot Encoding # To convert categorical in numerical ohe_1 = dummyVars ( "~." , data = combi[, - c ( "Item_Identifier" , "Outlet_Establishment_Year" , "Item_Type" )], fullRank = T) ohe_df = data.table ( predict (ohe_1, combi[, - c ( "Item_Identifier" , "Outlet_Establishment_Year" , "Item_Type" )])) combi = cbind (combi[, "Item_Identifier" ], ohe_df) # Remove skewness skewness (combi$Item_Visibility) skewness (combi$price_per_unit_wt) # log + 1 to avoid division by zero combi[, Item_Visibility := log (Item_Visibility + 1)] # Scaling and Centering data # index of numeric features num_vars = which ( sapply (combi, is.numeric)) num_vars_names = names (num_vars) combi_numeric = combi[, setdiff (num_vars_names, "Item_Outlet_Sales" ), with = F] prep_num = preProcess (combi_numeric, method = c ( "center" , "scale" )) combi_numeric_norm = predict (prep_num, combi_numeric) # removing numeric independent variables combi[, setdiff (num_vars_names, "Item_Outlet_Sales" ) := NULL ] combi = cbind (combi, combi_numeric_norm) # Splitting data back to train and test train = combi[1: nrow (train)] test = combi[( nrow (train) + 1): nrow (combi)] # Removing Item_Outlet_Sales test[, Item_Outlet_Sales := NULL ] # Model Building: XGBoost param_list = list ( objective = "reg:linear" , eta = 0.01, gamma = 1, max_depth = 6, subsample = 0.8, colsample_bytree = 0.5 ) # Converting train and test into xgb.DMatrix format Dtrain = xgb.DMatrix ( data = as.matrix (train[, - c ( "Item_Identifier" , "Item_Outlet_Sales" )]), label = train$Item_Outlet_Sales) Dtest = xgb.DMatrix ( data = as.matrix (test[, - c ( "Item_Identifier" )])) # 5-fold cross-validation to # find optimal value of nrounds set.seed (112) # Setting seed xgbcv = xgb.cv (params = param_list, data = Dtrain, nrounds = 1000, nfold = 5, print_every_n = 10, early_stopping_rounds = 30, maximize = F) # Training XGBoost model at nrounds = 428 xgb_model = xgb.train (data = Dtrain, params = param_list, nrounds = 428) xgb_model # Variable Importance var_imp = xgb.importance ( feature_names = setdiff ( names (train), c ( "Item_Identifier" , "Item_Outlet_Sales" )), model = xgb_model) # Importance plot xgb.plot.importance (var_imp) |
Выход:
- Обучение модели Xgboost:
Модель xgboost обучена вычислению оценок train-rmse и test-rmse и нахождению самого низкого значения во многих раундах.
- Модель xgb_model:
Модели XgBoost состоят из 21 функции с целью линейной регрессии, eta - 0,01, гамма - 1, max_depth - 6, подвыборка - 0,8, colsample_bytree = 0,5 и silent - 1.
- График переменной важности:
Item_MRP - самая важная переменная, за которой следуют Item_Visibility и Outlet_Location_Type_num.
Таким образом, Xgboost находит свое применение во многих отраслях промышленности и используется на полную мощность.