| --- |
| license: cc-by-4.0 |
| library_name: xgboost |
| tags: |
| - neuroscience |
| - electrophysiology |
| - neuropixels |
| - brain-region-classification |
| - international-brain-lab |
| --- |
| |
| # Ephys Atlas region classifier (2026_W32, Cosmos) |
| |
| Predicts the **brain region of each Neuropixels recording channel** from electrophysiological |
| features alone -- no histology required. Trained by the |
| [International Brain Laboratory](https://www.internationalbrainlab.com/) on the Ephys Atlas |
| feature release `2026_W32`. |
|
|
| > **What you can and cannot do without IBL access.** The *model* runs for anyone. Computing |
| > the *input features* from raw Neuropixels data needs `ibllib` / `ibl-neuropixel`, and the |
| > raw data itself is IBL-hosted. To try the model immediately, use the bundled sample under |
| > `example/` -- no account, no raw data, no S3. |
|
|
| ## Quickstart |
|
|
| ```python |
| import pandas as pd |
| from ephysatlas import load_pretrained |
| |
| model = load_pretrained("int-brain-lab/ea-decoder-channel-xgboost", revision="2026_W32") |
| df = pd.read_parquet("example/features_sample.parquet") # or your own features |
| out = model.predict(df) |
| print(out[["predicted_acronym", "prediction_probability", "fold_agreement"]].head()) |
| ``` |
|
|
| `load_pretrained` is the entry point for every ephysatlas model, whatever its family — it reads |
| `ephysatlas_model.json` and returns the right wrapper. Use it rather than importing a concrete |
| class, so your code keeps working as the package evolves. |
|
|
| `predict` returns one row per input channel, indexed identically to the input: |
| `predicted_acronym`, its Allen `predicted_atlas_id`, the fold-averaged |
| `prediction_probability`, a `fold_agreement` column (fraction of the 5 folds voting |
| for the winner -- the natural uncertainty signal), and a `p_<acronym>` column per class. |
|
|
| The prediction columns are namespaced so that `df.join(out)` works: the feature table already |
| carries histology-derived `acronym` / `atlas_id` columns, and predictions must not shadow them. |
|
|
| ## Inputs |
|
|
| - **50 features**, listed in `ephysatlas_model.json` under `inputs.features`. Every |
| one must be present; `predict` raises and names anything missing. |
| - Indexed by `(pid, channel)`, one row per recording channel. |
| - **Must be the denoised aggregated features of vintage `2026_W32`** -- that is, the |
| `raw_ephys_features_denoised.pqt` table produced by the Ephys Atlas aggregation pipeline, |
| as loaded by `ephysatlas.data.read_features_from_disk`. Units are baked into that table by |
| the pipeline (RMS features in dB, `spike_count` in log2), so feeding raw features, or |
| features from a vintage whose units differ, produces confident nonsense. Run |
| `model.selftest()` to confirm your install reproduces the shipped output before trusting it. |
| |
| ## Performance |
| |
| Pooled out-of-fold accuracy: **0.5962** over 13 Cosmos regions, |
| 765 insertions. Splits are by insertion (`pid`), so no channel from a test |
| insertion appears in training. See `confusion_matrix.png`. |
|
|
| ## Limitations |
|
|
| - Trained on IBL Neuropixels 1.0 recordings in mouse. Transfer to NP2, other species or |
| other rigs is untested. |
| - Coverage follows IBL brain-wide-map targeting; rare regions are under-represented. |
| - `Cosmos` is a coarse parcellation. Predictions are per-channel and spatially |
| unregularised -- neighbouring channels can disagree. |
| - Known-misaligned insertions were excluded from training. |
|
|
| ## Reproducibility |
|
|
| **Pin the revision.** `revision="2026_W32"` is an immutable tag. Omitting `revision` resolves |
| to `main`, which tracks whichever model is currently recommended and *will* change when a new |
| feature vintage is published — fine for a first look, not for anything you publish or re-run. |
|
|
| `ephysatlas_model.json` records the training-time `environment` (xgboost, scikit-learn, numpy, |
| ephysatlas, python) and `random_seed`. Verify your install reproduces the shipped output: |
|
|
| ```python |
| model.selftest() |
| ``` |
|
|
| Note `scikit-learn<1.9` is required (1.9 broke `OneToOneFeatureMixin.get_feature_names_out`, |
| which the feature transformer relies on). |
|
|
| ## Citation |
|
|
| Please cite the International Brain Laboratory Ephys Atlas. Model id `2026_W32_Cosmos_guiltless-orange-mallard`, |
| feature vintage `2026_W32`. |
|
|