Skip to main content

SmallGBM

Gradient boosting for small tabular data.
C backend · Outperforms XGBoost · Beats LightGBM · 2–3× faster training

version python license pip DOI


What is SmallGBM?

SmallGBM is a gradient boosting library designed for small datasets (n < 1000). It combines robust leaf weight estimation with stochastic split selection to outperform XGBoost and LightGBM — with lower variance, no hyperparameter tuning, and a native C core.

New in 1.5.0: the decision tree is now implemented in C (histogram-based split search, 256 quantile bins) and called from Python via ctypes. Same algorithm, 2–3× faster training and ~2× faster inference compared to the pure-Python 1.4.x line.


Benchmark

22 datasets (15 synthetic + 7 real-world) · 5-fold cross-validation · mean ROC-AUC · same default hyperparameters for all models

Model AUC Fit (ms) Predict (ms)
SmallGBM 0.9101 13.4 0.29
XGBoost 0.9036 36.5 0.46
RandomForest 0.9007 28.8 1.57
LightGBM 0.8958 34.3 0.57

SmallGBM outperforms XGBoost by +0.65%, RandomForest by +0.94%, LightGBM by +1.43% — while training 2.7× faster and predicting 1.6–5× faster.


Why Robust Leaf Weights?

Standard gradient boosting uses the mean of residuals per leaf. On small data, one outlier can destroy the estimate.

SmallGBM uses:

  • Median for leaves with n ≤ 30
  • Inverse-distance weighted mean for larger leaves
  • Signal-adaptive shrinkage toward the parent node

This makes predictions robust to outliers and label noise — the main enemies of small-sample learning.


Why Stochastic Split Selection?

Full enumeration of all possible split thresholds overfits on small data. SmallGBM uses 5 random thresholds per feature (via the histogram) — less overfitting, faster training, and better generalization.


Architecture

smallgbm/ ├── smallgbm.py # boosting logic (classifier + regressor) ├── tree.py # ctypes wrapper around libtree └── _c/ ├── tree.c # histogram-based decision tree in C └── tree.h

The C library is compiled automatically on pip install. On macOS it produces libtree.dylib, on Linux libtree.so, on Windows tree.dll. No manual compilation needed.


Installation

pip install smallgbm

Requires a C compiler (cc, clang, or gcc) available on PATH. On macOS install Xcode Command Line Tools (xcode-select --install).


Quickstart

from smallgbm import SmallGBMClassifier

model = SmallGBMClassifier()
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)

Parameters

Parameter Default Description
n_estimators 50 Boosting rounds
max_depth 3 Max tree depth
min_samples_leaf 3 Min samples per leaf
learning_rate 0.1 Shrinkage
sigma_prior 0.5 Regularization strength
colsample_bytree 0.5 Feature fraction per tree
random_state None Reproducibility
auto_scale False RobustScaler internally

Features

  • C core — histogram-based tree with 256 quantile bins per feature
  • Robust leaf weights — median + adaptive shrinkage
  • Stochastic split selection — 5 random thresholds per feature
  • Column subsampling — fights overfitting in high-dimensional small data
  • Uncertainty estimates — predict_with_uncertainty()
  • scikit-learn compatible — fit, predict, predict_proba
  • Auto-compiled on install — no separate build step

Reproducing the benchmark

# from the repository root
clang -O3 -march=native -flto -shared -fPIC smallgbm/_c/tree.c \
      -o smallgbm/_c/libtree.dylib -lm
python -m Tests.test

Citation

@software{emelyanov2026smallgbm,
  author = {Emelyanov, Ilya},
  title = {SmallGBM: Gradient Boosting with Robust Leaf Regularization for Small-Sample Tabular Data},
  year = {2026},
  doi = {10.5281/zenodo.21934674},
  url = {https://github.com/nsdmlk/SmallGBM}
}

License

MIT © Emelyanov Ilya, 2026

Release files for smallgbm 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smallgbm 1.5.0
File Size Uploaded
smallgbm-1.5.0.tar.gz 22.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smallgbm 1.5.0
File Interpreter ABI Platform
smallgbm-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 40.2 kB

Release files / smallgbm-1.5.0.tar.gz

Download URL smallgbm-1.5.0.tar.gz
Size 22.4 kB
Tags Source
SHA-256 checksum
How to use checksums
561fd5bbd4cd8921d8df957bd36badae0594265e289deb9bbeb8c07d1afc7f0b
BLAKE2b-256 checksum
How to use checksums
b3e9ecbf1d28e8110ac7b25cc76ef55727ec7d464bc066e4744f1a710a1e21a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.15.0a5

Release files / smallgbm-1.5.0-py3-none-any.whl

Download URL smallgbm-1.5.0-py3-none-any.whl
Size 17.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
918dccfe6cb5e165ce8085e8407856581d831e525f62bc2acae2882994c229d6
BLAKE2b-256 checksum
How to use checksums
a7ee6fe7bc0aaca583925e35ea0ac3102b9da1142f17c4b8a98ff38ef4a60e50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.15.0a5

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page