Formula-first generalized additive models with a high-performance Rust core
Project description
gamfit
A formula-first generalized additive model library for Python, backed by a high-performance Rust engine.
gamfit fits Gaussian, binomial, Poisson, and Gamma GLMs with smooth terms,
random effects, location-scale extensions, survival likelihoods, and
flexible/learnable links. Smoothing parameters are selected by REML or LAML.
Posterior sampling uses NUTS.
Install
uv add gamfit
Or with a managed Python (one-off, no project required):
uv pip install gamfit
Wheels are published for Linux (x86_64, aarch64), macOS (x86_64, Apple silicon), and Windows. No Rust toolchain required.
Quick start
import gamfit
train = [
{"y": 1.2, "x": 0.0},
{"y": 1.9, "x": 1.0},
{"y": 3.1, "x": 2.0},
{"y": 4.5, "x": 3.0},
]
model = gamfit.fit(train, "y ~ s(x)")
predictions = model.predict([{"x": 1.5}, {"x": 2.5}], interval=0.95)
print(model.summary())
model.save("model.gam")
Pandas, pyarrow, dict-of-columns, and list-of-records inputs all work without conversion.
What's different
- Three-part penalty structure. Each smooth gets separate penalties for magnitude, gradient, and curvature. Most GAM libraries use one (curvature only) or two; the three-part decomposition gives the smoother more degrees of freedom to distinguish flat-but-offset functions from wiggly ones.
- Flexible link functions. A spline offset from a base link (e.g. probit) lets the data correct for link misspecification while encoding the belief that the base link is approximately right.
- Surface smooths. Thin-plate splines, Duchon radial bases with triple-operator regularization, and Matérn covariance smooths in arbitrary dimension, with automatic knot placement.
- Adaptive anisotropy. Per-axis spatial anisotropy lets the model shrink or stretch each feature axis independently within a single joint smooth.
- Composable basis/kernel. Mix and match the kernel of one spline family with the length-scale behavior of another (e.g. Duchon kernel with Matérn-style global κ scaling).
scikit-learn integration
from gamfit.sklearn import GAMRegressor
est = GAMRegressor(formula="y ~ s(x)")
est.fit(train)
preds = est.predict([{"x": 1.5}, {"x": 2.5}])
Public API
| Symbol | Purpose |
|---|---|
gamfit.fit(data, formula, **kwargs) |
Fit a model from a dataset and a Wilkinson-style formula. |
gamfit.load(path) / gamfit.loads(bytes) |
Reload a saved model. |
gamfit.validate_formula(data, formula, ...) |
Type-check a formula against a dataset without fitting. |
gamfit.build_info() |
Native-extension build metadata. |
gamfit.explain_error(exc) |
Convert a gamfit exception into a human-readable hint. |
gamfit.Model |
Fitted-model handle: predict, summary, check, diagnose, plot, report, save. |
gamfit.sklearn.GAMRegressor / GAMClassifier |
scikit-learn-compatible estimators. |
See the project documentation for the full guide, the formula DSL reference, and the CLI.
Optional extras
uv add "gamfit[pandas]" # pandas + pyarrow input/output
uv add "gamfit[plot]" # matplotlib-based plotting
uv add "gamfit[sklearn]" # scikit-learn integration
uv add "gamfit[all]" # everything
License
AGPL-3.0-or-later. See LICENSE. A commercial license is available for closed-source or SaaS use — see COMMERCIAL.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file gamfit-0.1.17.tar.gz.
File metadata
- Download URL: gamfit-0.1.17.tar.gz
- Upload date:
- Size: 3.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67b4512ec997a0c3f7086475b0eafef80a67d33997e5a7503584fa40f162ee05
|
|
| MD5 |
969e73bfc2601cf0107f1c6a807ff85c
|
|
| BLAKE2b-256 |
fb092b00640e11769b05a3a936052437d8db25d25078fba856adfe7153abf625
|