modeling contexts, the XGBoost algorithm reigns supreme. It offers efficiency and effectivity positive aspects over different tree-based strategies and different boosting implementations. The XGBoost algorithm features a laundry listing of hyperparameters, though normally solely a subset is chosen in the course of the hyperparameter tuning course of. In my expertise, I’ve at all times used a grid search methodology utilizing k-fold cross-validation to determine the optimum mixture of hyperparameters, though there are various strategies for hyperparameter tuning with the hyperopt library that may search the hyperparameter area extra systematically.
By way of my work constructing XGBoost fashions throughout completely different tasks, I got here throughout the nice useful resource Effective XGBoost by Matt Harrison, a textbook masking XGBoost, together with learn how to tune hyperparameters. Chapter 12 of the guide is devoted to tuning hyperparameters utilizing the hyperopt library; nevertheless, there have been some pure questions that arose upon studying the part. The introduction to the chapter offers a high-level overview of how utilizing hyperopt and Bayesian optimization offers a extra guided method for tuning hyperparameters in comparison with grid search. Nonetheless, I used to be curious, what’s going on right here beneath the hood?
As well as, as is the case with many tutorials about tuning XGBoost hyperparameters, the ranges for the hyperparameters appeared considerably arbitrary. Harrison explains that he pulled the listing of hyperparameters to be tuned from a chat that knowledge scientist Bradley Boehmke gave (here). Each Harrison and Boehmke present tutorials for utilizing hyperopt with the identical set of hyperparameters, though they use barely completely different search areas for locating an optimum mixture. In Boehmke’s case, his search area is way bigger; for instance, he recommends that the utmost depth for every tree (max_depth) be allowed to differ between 1 and 100. Harrison had narrowed the ranges he presents in his guide considerably, however these two instances led to the query: What’s the marginal achieve in comparison with the marginal improve in time from rising the hyperparameter search area when tuning XGBoost fashions?
The aim of this text is centered on these two questions. First, we’ll discover how hyperopt works when tuning hyperparameters at a barely deeper stage to assist achieve some instinct for what’s going on beneath the hood. Second, we’ll discover the tradeoff between giant search areas and narrower search areas in a rigorous method. I hope to reply these questions in order that this can be utilized as a useful resource for understanding hyperparameter tuning sooner or later.
All code for the undertaking could be discovered on my GitHub web page right here: https://github.com/noahswan19/XGBoost-Hyperparameter-Analysis
hyperopt with Tree-Structured Parzen Estimators for Hyperparameter Tuning
Within the chapter of his textbook masking hyperopt, Harrison describes the method of utilizing hyperopt for hyperparameter tuning as utilizing “Bayesian optimization” to determine sequential hyperparameter combos to strive in the course of the tuning course of.
The high-level description makes it clear why utilizing hyperopt is a superior methodology to the grid search methodology, however I used to be curious how that is carried out. What is definitely occurring once we run the fmin perform utilizing the Tree-Structured Parzen (TPE) estimator algorithm?
Sequential Mannequin-Based mostly Optimization
To start out with, the TPE algorithm originates from a paper written in 2011 by James Bergstra, Rémi Bardenet, Yoshua Bengio, and Balázs Kégl, the authors of the hyperopt package deal known as “Algorithms for Hyper-Parameter Optimization”. The paper begins by introducing Sequential Mannequin-Based mostly Optimization (SMBO) algorithms, the place the TPE algorithm is one model of a broader SMBO methodology. SMBOs present a scientific method to decide on the following hyperparameters to guage, avoiding the brute-force nature of grid search and the inefficiency of random search. It entails creating a “surrogate” mannequin for the underlying mannequin we’re optimizing for (i.e. XGBoost in our case), which we will use direct the seek for optimum hyperparameters in a method that’s computationally cheaper than evaluating the underlying mannequin. The algorithm for an SMBO is described within the following picture:
There’s lots of symbols right here, so let’s break down each:
- x* and x: x* represents the hyperparameter mixture that’s being examined in a given trial, and x represents a basic hyperparameter mixture.
- f: That is the “health perform” which is the underlying mannequin that we’re optimizing. Inside this algorithm, f(x*) is mapping a hyperparameter mixture x* to efficiency of this mixture on a validation knowledge set.
- M_0: The M phrases within the algorithm correspond to the “surrogate” mannequin we’re utilizing to approximate f. Since f is normally costly to run, we will use a less expensive estimation, M, to assist determine which hyperparameter combos will seemingly enhance efficiency.
- H: The curly H corresponds to the historical past of hyperparameters searched to this point. It’s up to date upon each iteration. It is usually used to develop an up to date surrogate mannequin after every iteration.
- T: This corresponds to the variety of trials we use for hyperparameter tuning. That is fairly self-explanatory, however this corresponds to the max_evals argument within the fmin perform from hyperopt.
- S: The S corresponds to the criterion used to choose a set of hyperparameter combos to examine given a surrogate mannequin. Within the hyperopt implementation of the TPE algorithm, S corresponds to the Anticipated Enchancment (EI) criterion, described within the following picture.

Every iteration, some variety of doable hyperparameter combos are drawn (within the python hyperopt package deal, that is set to 24 by default). We’ll talk about in a bit how TPE signifies how these 24 are drawn. These 24 hyperparameter combos are evaluated utilizing the EI criterion and surrogate mannequin (which is cheap) to determine the one mixture that’s most certainly to have the best efficiency. That is the place we see the advantages of the surrogate mannequin: as a substitute of coaching and evaluating 24 XGBoost fashions to guage the one greatest hyperparameter mixture, we will approximate this with a computationally cheap surrogate mannequin. Because the title would recommend, the formulation above corresponds to the anticipated efficiency enchancment of a hyperparameter mixture x:
- max(y*-y,0): This represents the precise enchancment in efficiency for a hyperparameter mixture x. y* corresponds to the very best validation loss we’ve attained to this point; we’re aiming to attenuate the validation loss, so we’re searching for values of y which can be lower than y*. This implies we need to maximize EI in our algorithm.
- p_M(x|y): That is the piece of the criterion that can be approximated utilizing the surrogate mannequin and the piece the place TPE will slot in. That is the likelihood density for doable values for y given a hyperparameter mixture x.
So every spherical, we take a set of 24 hyperparameter combos, then proceed with the one which maximizes the EI criterion, which makes use of our surrogate mannequin M.
The place does the TPE algorithm slot in
The important thing piece of the SMBO algorithm that may differ throughout implementations is the surrogate mannequin or how we approximate the success of hyperparameter capabilities. Utilizing the EI criterion, the surrogate mannequin is required to estimate the density perform p(y|x). The paper talked about above introduces one methodology known as the Gaussian Course of Method which fashions p(y|x) instantly, however the TPE method (which is extra typically used for XGBoost hyperparameter optimization) as a substitute approximates p(x|y) and p(y). This method follows from Bayes theorem:

The TPE algorithm splits p(x|y) right into a piecewise mixture of two distributions:
- l(x) if y < y*
- g(x) if y ≥ y*
These two distributions have an intuitive understanding: l(x) refers back to the distribution of hyperparameters related to fashions which have a decrease loss (higher) than the very best mannequin to this point whereas g(x) refers back to the distribution of hyperparameters related to fashions which have a better loss (worse) than the very best mannequin to this point. This expression for p(y|x) is substituted into the equation for EI within the paper, and a mathematical derivation (that will be too verbose to interrupt down fully right here) arrives at the truth that maximizing EI is equal to selecting factors which can be extra seemingly beneath l(x) and fewer seemingly beneath g(x).
So how does this work in follow? When utilizing hyperopt, we use the fmin perform and provide the tpe.recommend algorithm to specify we wish to use the TPE algorithm. We provide an area of hyperparameters the place every parameter is related to a uniform or log-uniform distribution. These preliminary distributions are used to initialize l(x) and g(x) and supply a previous distribution for l(x) and g(x) whereas working with a small variety of preliminary trials. By default (parameter n_startup_jobs in tpe.recommend), hyperopt runs 20 trials by randomly sampling hyperparameter combos from the distributions supplied for the area parameter of fmin. For every of the 20 trials, an XGBoost mannequin is run and a validation loss obtained.
The 20 observations are then cut up in order that two subsets are used to construct non-parametric densities for l(x) and g(x). Subsequent observations are used to replace these distributions. The densities are estimated utilizing a non-parametric methodology (which I’m not certified to explain totally) involving the prior distributions for every hyperparameter (that we specified) and particular person distributions for every remark from the trial historical past. Observations are cut up into subsets utilizing a technique that modifications with the variety of complete trials run; the “n” observations with the bottom loss are used for l(x) with the remaining observations used for g(x). The “n” is decided by multiplying a parameter gamma (default for tpe.recommend is 0.25) by the sq. root of the variety of trials and rounding up; nevertheless, a most for “n” is about at 25 so l(x) can be parameterized with at most 25 values. If we use the default setting for tpe.recommend, then the very best two observations (0.25 * sqrt(20) = 1.12 rounds to 2) from the preliminary trials are used to parameterize l(x) with the remaining 18 used for g(x). The 0.25 worth refers back to the gamma parameter in tpe.recommend which could be modified if desired. Wanting again to the pseudocode for the SMBO algorithm and the formulation for EI, if n observations are used to parameterize l(x), then the (n+1)th remark is the edge worth y*.
As soon as l(x) and g(x) are instantiated utilizing the start trials, we will transfer ahead with every analysis of our goal perform for the variety of max_evals that we specify for fmin. For every iteration, a set of candidate hyperparameter combos (24 by default in tpe.recommend however could be specified with n_EI_candidates) is generated by taking random attracts from l(x). Every of those combos is evaluated utilizing the ratio l(x)/g(x); the mix that maximizes this ratio is chosen as the mix for use for the iteration. The ratio will increase for hyperparameters combos which can be both (1) prone to be related to low losses or (2) unlikely to be related to excessive losses (which drives exploration). This course of of selecting the very best candidate corresponds to utilizing the surrogate mannequin with the EI as mentioned when trying on the pseudocode for an SMBO.
An XGBoost mannequin is then skilled with the highest candidate for the iteration; a loss worth is obtained, and the info level (x*, f(x*)) is used to replace the surrogate mannequin (l(x) and g(x)) to proceed optimization.
Marginal Impact of Hyperparameter Tuning
So now, with a background on how the hyperopt library can be utilized within the hyperparameter tuning course of, we transfer to the query of how utilizing wider distributions impacts mannequin efficiency. When trying to check the efficiency of fashions skilled on giant search areas towards these skilled on narrower search areas, the rapid query is learn how to create the narrower search area. For instance, the presentation from Boehmke advises utilizing a uniform distribution from 1 to 100 for the max_depth hyperparameter. XGBoost fashions are likely to generalize higher when combining numerous weak learners, however does that imply we slim the distribution to a minimal of 1 and a most of fifty? We might have some form of basic understanding from work others have performed to intuitively slim the area, however can we discover a option to analytically slim the search area?
The answer proposed on this article entails working a set of shorter hyperparameter tuning trials to slim the search area based mostly on shallow searches of a wider hyperparameter area. The broader search area we use comes from slide 20 of Boehmke’s aforementioned presentation (here). As an alternative of working hyperparameter tuning on a large search area for 1,000 rounds of hyperparameter testing, we’ll run 20 unbiased trials with 25 rounds of hyperparameter testing every. We’ll slim the search area utilizing percentile values for every hyperparameter utilizing the trial outcomes. With the percentiles, we’ll run a ultimate seek for 200 rounds utilizing the narrower hyperparameter search area, the place the distribution we offer for every hyperparameter is given a most and minimal from the percentile values we see within the trials.
For instance, say we run our 20 trials and get 20 optimum values for max_depth utilizing the shallow search. We select to slim the search area for max_depth from the uniform distribution from 1 to 100 to the uniform distribution from the tenth percentile worth for max_depth from our trials to the ninetieth percentile worth for max_depth. We’ll run a few completely different fashions altering up the percentiles we use to check aggressive narrowing methods.
Fashions produced utilizing the trial-based methodology require 700 evaluations of hyperparameter combos (500 from the trials and 200 from the ultimate analysis). We’ll examine the efficiency of those fashions towards one tuned for 1,000 hyperparameter evaluations on the broader area and one tuned for 700 hyperparameter evaluations on the broader area. We’re curious as as to if this methodology of narrowing the hyperparameter search area will result in quicker convergence towards the optimum hyperparameter mixture or if this narrowing negatively impacts outcomes.
We check this methodology on a job from a previous undertaking involving simulated tennis match outcomes (extra info within the article I wrote here). A part of the undertaking concerned constructing post-match win likelihood fashions utilizing high-level details about every match and statistics for a given participant within the match that adopted a truncated regular distribution; that is the duty used to check the hyperparameter tuning methodology right here. Extra details about the precise job could be discovered within the article and within the code linked firstly of the article. At a excessive stage, we are attempting to take details about what occurred within the match to foretell a binary win/loss for the match; one may use a post-match win likelihood mannequin to determine any gamers which may be overperforming their statistical efficiency, who may be candidates for regression. To coach every XGBoost mannequin, we use log loss/cross-entropy loss because the loss perform. The information for the duty comes from Jeff Sackmann’s GitHub web page right here: https://github.com/JeffSackmann/tennis_atp. Anybody considering tennis or tennis knowledge ought to try his GitHub and glorious web site, tennisabstract.com.
For this job and our methodology, we’ve got six fashions, two skilled on the complete search area and 4 skilled on a narrower area. These are titled as follows within the charts:
- “Full Search”: That is the mannequin skilled for 1000 hyperparameter evaluations throughout the complete hyperparameter search area.
- “XX-XX Percentile”: These fashions are these skilled on a narrower search area for 200 evaluations after the five hundred rounds of trial evaluations on the complete hyperparameter search area. The “10–90 Percentile” mannequin for instance trains on a hyperparameter search area the place the distribution for every hyperparameter is decided by the tenth percentile and ninetieth percentile values from the 20 trials.
- “Shorter Search”: That is the mannequin skilled for 700 hyperparameter evaluations throughout the complete hyperparameter search area. We use this to check the efficiency of the trial methodology towards the broader search area when allotting the identical variety of hyperparameter evaluations to each strategies.
A log of coaching the fashions is included on the GitHub page linked on the prime of the article which incorporates the hyperparameters discovered at every step of the method given the random seeds used together with the time it took to run every mannequin on my laptop computer. It additionally offers the outcomes of the 20 trials run so to know how every narrowed search area could be parameterized. These instances are listed beneath:
- Full Search: ~6000 seconds
- 10–90 Percentile: ~4300 seconds (~3000 seconds for trials, ~1300 for narrower search)
- 20–80 Percentile: ~3800 seconds (~3000 seconds for trials, ~800 for narrower search)
- 30–70 Percentile: ~3650 seconds (~3000 seconds for trials, ~650 for narrower search)
- 40–60 Percentile: ~3600 seconds (~3000 seconds for trials, ~600 for narrower search)
- Shorter Search: ~4600 seconds
The timing doesn’t scale 1:1 with the variety of complete evaluations use; the trial methodology fashions are likely to take much less time to coach given the identical variety of evaluations, with narrower searches taking even much less time. The following query is whether or not this time-saving impacts mannequin efficiency in any respect. We’ll start by taking a look at validation log loss throughout the fashions.

Little or no distinguishes the log losses throughout the fashions, however we’ll zoom in just a little bit to get a visible take a look at the variations. We current the complete vary y-axis first to contextualize the minor variations within the log losses.

Okay so doing higher, however we’ll zoom in yet one more time to see the development most clearly.

We discover that the 20–80 Percentile mannequin attains the very best validation log loss, barely higher than the Full Search and Shorter Search strategies. The opposite percentile fashions all carry out barely worse than the broader search fashions, however the variations are minor throughout the board. We’ll look now on the variations in accuracy between the fashions.

As with the log losses, we see very minor variations and select to zoom in to see a extra definitive development.

The Full Search mannequin attains the very best accuracy of any mannequin, however the 10–90 Percentile and 20–80 Percentile each beat out the Shorter Search mannequin over the identical variety of evaluations. That is the sort of tradeoff I hoped to determine with the caveat that that is task-specific and on a really small scale.
The outcomes utilizing log loss and accuracy recommend the potential for a doable efficiency-performance commerce off when selecting how broad to make the XGBoost hyperparameter search area. We discovered that fashions skilled on a narrower search area can outperform or examine to fashions skilled on wider search areas whereas taking much less time to coach general.
Additional Work
The code supplied within the prior part ought to present modularity to run this check towards completely different duties with out issue; the outcomes for this classification job may differ from these of others. Altering the variety of evaluations run when exploring the hyperparameter search area or the variety of trials run to get percentile ranges may present various conclusions from these discovered right here. This work additionally assumed the set of hyperparameters to tune; one other query I’d be considering exploring could be the marginal impact of together with further hyperparameters to tune (i.e., colsample_bylevel) on the efficiency of an XGBoost mannequin.
References
(used with permission)
[2] M. Harrison, Effective XGBoost (2023), MetaSnake
[3] B. Boehmke, “Advanced XGBoost Hyperparameter Tuning on Databricks” (2021), GitHub
[4] J. Bergstra, R. Bardenet, Y. Bengio, B. Kégl, “Algorithms for Hyper-Parameter Optimization” (2011), NeurIPS 2011

