From b8a5f75f896c0dfd812c89bdf0f5a55e88e715d5 Mon Sep 17 00:00:00 2001 From: Priya Sundaram Date: Mon, 7 Sep 2026 07:13:43 +0000 Subject: [PATCH] Remove xgboost demos and dependency Drop machine_learning/xgboost_classifier.py and machine_learning/xgboost_regressor.py. Both were thin "how-to-use" wrappers around sklearn's XGBClassifier/XGBRegressor rather than from-scratch implementations, and the classifier's only doctest was already disabled (# THIS TEST IS BROKEN!!), so it was never exercised in CI. xgboost is one of the heaviest compiled dependencies in the tree (large wheel, needs OpenMP/libgomp at runtime, no free-threaded wheel yet), and gradient boosting is already implemented from scratch in machine_learning/gradient_boosting_classifier.py and gradient_boosting_regressor.py, so no algorithm coverage is lost. Removes the xgboost dependency from pyproject.toml, its (and its xgboost-only transitive dep nvidia-nccl-cu13) entries from uv.lock, and the two DIRECTORY.md links. Refs #15081 --- DIRECTORY.md | 2 - machine_learning/xgboost_classifier.py | 79 -------------------------- machine_learning/xgboost_regressor.py | 66 --------------------- pyproject.toml | 1 - uv.lock | 29 ---------- 5 files changed, 177 deletions(-) delete mode 100644 machine_learning/xgboost_classifier.py delete mode 100644 machine_learning/xgboost_regressor.py diff --git a/DIRECTORY.md b/DIRECTORY.md index 2b344f964ad6..6d098f1f845a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -696,8 +696,6 @@ * [Support Vector Machines](machine_learning/support_vector_machines.py) * [T Stochastic Neighbour Embedding](machine_learning/t_stochastic_neighbour_embedding.py) * [Word Frequency Functions](machine_learning/word_frequency_functions.py) - * [Xgboost Classifier](machine_learning/xgboost_classifier.py) - * [Xgboost Regressor](machine_learning/xgboost_regressor.py) ## [Maths](maths) * [Abs](maths/abs.py) diff --git a/machine_learning/xgboost_classifier.py b/machine_learning/xgboost_classifier.py deleted file mode 100644 index e845480074b9..000000000000 --- a/machine_learning/xgboost_classifier.py +++ /dev/null @@ -1,79 +0,0 @@ -# XGBoost Classifier Example -import numpy as np -from matplotlib import pyplot as plt -from sklearn.datasets import load_iris -from sklearn.metrics import ConfusionMatrixDisplay -from sklearn.model_selection import train_test_split -from xgboost import XGBClassifier - - -def data_handling(data: dict) -> tuple: - # Split dataset into features and target - # data is features - """ - >>> data_handling(({'data':'[5.1, 3.5, 1.4, 0.2]','target':([0])})) - ('[5.1, 3.5, 1.4, 0.2]', [0]) - >>> data_handling( - ... {'data': '[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', 'target': ([0, 0])} - ... ) - ('[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', [0, 0]) - """ - return (data["data"], data["target"]) - - -def xgboost(features: np.ndarray, target: np.ndarray) -> XGBClassifier: - """ - # THIS TEST IS BROKEN!! >>> xgboost(np.array([[5.1, 3.6, 1.4, 0.2]]), np.array([0])) - XGBClassifier(base_score=0.5, booster='gbtree', callbacks=None, - colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1, - early_stopping_rounds=None, enable_categorical=False, - eval_metric=None, gamma=0, gpu_id=-1, grow_policy='depthwise', - importance_type=None, interaction_constraints='', - learning_rate=0.300000012, max_bin=256, max_cat_to_onehot=4, - max_delta_step=0, max_depth=6, max_leaves=0, min_child_weight=1, - missing=nan, monotone_constraints='()', n_estimators=100, - n_jobs=0, num_parallel_tree=1, predictor='auto', random_state=0, - reg_alpha=0, reg_lambda=1, ...) - """ - classifier = XGBClassifier() - classifier.fit(features, target) - return classifier - - -def main() -> None: - """ - Url for the algorithm: - https://xgboost.readthedocs.io/en/stable/ - Iris type dataset is used to demonstrate algorithm. - """ - - # Load Iris dataset - iris = load_iris() - features, targets = data_handling(iris) - x_train, x_test, y_train, y_test = train_test_split( - features, targets, test_size=0.25 - ) - - names = iris["target_names"] - - # Create an XGBoost Classifier from the training data - xgboost_classifier = xgboost(x_train, y_train) - - # Display the confusion matrix of the classifier with both training and test sets - ConfusionMatrixDisplay.from_estimator( - xgboost_classifier, - x_test, - y_test, - display_labels=names, - cmap="Blues", - normalize="true", - ) - plt.title("Normalized Confusion Matrix - IRIS Dataset") - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - main() diff --git a/machine_learning/xgboost_regressor.py b/machine_learning/xgboost_regressor.py deleted file mode 100644 index 52e041c55ea2..000000000000 --- a/machine_learning/xgboost_regressor.py +++ /dev/null @@ -1,66 +0,0 @@ -# XGBoost Regressor Example -import numpy as np -from sklearn.datasets import fetch_california_housing -from sklearn.metrics import mean_absolute_error, mean_squared_error -from sklearn.model_selection import train_test_split -from xgboost import XGBRegressor - - -def data_handling(data: dict) -> tuple: - # Split dataset into features and target. Data is features. - """ - >>> data_handling(( - ... {'data':'[ 8.3252 41. 6.9841269 1.02380952 322. 2.55555556 37.88 -122.23 ]' - ... ,'target':([4.526])})) - ('[ 8.3252 41. 6.9841269 1.02380952 322. 2.55555556 37.88 -122.23 ]', [4.526]) - """ - return (data["data"], data["target"]) - - -def xgboost( - features: np.ndarray, target: np.ndarray, test_features: np.ndarray -) -> np.ndarray: - """ - >>> xgboost(np.array([[ 2.3571 , 52. , 6.00813008, 1.06775068, - ... 907. , 2.45799458, 40.58 , -124.26]]),np.array([1.114]), - ... np.array([[1.97840000e+00, 3.70000000e+01, 4.98858447e+00, 1.03881279e+00, - ... 1.14300000e+03, 2.60958904e+00, 3.67800000e+01, -1.19780000e+02]])) - array([[1.1139996]], dtype=float32) - """ - xgb = XGBRegressor( - verbosity=0, random_state=42, tree_method="exact", base_score=0.5 - ) - xgb.fit(features, target) - # Predict target for test data - predictions = xgb.predict(test_features) - predictions = predictions.reshape(len(predictions), 1) - return predictions - - -def main() -> None: - """ - The URL for this algorithm - https://xgboost.readthedocs.io/en/stable/ - California house price dataset is used to demonstrate the algorithm. - - Expected error values: - Mean Absolute Error: 0.30957163379906033 - Mean Square Error: 0.22611560196662744 - """ - # Load California house price dataset - california = fetch_california_housing() - data, target = data_handling(california) - x_train, x_test, y_train, y_test = train_test_split( - data, target, test_size=0.25, random_state=1 - ) - predictions = xgboost(x_train, y_train, x_test) - # Error printing - print(f"Mean Absolute Error: {mean_absolute_error(y_test, predictions)}") - print(f"Mean Square Error: {mean_squared_error(y_test, predictions)}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - main() diff --git a/pyproject.toml b/pyproject.toml index ab98e15b2a41..6db357cc9b74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,6 @@ dependencies = [ "statsmodels>=0.14.4", "sympy>=1.13.3", "typing-extensions>=4.12.2", - "xgboost>=2.1.3", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index d167a50cdc19..83b101a4215b 100644 --- a/uv.lock +++ b/uv.lock @@ -902,15 +902,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/07/458c344f0f0c178f4481dad5cca790626ffe4c34eabf9467069d06ee4999/numpy-2.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:5f8e00be2ec6f45f4e8a41a527f68d44a7d96fee92a650e4d8b1326f77f61e6e", size = 10748103, upload-time = "2026-08-09T13:48:24.21Z" }, ] -[[package]] -name = "nvidia-nccl-cu13" -version = "2.31.2" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a0/530efd7db8857c0436868bb7df9764f09fde2bd4d1f0bae546eec9fc40d0/nvidia_nccl_cu13-2.31.2-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:b5563f8e2534f363d93ace022670ba016d3717e190ac4eba564d05fbbe8495b1", size = 252479893, upload-time = "2026-08-11T23:22:01.53Z" }, - { url = "https://files.pythonhosted.org/packages/14/fb/94933e00bb3dcfdf66ea3456739c6a51d322353f7cc64fa1f5f660e695ac/nvidia_nccl_cu13-2.31.2-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:0bcaf0308854cb55fcc35af72e2c83143f3b71e65a4e865e2c586b1cdcdb5ae0", size = 252442223, upload-time = "2026-08-11T23:22:40.341Z" }, -] - [[package]] name = "oauthlib" version = "3.3.1" @@ -1527,7 +1518,6 @@ dependencies = [ { name = "sympy" }, { name = "tweepy" }, { name = "typing-extensions" }, - { name = "xgboost" }, ] [package.dev-dependencies] @@ -1567,7 +1557,6 @@ requires-dist = [ { name = "sympy", specifier = ">=1.13.3" }, { name = "tweepy", specifier = ">=4.14" }, { name = "typing-extensions", specifier = ">=4.12.2" }, - { name = "xgboost", specifier = ">=2.1.3" }, ] [package.metadata.requires-dev] @@ -1666,21 +1655,3 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/39/3daf9f47be208606586de4568ba6713db53ebc8fd7a575aea1fe57983b69/wrapt-2.3.0-py3-none-any.whl", hash = "sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2", size = 61866, upload-time = "2026-07-28T06:06:12.9Z" }, ] -[[package]] -name = "xgboost" -version = "3.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/a9/295320f741c5be4be996c73ee65a2a11852028c50daa7229adb0d61c330b/xgboost-3.4.1.tar.gz", hash = "sha256:6968a4c71efdfa859df0dfcad0d99211c95c28c4ffd6aecff46efff77d18026a", size = 1231819, upload-time = "2026-08-15T08:39:21.197Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/57/ea/0bdcd374241a86f1986e87e272516f0a70d841c3aa86aa9ca167fb651573/xgboost-3.4.1-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:1ea15f15f661825b6a67d87674fb9604a1abb38dd0d4c5cf0486fc85f5203e83", size = 2541584, upload-time = "2026-08-15T08:38:48.484Z" }, - { url = "https://files.pythonhosted.org/packages/f7/94/e5c37a8972ad780edc1d8459d1931356344ca133f7f99ba9cfda516b5bba/xgboost-3.4.1-py3-none-macosx_12_0_arm64.whl", hash = "sha256:a7afd7dbace0951c93aa85ffe046e54bc40893f5b51cd3e7991eb157bf9c7c7c", size = 2365501, upload-time = "2026-08-15T08:38:52.366Z" }, - { url = "https://files.pythonhosted.org/packages/a7/11/4ff1f36ca5c32c642c71c88bec1508ee98b2c3b1e9eb169e8c82de303522/xgboost-3.4.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:7faaf99de26719c22bfae883a02bd56b5a3c2203122616e563cc72b7191b5c96", size = 57196172, upload-time = "2026-08-15T08:39:03.288Z" }, - { url = "https://files.pythonhosted.org/packages/99/c7/bd05c5c430feb347aa040fcc8870135d70b256718deee9bc7d2ca74a77ff/xgboost-3.4.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:6adf2afa396da2ae8ed30295b50b99d4712eed9a6e0ce6cfe069290e4335e51f", size = 57615456, upload-time = "2026-08-15T08:39:09.983Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3c/925394671f6a1668e2a71886de66e80be694eaf37f615cec74eefaf43107/xgboost-3.4.1-py3-none-win_amd64.whl", hash = "sha256:2d30fa513673101f542fdcbd18f30c8f96c064046f798635ac08663e9969f81b", size = 48942686, upload-time = "2026-08-15T08:39:16.182Z" }, - { url = "https://files.pythonhosted.org/packages/90/2f/f2fbe984ca095709fd246546125e78834740f347e3aa7561a22a1e928510/xgboost-3.4.1-py3-none-win_arm64.whl", hash = "sha256:e9312b30e5679d27c1d8b9ee97e092b964d960a672d5d406d9fb3cd0845c9797", size = 2094178, upload-time = "2026-08-15T08:39:19.308Z" }, -]