finds.dev← search

// the find

online-ml/river

★ 5,839 · Python · BSD-3-Clause · updated Jun 2026

🌊 Online machine learning in Python

River is a Python library for online (incremental) machine learning — models that update one sample at a time rather than retraining on full datasets. It's the merger of creme and scikit-multiflow, giving it a wide algorithm coverage: linear models, decision trees, drift detectors, bandits, time series, anomaly detection. Aimed at anyone processing data streams where batch retraining is impractical or too slow.

The core `learn_one` / `predict_one` interface has zero pandas dependency, which matters when you're processing high-throughput streams and don't want DataFrame overhead per event. Concept drift detection is first-class, not bolted on — ADWIN, DDM, EDDM, KSWIN are all proper implementations with their own test suites. The sklearn compatibility shim (`river.compat`) means you can wrap River estimators for use in sklearn pipelines and vice versa, which makes adoption much easier. Active development with a June 2025 push, a JMLR paper behind it, and a public roadmap — this isn't abandonware.

Performance ceiling is real: the library explicitly prioritizes clarity over speed, and processing millions of events per second is not where this shines — that's what the Rust `benches/` directory is trying to address, but it's early. Online clustering and recommender systems are present but thin compared to the classification and regression offerings; don't expect production-grade collaborative filtering here. No GPU support anywhere, which isn't surprising for sample-at-a-time processing but limits use in deep learning adjacent workflows. The mini-batch interface (`learn_many`) requires pandas, which creates an awkward split — you either go full streaming or pull in a heavy dependency for the fast path.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →