Xgboost

Latest version: v2.0.3

Safety actively analyzes 629765 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 7

1.7.3

This is a patch release for bug fixes.

* [Breaking] XGBoost Sklearn estimator method `get_params` no longer returns internally configured values. (8634)
* Fix linalg iterator, which may crash the L1 error. (8603)
* Fix loading pickled GPU model with a CPU-only XGBoost build. (8632)
* Fix inference with unseen categories with categorical features. (8591, 8602)
* CI fixes. (8620, 8631, 8579)

1.7.2

This is a patch release for bug fixes.

* Work with newer thrust and libcudacxx (8432)
* Support null value in CUDA array interface namespace. (8486)
* Use `getsockname` instead of `SO_DOMAIN` on AIX. (8437)
* [pyspark] Make QDM optional based on a cuDF check (8471)
* [pyspark] sort qid for SparkRanker. (8497)
* [dask] Properly await async method client.wait_for_workers. (8558)

* [R] Fix CRAN test notes. (8428)

* [doc] Fix outdated document [skip ci]. (8527)
* [CI] Fix github action mismatched glibcxx. (8551)

1.7.1

This is a patch release to incorporate the following hotfix:

* Add back xgboost.rabit for backwards compatibility (8411)

1.7.0

We are excited to announce the feature packed XGBoost 1.7 release. The release note will walk through some of the major new features first, then make a summary for other improvements and language-binding-specific changes.

PySpark

XGBoost 1.7 features initial support for PySpark integration. The new interface is adapted from the existing PySpark XGBoost interface developed by databricks with additional features like `QuantileDMatrix` and the rapidsai plugin (GPU pipeline) support. The new Spark XGBoost Python estimators not only benefit from PySpark ml facilities for powerful distributed computing but also enjoy the rest of the Python ecosystem. Users can define a custom objective, callbacks, and metrics in Python and use them with this interface on distributed clusters. The support is labeled as experimental with more features to come in future releases. For a brief introduction please visit the tutorial on XGBoost's [document page](https://xgboost.readthedocs.io/en/latest/tutorials/spark_estimator.html). (#8355, 8344, 8335, 8284, 8271, 8283, 8250, 8231, 8219, 8245, 8217, 8200, 8173, 8172, 8145, 8117, 8131, 8088, 8082, 8085, 8066, 8068, 8067, 8020, 8385)

Due to its initial support status, the new interface has some limitations; categorical features and multi-output models are not yet supported.

Development of categorical data support
More progress on the experimental support for categorical features. In 1.7, XGBoost can handle missing values in categorical features and features a new parameter `max_cat_threshold`, which limits the number of categories that can be used in the split evaluation. The parameter is enabled when the partitioning algorithm is used and helps prevent over-fitting. Also, the sklearn interface can now accept the `feature_types` parameter to use data types other than dataframe for categorical features. (8280, 7821, 8285, 8080, 7948, 7858, 7853, 8212, 7957, 7937, 7934)


Experimental support for federated learning and new communication collective

An exciting addition to XGBoost is the experimental federated learning support. The federated learning is implemented with a gRPC federated server that aggregates allreduce calls, and federated clients that train on local data and use existing tree methods (approx, hist, gpu_hist). Currently, this only supports horizontal federated learning (samples are split across participants, and each participant has all the features and labels). Future plans include vertical federated learning (features split across participants), and stronger privacy guarantees with homomorphic encryption and differential privacy. See [Demo with NVFlare integration](demo/nvflare/README.md) for example usage with nvflare.

As part of the work, XGBoost 1.7 has replaced the old rabit module with the new collective module as the network communication interface with added support for runtime backend selection. In previous versions, the backend is defined at compile time and can not be changed once built. In this new release, users can choose between `rabit` and `federated.` (8029, 8351, 8350, 8342, 8340, 8325, 8279, 8181, 8027, 7958, 7831, 7879, 8257, 8316, 8242, 8057, 8203, 8038, 7965, 7930, 7911)

The feature is available in the public PyPI binary package for testing.

Quantile DMatrix
Before 1.7, XGBoost has an internal data structure called `DeviceQuantileDMatrix` (and its distributed version). We now extend its support to CPU and renamed it to `QuantileDMatrix`. This data structure is used for optimizing memory usage for the `hist` and `gpu_hist` tree methods. The new feature helps reduce CPU memory usage significantly, especially for dense data. The new `QuantileDMatrix` can be initialized from both CPU and GPU data, and regardless of where the data comes from, the constructed instance can be used by both the CPU algorithm and GPU algorithm including training and prediction (with some overhead of conversion if the device of data and training algorithm doesn't match). Also, a new parameter `ref` is added to `QuantileDMatrix`, which can be used to construct validation/test datasets. Lastly, it's set as default in the scikit-learn interface when a supported tree method is specified by users. (7889, 7923, 8136, 8215, 8284, 8268, 8220, 8346, 8327, 8130, 8116, 8103, 8094, 8086, 7898, 8060, 8019, 8045, 7901, 7912, 7922)

Mean absolute error
The mean absolute error is a new member of the collection of objectives in XGBoost. It's noteworthy since MAE has zero hessian value, which is unusual to XGBoost as XGBoost relies on Newton optimization. Without valid Hessian values, the convergence speed can be slow. As part of the support for MAE, we added line searches into the XGBoost training algorithm to overcome the difficulty of training without valid Hessian values. In the future, we will extend the line search to other objectives where it's appropriate for faster convergence speed. (8343, 8107, 7812, 8380)

XGBoost on Browser
With the help of the [pyodide](https://github.com/pyodide/pyodide) project, you can now run XGBoost on browsers. (#7954, 8369)

Experimental IPv6 Support for Dask

With the growing adaption of the new internet protocol, XGBoost joined the club. In the latest release, the Dask interface can be used on IPv6 clusters, see XGBoost's Dask tutorial for details. (8225, 8234)

Optimizations
We have new optimizations for both the `hist` and `gpu_hist` tree methods to make XGBoost's training even more efficient.

* Hist
Hist now supports optional by-column histogram build, which is automatically configured based on various conditions of input data. This helps the XGBoost CPU hist algorithm to scale better with different shapes of training datasets. (8233, 8259). Also, the build histogram kernel now can better utilize CPU registers (8218)

* GPU Hist
GPU hist performance is significantly improved for wide datasets. GPU hist now supports batched node build, which reduces kernel latency and increases throughput. The improvement is particularly significant when growing deep trees with the default ``depthwise`` policy. (7919, 8073, 8051, 8118, 7867, 7964, 8026)

Breaking Changes
Breaking changes made in the 1.7 release are summarized below.
- The `grow_local_histmaker` updater is removed. This updater is rarely used in practice and has no test. We decided to remove it and focus have XGBoot focus on other more efficient algorithms. (7992, 8091)
- Single precision histogram is removed due to its lack of accuracy caused by significant floating point error. In some cases the error can be difficult to detect due to log-scale operations, which makes the parameter dangerous to use. (7892, 7828)
- Deprecated CUDA architectures are no longer supported in the release binaries. (7774)
- As part of the federated learning development, the `rabit` module is replaced with the new `collective` module. It's a drop-in replacement with added runtime backend selection, see the federated learning section for more details (8257)

General new features and improvements
Before diving into package-specific changes, some general new features other than those listed at the beginning are summarized here.
* Users of `DMatrix` and `QuantileDMatrix` can get the data from XGBoost. In previous versions, only getters for meta info like labels are available. The new method is available in Python (`DMatrix::get_data`) and C. (8269, 8323)
* In previous versions, the GPU histogram tree method may generate phantom gradient for missing values due to floating point error. We fixed such an error in this release and XGBoost is much better equated to handle floating point errors when training on GPU. (8274, 8246)
* Parameter validation is no longer experimental. (8206)
* C pointer parameters and JSON parameters are vigorously checked. (8254, 8254)
* Improved handling of JSON model input. (7953, 7918)
* Support IBM i OS (7920, 8178)

Fixes
Some noteworthy bug fixes that are not related to specific language binding are listed in this section.
* Rename misspelled config parameter for pseudo-Huber (7904)
* Fix feature weights with nested column sampling. (8100)
* Fix loading DMatrix binary in distributed env. (8149)
* Force auc.cc to be statically linked for unusual compiler platforms. (8039)
* New logic for detecting libomp on macos (8384).

Python Package
* Python 3.8 is now the minimum required Python version. (8071)
* More progress on type hint support. Except for the new PySpark interface, the XGBoost module is fully typed. (7742, 7945, 8302, 7914, 8052)
* XGBoost now validates the feature names in `inplace_predict`, which also affects the predict function in scikit-learn estimators as it uses `inplace_predict` internally. (8359)
* Users can now get the data from `DMatrix` using `DMatrix::get_data` or `QuantileDMatrix::get_data`.
* Show `libxgboost.so` path in build info. (7893)
* Raise import error when using the sklearn module while scikit-learn is missing. (8049)
* Use `config_context` in the sklearn interface. (8141)
* Validate features for inplace prediction. (8359)
* Pandas dataframe handling is refactored to reduce data fragmentation. (7843)
* Support more pandas nullable types (8262)
* Remove pyarrow workaround. (7884)

* Binary wheel size
We aim to enable as many features as possible in XGBoost's default binary distribution on PyPI (package installed with pip), but there's a upper limit on the size of the binary wheel. In 1.7, XGBoost reduces the size of the wheel by pruning unused CUDA architectures. (8179, 8152, 8150)

* Fixes
Some noteworthy fixes are listed here:
- Fix the Dask interface with the latest cupy. (8210)
- Check cuDF lazily to avoid potential errors with cuda-python. (8084)
* Fix potential error in DMatrix constructor on 32-bit platform. (8369)

* Maintenance work
- Linter script is moved from dmlc-core to XGBoost with added support for formatting, mypy, and parallel run, along with some fixes (7967, 8101, 8216)
- We now require the use of `isort` and `black` for selected files. (8137, 8096)
- Code cleanups. (7827)
- Deprecate `use_label_encoder` in XGBClassifier. The label encoder has already been deprecated and removed in the previous version. These changes only affect the indicator parameter (7822)
- Remove the use of distutils. (7770)
- Refactor and fixes for tests (8077, 8064, 8078, 8076, 8013, 8010, 8244, 7833)

* Documents
- [dask] Fix potential error in demo. (8079)
- Improved documentation for the ranker. (8356, 8347)
- Indicate lack of py-xgboost-gpu on Windows (8127)
- Clarification for feature importance. (8151)
- Simplify Python getting started example (8153)

R Package
We summarize improvements for the R package briefly here:
* Feature info including names and types are now passed to DMatrix in preparation for categorical feature support. (804)
* XGBoost 1.7 can now gracefully load old R models from RDS for better compatibility with 3-party tuning libraries (7864)
* The R package now can be built with parallel compilation, along with fixes for warnings in CRAN tests. (8330)
* Emit error early if DiagrammeR is missing (8037)
* Fix R package Windows build. (8065)

JVM Packages
The consistency between JVM packages and other language bindings is greatly improved in 1.7, improvements range from model serialization format to the default value of hyper-parameters.

* Java package now supports feature names and feature types for DMatrix in preparation for categorical feature support. (7966)
* Models trained by the JVM packages can now be safely used with other language bindings. (7896, 7907)
* Users can specify the model format when saving models with a stream. (7940, 7955)
* The default value for training parameters is now sourced from XGBoost directly, which helps JVM packages be consistent with other packages. (7938)
* Set the correct objective if the user doesn't explicitly set it (7781)
* Auto-detection of MUSL is replaced by system properties (7921)
* Improved error message for launching tracker. (7952, 7968)
* Fix a race condition in parameter configuration. (8025)
* [Breaking] ` timeoutRequestWorkers` is now removed. With the support for barrier mode, this parameter is no longer needed. (7839)
* Dependencies updates. (7791, 8157, 7801, 8240)

Documents
- Document for the C interface is greatly improved and is now displayed at the [sphinx document page](https://xgboost.readthedocs.io/en/latest/c.html). Thanks to the breathe project, you can view the C API just like the Python API. (#8300)
- We now avoid having XGBoost internal text parser in demos and recommend users use dedicated libraries for loading data whenever it's feasible. (7753)
- Python survival training demos are now displayed at [sphinx gallery](https://xgboost.readthedocs.io/en/latest/python/survival-examples/index.html). (#8328)
- Some typos, links, format, and grammar fixes. (7800, 7832, 7861, 8099, 8163, 8166, 8229, 8028, 8214, 7777, 7905, 8270, 8309, d70e59fef, 7806)
- Updated winning solution under readme.md (7862)
- New security policy. (8360)
- GPU document is overhauled as we consider CUDA support to be feature-complete. (8378)

Maintenance
* Code refactoring and cleanups. (7850, 7826, 7910, 8332, 8204)
* Reduce compiler warnings. (7768, 7916, 8046, 8059, 7974, 8031, 8022)
* Compiler workarounds. (8211, 8314, 8226, 8093)
* Dependencies update. (8001, 7876, 7973, 8298, 7816)
* Remove warnings emitted in previous versions. (7815)
* Small fixes occurred during development. (8008)

CI and Tests
* We overhauled the CI infrastructure to reduce the CI cost and lift the maintenance burdens. Jenkins is replaced with buildkite for better automation, with which, finer control of test runs is implemented to reduce overall cost. Also, we refactored some of the existing tests to reduce their runtime, drooped the size of docker images, and removed multi-GPU C++ tests. Lastly, `pytest-timeout` is added as an optional dependency for running Python tests to keep the test time in check. (7772, 8291, 8286, 8276, 8306, 8287, 8243, 8313, 8235, 8288, 8303, 8142, 8092, 8333, 8312, 8348)
* New documents for how to reproduce the CI environment (7971, 8297)
* Improved automation for JVM release. (7882)
* GitHub Action security-related updates. (8263, 8267, 8360)
* Other fixes and maintenance work. (8154, 7848, 8069, 7943)
* Small updates and fixes to GitHub action pipelines. (8364, 8321, 8241, 7950, 8011)

1.6.1

This is a patch release for bug fixes and Spark barrier mode support. The R package is unchanged.

Experimental support for categorical data
- Fix segfault when the number of samples is smaller than the number of categories. (https://github.com/dmlc/xgboost/pull/7853)
- Enable partition-based split for all model types. (https://github.com/dmlc/xgboost/pull/7857)

JVM packages
We replaced the old parallelism tracker with spark barrier mode to improve the robustness of the JVM package and fix the GPU training pipeline.
- Fix GPU training pipeline quantile synchronization. (7823, 7834)
- Use barrier model in spark package. (https://github.com/dmlc/xgboost/pull/7836, https://github.com/dmlc/xgboost/pull/7840, https://github.com/dmlc/xgboost/pull/7845, https://github.com/dmlc/xgboost/pull/7846)
- Fix shared object loading on some platforms. (https://github.com/dmlc/xgboost/pull/7844)

1.6

multi-output regression and multi-label classification. Along with this, the XGBoost
classifier has proper support for base margin without to need for the user to flatten the
input. In this initial support, XGBoost builds one model for each target similar to the
sklearn meta estimator, for more details, please see our [quick
introduction](https://xgboost.readthedocs.io/en/latest/tutorials/multioutput.html).

(7365, 7736, 7607, 7574, 7521, 7514, 7456, 7453, 7455, 7434, 7429, 7405, 7381)

External memory support
External memory support for both approx and hist tree method is considered feature
complete in XGBoost 1.6. Building upon the iterator-based interface introduced in the
previous version, now both `hist` and `approx` iterates over each batch of data during
training and prediction. In previous versions, `hist` concatenates all the batches into
an internal representation, which is removed in this version. As a result, users can
expect higher scalability in terms of data size but might experience lower performance due
to disk IO. (7531, 7320, 7638, 7372)

Rewritten approx

The `approx` tree method is rewritten based on the existing `hist` tree method. The
rewrite closes the feature gap between `approx` and `hist` and improves the performance.
Now the behavior of `approx` should be more aligned with `hist` and `gpu_hist`. Here is a
list of user-visible changes:

- Supports both `max_leaves` and `max_depth`.
- Supports `grow_policy`.
- Supports monotonic constraint.
- Supports feature weights.
- Use `max_bin` to replace `sketch_eps`.
- Supports categorical data.
- Faster performance for many of the datasets.
- Improved performance and robustness for distributed training.
- Supports prediction cache.
- Significantly better performance for external memory when `depthwise` policy is used.

New serialization format
Based on the existing JSON serialization format, we introduce UBJSON support as a more
efficient alternative. Both formats will be available in the future and we plan to
gradually [phase out](https://github.com/dmlc/xgboost/issues/7547) support for the old
binary model format. Users can opt to use the different formats in the serialization
function by providing the file extension `json` or `ubj`. Also, the `save_raw` function in
all supported languages bindings gains a new parameter for exporting the model in different
formats, available options are `json`, `ubj`, and `deprecated`, see document for the
language binding you are using for details. Lastly, the default internal serialization
format is set to UBJSON, which affects Python pickle and R RDS. (7572, 7570, 7358,
7571, 7556, 7549, 7416)

General new features and improvements
Aside from the major new features mentioned above, some others are summarized here:

* Users can now access the build information of XGBoost binary in Python and C
interface. (7399, 7553)
* Auto-configuration of `seed_per_iteration` is removed, now distributed training should
generate closer results to single node training when sampling is used. (7009)
* A new parameter `huber_slope` is introduced for the `Pseudo-Huber` objective.
* During source build, XGBoost can choose cub in the system path automatically. (7579)
* XGBoost now honors the CPU counts from CFS, which is usually set in docker
environments. (7654, 7704)
* The metric `aucpr` is rewritten for better performance and GPU support. (7297, 7368)
* Metric calculation is now performed in double precision. (7364)
* XGBoost no longer mutates the global OpenMP thread limit. (7537, 7519, 7608, 7590,
7589, 7588, 7687)
* The default behavior of `max_leave` and `max_depth` is now unified (7302, 7551).
* CUDA fat binary is now compressed. (7601)
* Deterministic result for evaluation metric and linear model. In previous versions of
XGBoost, evaluation results might differ slightly for each run due to parallel reduction
for floating-point values, which is now addressed. (7362, 7303, 7316, 7349)
* XGBoost now uses double for GPU Hist node sum, which improves the accuracy of
`gpu_hist`. (7507)

Performance improvements
Most of the performance improvements are integrated into other refactors during feature
developments. The `approx` should see significant performance gain for many datasets as
mentioned in the previous section, while the `hist` tree method also enjoys improved
performance with the removal of the internal `pruner` along with some other
refactoring. Lastly, `gpu_hist` no longer synchronizes the device during training. (7737)

General bug fixes
This section lists bug fixes that are not specific to any language binding.
* The `num_parallel_tree` is now a model parameter instead of a training hyper-parameter,
which fixes model IO with random forest. (7751)
* Fixes in CMake script for exporting configuration. (7730)
* XGBoost can now handle unsorted sparse input. This includes text file formats like
libsvm and scipy sparse matrix where column index might not be sorted. (7731)
* Fix tree param feature type, this affects inputs with the number of columns greater than
the maximum value of int32. (7565)
* Fix external memory with gpu_hist and subsampling. (7481)
* Check the number of trees in inplace predict, this avoids a potential segfault when an
incorrect value for `iteration_range` is provided. (7409)
* Fix non-stable result in cox regression (7756)

Changes in the Python package
Other than the changes in Dask, the XGBoost Python package gained some new features and
improvements along with small bug fixes.

* Python 3.7 is required as the lowest Python version. (7682)
* Pre-built binary wheel for Apple Silicon. (7621, 7612, 7747) Apple Silicon users will
now be able to run `pip install xgboost` to install XGBoost.
* MacOS users no longer need to install `libomp` from Homebrew, as the XGBoost wheel now
bundles `libomp.dylib` library.
* There are new parameters for users to specify the custom metric with new
behavior. XGBoost can now output transformed prediction values when a custom objective is
not supplied. See our explanation in the
[tutorial](https://xgboost.readthedocs.io/en/latest/tutorials/custom_metric_obj.html#reverse-link-function)
for details.
* For the sklearn interface, following the estimator guideline from scikit-learn, all
parameters in `fit` that are not related to input data are moved into the constructor
and can be set by `set_params`. (6751, 7420, 7375, 7369)
* Apache arrow format is now supported, which can bring better performance to users'
pipeline (7512)
* Pandas nullable types are now supported (7760)
* A new function `get_group` is introduced for `DMatrix` to allow users to get the group
information in the custom objective function. (7564)
* More training parameters are exposed in the sklearn interface instead of relying on the
`**kwargs`. (7629)
* A new attribute `feature_names_in_` is defined for all sklearn estimators like
`XGBRegressor` to follow the convention of sklearn. (7526)
* More work on Python type hint. (7432, 7348, 7338, 7513, 7707)
* Support the latest pandas Index type. (7595)
* Fix for Feature shape mismatch error on s390x platform (7715)
* Fix using feature names for constraints with multiple groups (7711)
* We clarified the behavior of the callback function when it contains mutable
states. (7685)
* Lastly, there are some code cleanups and maintenance work. (7585, 7426, 7634, 7665,
7667, 7377, 7360, 7498, 7438, 7667, 7752, 7749, 7751)

Changes in the Dask interface
* Dask module now supports user-supplied host IP and port address of scheduler node.
Please see [introduction](https://xgboost.readthedocs.io/en/latest/tutorials/dask.html#troubleshooting) and
[API document](https://xgboost.readthedocs.io/en/latest/python/python_api.html#optional-dask-configuration)
for reference. (7645, 7581)
* Internal `DMatrix` construction in dask now honers thread configuration. (7337)
* A fix for `nthread` configuration using the Dask sklearn interface. (7633)
* The Dask interface can now handle empty partitions. An empty partition is different
from an empty worker, the latter refers to the case when a worker has no partition of an
input dataset, while the former refers to some partitions on a worker that has zero
sizes. (7644, 7510)
* Scipy sparse matrix is supported as Dask array partition. (7457)
* Dask interface is no longer considered experimental. (7509)

Changes in the R package
This section summarizes the new features, improvements, and bug fixes to the R package.

* `load.raw` can optionally construct a booster as return. (7686)
* Fix parsing decision stump, which affects both transforming text representation to data
table and plotting. (7689)
* Implement feature weights. (7660)
* Some improvements for complying the CRAN release policy. (7672, 7661, 7763)
* Support CSR data for predictions (7615)
* Document update (7263, 7606)
* New maintainer for the CRAN package (7691, 7649)
* Handle non-standard installation of toolchain on macos (7759)

Changes in JVM-packages
Some new features for JVM-packages are introduced for a more integrated GPU pipeline and
better compatibility with musl-based Linux. Aside from this, we have a few notable bug
fixes.

* User can specify the tracker IP address for training, which helps running XGBoost on
restricted network environments. (7808)
* Add support for detecting musl-based Linux (7624)
* Add `DeviceQuantileDMatrix` to Scala binding (7459)
* Add Rapids plugin support, now more of the JVM pipeline can be accelerated by RAPIDS (7491, 7779, 7793, 7806)
* The setters for CPU and GPU are more aligned (7692, 7798)
* Control logging for early stopping (7326)
* Do not repartition when nWorker = 1 (7676)
* Fix the prediction issue for `multi:softmax` (7694)
* Fix for serialization of custom objective and eval (7274)
* Update documentation about Python tracker (7396)
* Remove jackson from dependency, which fixes CVE-2020-36518. (7791)
* Some refactoring to the training pipeline for better compatibility between CPU and
GPU. (7440, 7401, 7789, 7784)
* Maintenance work. (7550, 7335, 7641, 7523, 6792, 4676)

Deprecation
Other than the changes in the Python package and serialization, we removed some deprecated
features in previous releases. Also, as mentioned in the previous section, we plan to
phase out the old binary format in future releases.

* Remove old warning in 1.3 (7279)
* Remove label encoder deprecated in 1.3. (7357)
* Remove old callback deprecated in 1.3. (7280)
* Pre-built binary will no longer support deprecated CUDA architectures including sm35 and
sm50. Users can continue to use these platforms with source build. (7767)

Documentation
This section lists some of the general changes to XGBoost's document, for language binding
specific change please visit related sections.

* Document is overhauled to use the new RTD theme, along with integration of Python
examples using Sphinx gallery. Also, we replaced most of the hard-coded URLs with sphinx
references. (7347, 7346, 7468, 7522, 7530)
* Small update along with fixes for broken links, typos, etc. (7684, 7324, 7334, 7655,
7628, 7623, 7487, 7532, 7500, 7341, 7648, 7311)
* Update document for GPU. [skip ci] (7403)
* Document the status of RTD hosting. (7353)
* Update document for building from source. (7664)
* Add note about CRAN release [skip ci] (7395)

Maintenance
This is a summary of maintenance work that is not specific to any language binding.

* Add CMake option to use /MD runtime (7277)
* Add clang-format configuration. (7383)
* Code cleanups (7539, 7536, 7466, 7499, 7533, 7735, 7722, 7668, 7304, 7293,
7321, 7356, 7345, 7387, 7577, 7548, 7469, 7680, 7433, 7398)
* Improved tests with better coverage and latest dependency (7573, 7446, 7650, 7520,
7373, 7723, 7611, 7771)
* Improved automation of the release process. (7278, 7332, 7470)
* Compiler workarounds (7673)
* Change shebang used in CLI demo. (7389)
* Update affiliation (7289)

CI
Some fixes and update to XGBoost's CI infrastructure. (7739, 7701, 7382, 7662, 7646,
7582, 7407, 7417, 7475, 7474, 7479, 7472, 7626)

Page 2 of 7

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.