XGBoost en programación R

XGBoost es un algoritmo rápido y eficiente y lo utilizan los ganadores de muchas competencias de aprendizaje automático. XG Boost funciona solo con las variables numéricas.

XGBoost en R

Es una parte de la técnica boosting en la que la selección de la muestra se hace de forma más inteligente para clasificar las observaciones. Hay interfaces de XGBoost en C++, R , Python, Julia, Java y Scala. Las funciones principales de XGBoost se implementan en C++, por lo que es fácil compartir modelos entre diferentes interfaces. Según las estadísticas del espejo CRAN, el paquete se ha descargado más de 81 000 veces. El modelado de XgBoost consta de dos técnicas: Bagging y Boosting. 

  • Embolsado : es un enfoque en el que puede tomar muestras aleatorias de datos, crear algoritmos de aprendizaje y tomar medios simples para encontrar probabilidades de embolsado.
  • Impulso : es un enfoque en el que una selección de enfoques se realiza de forma más inteligente, es decir, se da cada vez más peso para clasificar las observaciones.

XGBoosting in R

Parámetros en XGBoost

  • eta: reduce los pesos de las características para que el proceso de impulso sea más conservador. El rango es de 0 a 1. También se conoce como tasa de aprendizaje o factor de reducción. Un valor eta bajo significa que el modelo es más resistente al sobreajuste.
  • gamma: cuanto mayor sea el valor de gamma, más conservador será el algoritmo. Su rango es de 0 a infinito.
  • max_ depth: la profundidad máxima de un árbol se puede especificar usando el parámetro max_ depth.
  • Submuestra: Es la proporción de hileras que el modelo seleccionará aleatoriamente para cultivar árboles.
  • colsample_bytree: Es la relación de variables elegidas aleatoriamente para construir cada árbol en el modelo.

El conjunto de datos

gran centro comercialEl conjunto de datos consta de 1559 productos en 10 tiendas en diferentes ciudades. Se han definido ciertos atributos de cada producto y tienda. Consta de 12 características, es decir, Item_Identifier (es una identificación de producto única asignada a cada artículo distinto), Item_Weight (incluye el peso del producto), Item_Fat_Content (describe si el producto es bajo en grasa o no), Item_Visibility (menciona el porcentaje de la área de exhibición total de todos los productos en una tienda asignados a un producto en particular), Item_Type (describe la categoría de alimentos a la que pertenece el artículo), Item_MRP (Precio máximo de venta al público (precio de lista) del producto), Outlet_Identifier (ID de tienda único asignado. Consiste en una string alfanumérica de longitud 6), Outlet_Establishment_Year (menciona el año en que se estableció la tienda), 

R

# Loading data
train = fread("Train_UWu5bXk.csv")
test = fread("Test_u94Q5KV.csv")
 
# Structure
str(train)

Ejecución de XGBoost en un conjunto de datos

Usando el algoritmo XGBoost en el conjunto de datos que incluye 12 funciones con 1559 productos en 10 tiendas en diferentes ciudades. 

R

# 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)

Producción: 

  • Entrenamiento del modelo Xgboost:

output

El modelo xgboost se entrena calculando la puntuación de tren-rmse y la puntuación de prueba-rmse y encontrando su valor más bajo en muchas rondas.

  • Modelo xgb_modelo:

output

Los modelos XgBoost constan de 21 funciones con el objetivo de regresión lineal, eta es 0,01, gamma es 1, max_ depth es 6, submuestra es 0,8, colsample_bytree = 0,5 y silent es 1.

  • Gráfica de importancia variable:

output

Item_MRP es la variable más importante seguida de Item_Visibility y Outlet_Location_Type_num. 

Por lo tanto, Xgboost encuentra sus aplicaciones en muchos sectores de la industria y se utiliza con plena capacidad.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *