Documentation Index
Fetch the complete documentation index at: https://docs.nimbusbci.com/llms.txt
Use this file to discover all available pages before exploring further.
Why Bayesian BCI Inference
BCI systems are not just classifiers. They are decision systems that must work under noise, adapt during sessions, and expose confidence before closing the control loop. Classical machine learning methods each solve part of that problem — but they trade away uncertainty, online updates, or transparency in ways that matter in production BCI. This page compares common BCI processing approaches and explains where Bayesian inference on NimbusSDK fits. For a deeper comparison with scikit-learn and pyRiemann — including benchmark methodology — see Why Nimbus SDK? Beyond scikit-learn and pyRiemann for BCI.How BCI Processing Methods Compare
The table below compares classical / frequentist approaches with Bayesian inference on NimbusSDK. Nimbus ships Bayesian versions of LDA and QDA (NimbusLDA, NimbusQDA); the contrast is about inference philosophy and BCI workflow support, not the Gaussian model family itself.
| Criterion | LDA | SVM | DL | Nimbus |
|---|---|---|---|---|
| Real-time performance | High — very fast on simple linear problems | Medium — slower with complex kernels | Low — often GPU-bound; many pipelines stay offline | High (reactive) — streaming APIs and incremental updates; 10–25 ms per trial |
| Adaptability | Low — static model; full retrain for new data | Medium — adaptation is possible but awkward | Medium — needs large new datasets and retraining | High (by design) — partial_fit() on every head; NimbusSTS for drift |
| Robustness (to noise) | Low — sensitive to outliers and noisy covariances | Medium — more robust than LDA, still point-estimate | Medium — can learn noise patterns but needs vast data | High (explicit modeling) — Student’s t posterior predictive and uncertainty-aware rejection |
| Interpretability | High — linear boundaries and clear feature geometry | Medium–low — opaque with non-linear kernels | Very low — black-box decisions | Very high — full posteriors, factor graphs, entropy, and calibration diagnostics |
| Online update | Low — refit each round (~835 µs sklearn LDA) | Low — no native partial_fit | Low — retrain or fine-tune; not microsecond-scale | ~10× faster — conjugate partial_fit() (~87 µs vs. sklearn refit) |
Classical LDA and
NimbusLDA share the same Gaussian model family. The difference is inference: plug-in MLE probabilities vs. multivariate Student’s t posterior predictives, conjugate online updates, and BCI-native reports. See Probabilistic AI & Uncertainty for how those outputs drive rejection and control.When classical methods are enough
Classical LDA, SVM, or deep learning can be the right choice when:- You need a quick offline baseline on a fixed, clean dataset.
- You will not gate actions on confidence, entropy, or rejection thresholds.
- Calibration data is abundant and sessions are short and stationary.
- You are comparing accuracy tables in a lab setting, not closing a real-time BCI loop.
When Bayesian inference on NimbusSDK helps
Nimbus is designed for deployments where the question is not only what class? but also how certain, should this trial be accepted, and how does that affect ITR?- Streaming control —
StreamingSessionand chunk-validated metadata for live EEG loops. - Session drift —
partial_fit()without full retrain;NimbusSTSfor latent-state adaptation. - Label-efficient calibration — active learning with honest BALD on Bayesian posteriors.
- Safety and auditability — confidence gates, trial quality checks, and structured
BatchResultdiagnostics.
~10× Faster Online Updates
The Online update row above is benchmarked on Nimbus’s checked-in online-update scenario (BNCI 2014-004, with Zhou 2016 as a supporting replication):| Strategy | Latency | Notes |
|---|---|---|
nimbus_partial_fit | ~87 µs | Conjugate online update |
nimbus_refit | ~145 µs | Full Nimbus refit |
sklearn_refit | ~835 µs | sklearn LDA refit each round |
sklearn_refit / nimbus_partial_fit ≈ 9.7× on average across subjects (~7.5×–10.2× per subject on the published run) — effectively ~10× faster online adaptation. Medians: ~83 µs vs. ~827 µs.
This latency advantage compounds in cued-calibration loops: faster updates mean shorter sessions, more trials accepted per minute, and smoother real-time feedback without blocking the EEG stream.
Composing With Other Tools
Nimbus is a decision layer, not a replacement for every ML or geometry library.| Tool | Role |
|---|---|
| scikit-learn | Offline baselines and frequentist comparisons |
| pyRiemann | Covariance geometry and tangent-space features |
| NimbusSDK | Bayesian heads, streaming, posteriors, and BCI diagnostics |
Picking a Nimbus Model
Once you choose Bayesian inference, select the head that matches your signal geometry and session length:| Model | Best for |
|---|---|
NimbusLDA | Fast baseline, well-separated classes, motor imagery |
NimbusQDA | Overlapping class distributions, P300-style ERPs |
NimbusSoftmax | Non-Gaussian multiclass boundaries (Python) |
NimbusProbit | Julia-native multinomial probit workflows |
NimbusSTS | Non-stationary sessions, latent-state drift (Python) |
Next Read
Probabilistic AI & Uncertainty
Posteriors, confidence scores, and rejection thresholds.
Message Passing Architecture
Why reactive inference beats batch recompute in streaming BCI.
Active Learning
BALD ranking and label-efficient calibration loops.
sklearn Integration
Benchmark Nimbus against sklearn LDA, SVM, and random forest in code.