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.
| Family | Available |
|---|---|
| BCI decoding | CSP, SPoC, Xdawn, SSD, EMS, unsupervised spatial filter, vectorizer, scaler |
| Riemannian geometry | Covariances, ERP covariances, tangent space with MDM, FgMDM and TSClassifier |
| Classical models | SVM, random forest and the rest of the scikit-learn estimator surface |
| Deep architectures | EEGNet, ShallowConvNet, DeepConvNet, ATCNet, EEGConformer |
| Sequence models | LSTM, BiLSTM, GRU, TCN, Mamba SSM |
| Transformers | PatchTST, BrainBERT, EEGTransformer, ViTEEG |
| Edge models | MobileEEGNet, 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
Deep Learning for BCI and EEG
The published BCI architectures, the sequence models and the transformers are blocks on a canvas. Training runs on your machine against your own GPU.
BCI Domain Adaptation
CORAL, MMD alignment, Transfer Component Analysis, a DANN discriminator, feature alignment and subject adaptation — assembled on the same canvas as the model they feed.
EEG Analysis Software
ICA review with components you actually label, channel scoring you confirm, epoching with rejection you can see, and a time-frequency view that computes once and derives seven views from it.
Reproducible BCI Research
A methods section is a summary written from memory weeks after the run. A study that carries its own stages, parameters and fold scores is the run itself.