#train with best validated parameters
final_model <- xgb.train(
params = params,
data = xgb_train,
nrounds = 347
)
#Grid search for hyperparameter tuning
search_grid <- expand.grid(
max_depth = c(3, 6),
eta = c(0.01, 0.3),
colsample_bytree = c(0.5, 0.7)
)
best_auc <- 0
best_params <- list()
for (i in 1:nrow(search_grid)) {
params <- list(
objective = "binary:logistic",
eval_metric = "auc",
max_depth = search_grid$max_depth[i],
eta = search_grid$eta[i],
colsample_bytree = search_grid$colsample_bytree[i]
)
cv_results <- xgb.cv(
params = params,
data = xgb_train,
nfold = 5,
nrounds = 10000,
early_stopping_rounds = 100,
verbose = TRUE
)
mean_auc <- max(cv_results$evaluation_log$test_auc_mean)
if (mean_auc > best_auc) {
best_auc <- mean_auc
best_params <- params
best_nrounds <- cv_results$evaluation_log$iter
}
}