EEG machine learning where the reported number survives review

A node canvas of 119 blocks covers the pipeline from design matrix to evaluation — and the evaluation half is built to make an inflated score hard to produce by accident.

The hard part of EEG machine learning is not fitting a classifier. It is producing a number that means what it appears to mean. Random splits across trials from the same subject, a scaler fitted before the split, and a hyperparameter search evaluated on the fold it selected against will all hand you a higher accuracy than your design can support.

BCILattice ships the models and the guardrails together. The ML Suite is a node canvas where a pipeline is assembled from blocks; the evaluation blocks, the split strategy and the results statistics are part of the same graph rather than an afterthought.

What you can put on the canvas

One hundred and eighteen of the 119 blocks are free on every plan. The single gated block is Custom Code, which executes arbitrary Python you supply. Domain adaptation, continual learning, federated averaging, conformal prediction, neural architecture search and the RL trainers are not upsells.

FamilyAvailable
BCI decodingCSP, SPoC, Xdawn, SSD, EMS, unsupervised spatial filter, vectorizer, scaler
Riemannian geometryCovariances, ERP covariances, tangent space with MDM, FgMDM and TSClassifier
Classical modelsSVM, random forest and the rest of the scikit-learn estimator surface
Deep architecturesEEGNet, ShallowConvNet, DeepConvNet, ATCNet, EEGConformer
Sequence modelsLSTM, BiLSTM, GRU, TCN, Mamba SSM
TransformersPatchTST, BrainBERT, EEGTransformer, ViTEEG
Edge modelsMobileEEGNet, QuantizedEEGNet, TinyEEGNet

The split is the experiment

When one subject contributes hundreds of trials, a random split puts near-duplicate trials on both sides of the line and the classifier learns the subject rather than the task. A grouped split keeps a subject wholly in train or wholly in test, and it almost always scores lower.

That lower number is the one that generalises. The Results page has a dedicated validation tab that infers the grouping from the run, states which comparisons the design supports, and flags the ones it does not.

Smart Training: optimise, but never hide

Smart Training plans a run: it derives the configuration from the cohort and the device, records why each decision was made, searches within a compute budget you declare, and reports the number from folds no selection ever saw.

It makes two claims, both checkable from the run record — that every configuration decision was made deliberately rather than inherited from a default, and that within the declared budget the configurations tried, the ones discarded, and the rule that discarded them are all written down.

It explicitly does not claim to make your model better. A grouped split usually scores below a random one and an honestly nested search always scores below a flat one; when the number goes down, the feature has worked.

What comes out

  • Per-fold detail

    Not just a mean. The fold-level scores are there, because a 78% mean over folds of 95 and 61 is a different finding than one over folds of 79 and 77.

  • Group statistics

    Per-group results with the cohort mode recorded, so a unit of analysis is never ambiguous after the fact.

  • Validation tab

    A separate tab that reads the run design and says what it can and cannot support — leaky split, unnested search, or a comparison the grouping does not license.

  • Export and notebook

    Results export in standard formats on every plan; the in-process notebook runs Python against the finished study for anything the report does not cover.

Questions

Can I bring my own model?

Yes. Custom blocks execute Python you supply on the canvas, and the results notebook runs against the study in-process. A scikit-learn estimator or a PyTorch module you wrote can sit in the same pipeline as the built-in blocks.

What is nested cross-validation and do I need it?

It is an inner loop that selects hyperparameters and an outer loop that scores, so the reported number comes from folds the selection never saw. You need it whenever you tune anything — without it the tuning itself inflates the score.

How many trials do I need?

That depends on the paradigm, the number of classes and the model. What the software can do is make the answer visible rather than hidden: per-fold scores, grouped splits and the validation tab together show whether a result is stable or an artifact of a small cohort.

Does model training need a GPU?

Classical pipelines — CSP, Riemannian, SVM, random forest — train on CPU in seconds. Deep architectures benefit substantially from an NVIDIA GPU; CUDA 11.8 through 12.4 is supported, and AMD cards fall back to CPU.

Read the reference

Related

Run a study end to end, on your own machine

The free plan covers two studies, the full analysis suite, and 118 of the 119 ML blocks.