Skip to main content

Gradient boosting with Kolmogorov-Arnold Network (KAN) learners -- an interpretable alternative to tree-based boosting (XGBoost/LightGBM/CatBoost).

Project description

KANBoost

Gradient boosting with Kolmogorov-Arnold Network (KAN) learners — an interpretable, from-scratch alternative to tree-based boosting frameworks (XGBoost, LightGBM, CatBoost).

Instead of decision trees as weak learners, KANBoost fits a sequence of small, shallow KAN networks to the pseudo-residuals of the previous stage, following the classic Friedman (2001) gradient boosting recipe. Because each KAN edge is a learnable univariate spline rather than an opaque weight, the resulting ensemble exposes per-feature shape functions that are directly inspectable — closer to a Generalized Additive Model than a black box.

Status: early-stage research project. This is not a drop-in replacement for CatBoost/XGBoost in production. See Benchmarks and Honest limitations below before using this for anything important.

Why this exists

As of mid-2026, there is no widely-used, pip-installable library that combines KAN with gradient boosting. A closely related idea was published as GB-KAN (ICAART 2026), but no public code accompanies that paper. KANBoost is an independent, from-scratch open-source implementation of the same general idea, plus:

  • automatic handling of categorical features (smoothed target-mean encoding, done fold-safe), instead of requiring manual one-hot encoding
  • automatic handling of missing values (median imputation + optional missing-indicator columns), instead of requiring you to impute first
  • built-in early stopping on a validation set
  • approximate feature importances derived from learned spline coefficients

Features

  • Binary and multiclass classification (KANBoostClassifier, one-vs-rest for 3+ classes) and regression (KANBoostRegressor, squared-error or quantile/pinball loss)
  • GPU supportdevice="cuda" (or device=None to auto-detect), falls back to CPU
  • Model persistencemodel.save(path) / KANBoostClassifier.load(path)
  • sample_weight support in fit()
  • validation_fraction — automatic internal train/validation split for early stopping when you don't have a separate eval_set handy
  • batch_size — mini-batch training for larger datasets
  • Interpretability: model.feature_importances() / feature_importances_dict(), model.plot_feature(name) for a partial-dependence-style curve of a single feature's learned response, and model.feature_contributions(X) for native per-sample, per-feature attribution (not a post-hoc method like SHAP)
  • Automatic categorical encoding and missing-value handling, no manual preprocessing required

Install

pip install kanboost

Or from source:

git clone https://github.com/tuamah/kanboost.git
cd kanboost
pip install -e .

Quickstart

import pandas as pd
from sklearn.model_selection import train_test_split
from kanboost import KANBoostClassifier

df = pd.read_csv("your_data.csv")
X = df.drop(columns=["target"])
y = df["target"].values  # binary or multiclass; NaN in X is handled automatically

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

model = KANBoostClassifier(
    n_estimators=100,
    learning_rate=0.2,
    kan_hidden=4,
    kan_grid=3,
    categorical_cols=["region", "plan_type"],  # optional
    early_stopping_rounds=10,
    device="cuda",  # or None to auto-detect, "cpu" to force CPU
)
model.fit(X_train, y_train, eval_set=(X_val, y_val))  # sample_weight=... optional

probs = model.predict_proba(X_val)  # shape (n, 2) binary, (n, n_classes) multiclass
importances = model.feature_importances_dict()

model.save("model.pt")
loaded = KANBoostClassifier.load("model.pt")  # device=... to override where it loads

model.plot_feature("region")  # matplotlib partial-dependence plot

Benchmarks

Preliminary results on a real-world telecom churn dataset (100K rows, 10 numeric features used, 8K-row sample for the KANBoost run due to current training-speed limits):

Model Test AUC Notes
CatBoost (tuned, full data, ~100 columns) 0.6992 production baseline
KANBoostClassifier (this repo, 10 features, 8K sample) 0.64 early prototype, untuned
Plain KAN (no boosting) 0.65 single model, same features
Plain MLP 0.59–0.62 same features

Read this table honestly: KANBoost does not yet beat CatBoost on this dataset. The goal of this repo, at this stage, is to establish a working, extensible implementation and an honest baseline — not to claim state-of-the-art results.

Honest limitations

  • Speed: each weak learner is a full KAN forward/backward pass in pure PyTorch. This is currently far slower per-iteration than a histogram-based tree split in XGBoost/CatBoost/LightGBM.
  • Tuning: hyperparameters (kan_grid, kan_hidden, kan_steps, learning_rate) interact in ways that are not yet well understood; expect to need real tuning for your dataset.
  • Categorical encoding is a simple smoothed target-mean encoder, not CatBoost's ordered boosting scheme — it can leak on small folds if not used carefully.
  • No monotonic constraints or custom loss functions yet, and multiclass classification is one-vs-rest (independent binary chains combined via softmax), not a single joint softmax objective.

Roadmap

See ROADMAP.md for the full project plan, including planned speed optimizations (FastKAN-style RBF basis, torch.compile), symbolic-formula extraction for the full ensemble, and benchmark expansion to standard UCI datasets.

Contributing

Issues and PRs welcome, especially:

  • speed optimizations for the per-iteration KAN fit
  • better categorical encoding
  • benchmark results on additional public datasets

License

MIT — see LICENSE.

Citation / related work

If you use this, please also cite the KAN paper and, where relevant, the GB-KAN paper this project is conceptually closest to:

Liu, Z., Wang, Y., Vaidya, S., et al. (2024). KAN: Kolmogorov-Arnold
Networks. arXiv:2404.19756.

[GB-KAN authors] (2026). Gradient Boosting with Interpretable
Kolmogorov-Arnold Networks. ICAART 2026.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kanboost-0.0.4.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kanboost-0.0.4-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file kanboost-0.0.4.tar.gz.

File metadata

  • Download URL: kanboost-0.0.4.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for kanboost-0.0.4.tar.gz
Algorithm Hash digest
SHA256 9d275b4c6d421c97fcb11cc0e4b76598266f4577205ae737ff326cefad0770ba
MD5 aca707756e2846ebb453455a3b48a0e2
BLAKE2b-256 9480e27e08deaa04207fd0974b4638bbd88485d40de39708c981787e858fa05c

See more details on using hashes here.

File details

Details for the file kanboost-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: kanboost-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for kanboost-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c18cbe3bca4064480412eee316dddd82b6640413487a7f0d684acb1c0df10ded
MD5 990a44db5baae728f72580c6d437334e
BLAKE2b-256 32456acfe60b71644f35b1c23d37d22c0569b72b96937bd8e0e452534269dbf7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page