Publish 2026_W39_Cosmos_comfortable-cerulean-serval
Browse files- README.md +10 -10
- checksums.json +20 -55
- ephysatlas_model.json +12 -15
- example/expected_predictions.parquet +2 -2
- example/features_sample.parquet +2 -2
- folds/FOLD00/model.ubj +2 -2
- folds/FOLD01/model.ubj +2 -2
- folds/FOLD02/model.ubj +2 -2
- folds/FOLD03/model.ubj +2 -2
- folds/FOLD04/model.ubj +2 -2
- model.ubj +2 -2
- split.json +0 -0
README.md
CHANGED
|
@@ -9,12 +9,12 @@ tags:
|
|
| 9 |
- international-brain-lab
|
| 10 |
---
|
| 11 |
|
| 12 |
-
# Ephys Atlas region classifier (
|
| 13 |
|
| 14 |
Predicts the **brain region of each Neuropixels recording channel** from electrophysiological
|
| 15 |
features alone -- no histology required. Trained by the
|
| 16 |
[International Brain Laboratory](https://www.internationalbrainlab.com/) on the Ephys Atlas
|
| 17 |
-
feature release `
|
| 18 |
|
| 19 |
> **What you can and cannot do without IBL access.** The *model* runs for anyone. Computing
|
| 20 |
> the *input features* from raw Neuropixels data needs `ibllib` / `ibl-neuropixel`, and the
|
|
@@ -27,7 +27,7 @@ feature release `2026_W26`.
|
|
| 27 |
import pandas as pd
|
| 28 |
from ephysatlas import load_pretrained
|
| 29 |
|
| 30 |
-
model = load_pretrained("int-brain-lab/ea-decoder-channel-xgboost", revision="
|
| 31 |
df = pd.read_parquet("example/features_sample.parquet") # or your own features
|
| 32 |
out = model.predict(df)
|
| 33 |
print(out[["predicted_acronym", "prediction_probability", "fold_agreement"]].head())
|
|
@@ -54,10 +54,10 @@ two modes disagree on a small fraction of channels, so pick one per analysis.
|
|
| 54 |
|
| 55 |
## Inputs
|
| 56 |
|
| 57 |
-
- **
|
| 58 |
one must be present; `predict` raises and names anything missing.
|
| 59 |
- Indexed by `(pid, channel)`, one row per recording channel.
|
| 60 |
-
- **Must be the denoised aggregated features of vintage `
|
| 61 |
`raw_ephys_features_denoised.pqt` table produced by the Ephys Atlas aggregation pipeline,
|
| 62 |
as loaded by `ephysatlas.data.read_features_from_disk`. Units are baked into that table by
|
| 63 |
the pipeline (RMS features in dB, `spike_count` in log2), so feeding raw features, or
|
|
@@ -66,8 +66,8 @@ two modes disagree on a small fraction of channels, so pick one per analysis.
|
|
| 66 |
|
| 67 |
## Performance
|
| 68 |
|
| 69 |
-
Pooled out-of-fold accuracy: **0.
|
| 70 |
-
|
| 71 |
insertion appears in training. See `confusion_matrix.png`.
|
| 72 |
|
| 73 |
Note this figure scores each channel with the one fold that held it out, whereas the default
|
|
@@ -85,7 +85,7 @@ typically the marginally better estimator, so treat the number as slightly conse
|
|
| 85 |
|
| 86 |
## Reproducibility
|
| 87 |
|
| 88 |
-
**Pin the revision.** `revision="
|
| 89 |
to `main`, which tracks whichever model is currently recommended and *will* change when a new
|
| 90 |
feature vintage is published — fine for a first look, not for anything you publish or re-run.
|
| 91 |
|
|
@@ -101,5 +101,5 @@ which the feature transformer relies on).
|
|
| 101 |
|
| 102 |
## Citation
|
| 103 |
|
| 104 |
-
Please cite the International Brain Laboratory Ephys Atlas. Model id `
|
| 105 |
-
feature vintage `
|
|
|
|
| 9 |
- international-brain-lab
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Ephys Atlas region classifier (2026_W39, Cosmos)
|
| 13 |
|
| 14 |
Predicts the **brain region of each Neuropixels recording channel** from electrophysiological
|
| 15 |
features alone -- no histology required. Trained by the
|
| 16 |
[International Brain Laboratory](https://www.internationalbrainlab.com/) on the Ephys Atlas
|
| 17 |
+
feature release `2026_W39`.
|
| 18 |
|
| 19 |
> **What you can and cannot do without IBL access.** The *model* runs for anyone. Computing
|
| 20 |
> the *input features* from raw Neuropixels data needs `ibllib` / `ibl-neuropixel`, and the
|
|
|
|
| 27 |
import pandas as pd
|
| 28 |
from ephysatlas import load_pretrained
|
| 29 |
|
| 30 |
+
model = load_pretrained("int-brain-lab/ea-decoder-channel-xgboost", revision="2026_W39")
|
| 31 |
df = pd.read_parquet("example/features_sample.parquet") # or your own features
|
| 32 |
out = model.predict(df)
|
| 33 |
print(out[["predicted_acronym", "prediction_probability", "fold_agreement"]].head())
|
|
|
|
| 54 |
|
| 55 |
## Inputs
|
| 56 |
|
| 57 |
+
- **48 features**, listed in `ephysatlas_model.json` under `inputs.features`. Every
|
| 58 |
one must be present; `predict` raises and names anything missing.
|
| 59 |
- Indexed by `(pid, channel)`, one row per recording channel.
|
| 60 |
+
- **Must be the denoised aggregated features of vintage `2026_W39`** -- that is, the
|
| 61 |
`raw_ephys_features_denoised.pqt` table produced by the Ephys Atlas aggregation pipeline,
|
| 62 |
as loaded by `ephysatlas.data.read_features_from_disk`. Units are baked into that table by
|
| 63 |
the pipeline (RMS features in dB, `spike_count` in log2), so feeding raw features, or
|
|
|
|
| 66 |
|
| 67 |
## Performance
|
| 68 |
|
| 69 |
+
Pooled out-of-fold accuracy: **0.5946** over 13 Cosmos regions,
|
| 70 |
+
811 insertions. Splits are by insertion (`pid`), so no channel from a test
|
| 71 |
insertion appears in training. See `confusion_matrix.png`.
|
| 72 |
|
| 73 |
Note this figure scores each channel with the one fold that held it out, whereas the default
|
|
|
|
| 85 |
|
| 86 |
## Reproducibility
|
| 87 |
|
| 88 |
+
**Pin the revision.** `revision="2026_W39"` is an immutable tag. Omitting `revision` resolves
|
| 89 |
to `main`, which tracks whichever model is currently recommended and *will* change when a new
|
| 90 |
feature vintage is published — fine for a first look, not for anything you publish or re-run.
|
| 91 |
|
|
|
|
| 101 |
|
| 102 |
## Citation
|
| 103 |
|
| 104 |
+
Please cite the International Brain Laboratory Ephys Atlas. Model id `2026_W39_Cosmos_comfortable-cerulean-serval`,
|
| 105 |
+
feature vintage `2026_W39`.
|
checksums.json
CHANGED
|
@@ -1,90 +1,55 @@
|
|
| 1 |
{
|
| 2 |
"algo": "sha1",
|
| 3 |
"files": [
|
| 4 |
-
{
|
| 5 |
-
"path": "confusion_matrix.png",
|
| 6 |
-
"hash": "490a7208f56840764c382070196a46f46e56fe9b",
|
| 7 |
-
"bytes": 210725
|
| 8 |
-
},
|
| 9 |
{
|
| 10 |
"path": "ephysatlas_model.json",
|
| 11 |
-
"hash": "
|
| 12 |
-
"bytes":
|
| 13 |
},
|
| 14 |
{
|
| 15 |
"path": "example/expected_predictions.parquet",
|
| 16 |
-
"hash": "
|
| 17 |
-
"bytes":
|
| 18 |
},
|
| 19 |
{
|
| 20 |
"path": "example/features_sample.parquet",
|
| 21 |
-
"hash": "
|
| 22 |
-
"bytes":
|
| 23 |
-
},
|
| 24 |
-
{
|
| 25 |
-
"path": "folds/FOLD00/meta.yaml",
|
| 26 |
-
"hash": "da8e2925cbae2c4b5ac582fc1188a833e11241f9",
|
| 27 |
-
"bytes": 1260
|
| 28 |
},
|
| 29 |
{
|
| 30 |
"path": "folds/FOLD00/model.ubj",
|
| 31 |
-
"hash": "
|
| 32 |
-
"bytes":
|
| 33 |
-
},
|
| 34 |
-
{
|
| 35 |
-
"path": "folds/FOLD01/meta.yaml",
|
| 36 |
-
"hash": "e45952ed7121248ed436305bbd7cddc3582b2be7",
|
| 37 |
-
"bytes": 1260
|
| 38 |
},
|
| 39 |
{
|
| 40 |
"path": "folds/FOLD01/model.ubj",
|
| 41 |
-
"hash": "
|
| 42 |
-
"bytes":
|
| 43 |
-
},
|
| 44 |
-
{
|
| 45 |
-
"path": "folds/FOLD02/meta.yaml",
|
| 46 |
-
"hash": "3bbb6c16f2bbcd7535f9c0fb1da25e8b90eeaced",
|
| 47 |
-
"bytes": 1260
|
| 48 |
},
|
| 49 |
{
|
| 50 |
"path": "folds/FOLD02/model.ubj",
|
| 51 |
-
"hash": "
|
| 52 |
-
"bytes":
|
| 53 |
-
},
|
| 54 |
-
{
|
| 55 |
-
"path": "folds/FOLD03/meta.yaml",
|
| 56 |
-
"hash": "3180f02a6359ac1a1599d3f71b6ce98c20ea7349",
|
| 57 |
-
"bytes": 1260
|
| 58 |
},
|
| 59 |
{
|
| 60 |
"path": "folds/FOLD03/model.ubj",
|
| 61 |
-
"hash": "
|
| 62 |
-
"bytes":
|
| 63 |
-
},
|
| 64 |
-
{
|
| 65 |
-
"path": "folds/FOLD04/meta.yaml",
|
| 66 |
-
"hash": "54fab968b9f03bde8b8b585fe41fce53e46ba9f9",
|
| 67 |
-
"bytes": 1260
|
| 68 |
},
|
| 69 |
{
|
| 70 |
"path": "folds/FOLD04/model.ubj",
|
| 71 |
-
"hash": "
|
| 72 |
-
"bytes":
|
| 73 |
-
},
|
| 74 |
-
{
|
| 75 |
-
"path": "meta.yaml",
|
| 76 |
-
"hash": "70fcaea1a9a89b3021a5e7b9b0dcca0fbf25474d",
|
| 77 |
-
"bytes": 1198
|
| 78 |
},
|
| 79 |
{
|
| 80 |
"path": "model.ubj",
|
| 81 |
-
"hash": "
|
| 82 |
-
"bytes":
|
| 83 |
},
|
| 84 |
{
|
| 85 |
"path": "split.json",
|
| 86 |
-
"hash": "
|
| 87 |
-
"bytes":
|
| 88 |
}
|
| 89 |
]
|
| 90 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"algo": "sha1",
|
| 3 |
"files": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
{
|
| 5 |
"path": "ephysatlas_model.json",
|
| 6 |
+
"hash": "bf98daff2073309d99ffba9b87af3adaa59d619e",
|
| 7 |
+
"bytes": 2830
|
| 8 |
},
|
| 9 |
{
|
| 10 |
"path": "example/expected_predictions.parquet",
|
| 11 |
+
"hash": "9e492b6eff2aeec7cf7221959bb80e6fc82d9f50",
|
| 12 |
+
"bytes": 85371
|
| 13 |
},
|
| 14 |
{
|
| 15 |
"path": "example/features_sample.parquet",
|
| 16 |
+
"hash": "ae608b7c51acd4fd8e4aaa30adb326f8b796d7cd",
|
| 17 |
+
"bytes": 258470
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
},
|
| 19 |
{
|
| 20 |
"path": "folds/FOLD00/model.ubj",
|
| 21 |
+
"hash": "c8a5b78ae465c044941894586d50952b03bca006",
|
| 22 |
+
"bytes": 5011871
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
},
|
| 24 |
{
|
| 25 |
"path": "folds/FOLD01/model.ubj",
|
| 26 |
+
"hash": "664fde50893806d25af17199fde1bc43dcfa212a",
|
| 27 |
+
"bytes": 4974940
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
},
|
| 29 |
{
|
| 30 |
"path": "folds/FOLD02/model.ubj",
|
| 31 |
+
"hash": "fb21b5290f8cc07aa1283710ef81aa1ce88d05c4",
|
| 32 |
+
"bytes": 4997608
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
},
|
| 34 |
{
|
| 35 |
"path": "folds/FOLD03/model.ubj",
|
| 36 |
+
"hash": "afb097d38ae7a7995bfd562823a72d5d878ff0e2",
|
| 37 |
+
"bytes": 4982063
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
},
|
| 39 |
{
|
| 40 |
"path": "folds/FOLD04/model.ubj",
|
| 41 |
+
"hash": "00c6e2559e7713211cb680ae24582662d080eded",
|
| 42 |
+
"bytes": 4968939
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
},
|
| 44 |
{
|
| 45 |
"path": "model.ubj",
|
| 46 |
+
"hash": "33e4a0c9baf46f77ce8ec0283b4bdb2b24c23582",
|
| 47 |
+
"bytes": 5074753
|
| 48 |
},
|
| 49 |
{
|
| 50 |
"path": "split.json",
|
| 51 |
+
"hash": "69640ef12e8c08ecf466f3d37ad7c28cd1af5cd0",
|
| 52 |
+
"bytes": 231942
|
| 53 |
}
|
| 54 |
]
|
| 55 |
}
|
ephysatlas_model.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
| 1 |
{
|
| 2 |
-
"model_id": "
|
| 3 |
"task": "region-classification",
|
| 4 |
"model_class": "xgboost.sklearn.XGBClassifier",
|
| 5 |
-
"vintage": "
|
| 6 |
"training": {
|
| 7 |
"random_seed": 12345,
|
| 8 |
-
"training_size":
|
| 9 |
"testing_size": 0,
|
| 10 |
-
"hash_training": "
|
| 11 |
"hash_testing": null
|
| 12 |
},
|
| 13 |
"environment": {
|
| 14 |
"python": "3.11.14",
|
| 15 |
"xgboost": "3.2.0",
|
| 16 |
"scikit_learn": "1.8.0",
|
| 17 |
-
"numpy": "2.
|
| 18 |
"pandas": "3.0.5",
|
| 19 |
"torch": "2.14.0",
|
| 20 |
-
"ephysatlas": "0.
|
| 21 |
},
|
| 22 |
"method": "xgboost",
|
| 23 |
"granularity": "channel",
|
|
@@ -57,7 +57,6 @@
|
|
| 57 |
"decay_fit_error",
|
| 58 |
"decay_fit_r_squared",
|
| 59 |
"decay_n_peaks",
|
| 60 |
-
"rms_lf_no_car",
|
| 61 |
"rms_lf_csd",
|
| 62 |
"psd_delta_csd",
|
| 63 |
"psd_theta_csd",
|
|
@@ -78,20 +77,18 @@
|
|
| 78 |
"alpha_mean",
|
| 79 |
"alpha_std",
|
| 80 |
"depolarisation_slope",
|
| 81 |
-
"peak_time_secs",
|
| 82 |
-
"peak_val",
|
| 83 |
"polarity",
|
| 84 |
"recovery_slope",
|
| 85 |
-
"recovery_time_secs",
|
| 86 |
"repolarisation_slope",
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
"spike_count",
|
| 88 |
-
"tip_time_secs",
|
| 89 |
"tip_val",
|
| 90 |
-
"trough_time_secs",
|
| 91 |
-
"trough_val",
|
| 92 |
"outside"
|
| 93 |
],
|
| 94 |
-
"feature_order_sha256": "
|
| 95 |
},
|
| 96 |
"outputs": {
|
| 97 |
"kind": "categorical",
|
|
@@ -134,6 +131,6 @@
|
|
| 134 |
"void_fluid"
|
| 135 |
],
|
| 136 |
"region_map": "Cosmos",
|
| 137 |
-
"accuracy": 0.
|
| 138 |
}
|
| 139 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"model_id": "2026_W39_Cosmos_comfortable-cerulean-serval",
|
| 3 |
"task": "region-classification",
|
| 4 |
"model_class": "xgboost.sklearn.XGBClassifier",
|
| 5 |
+
"vintage": "2026_W39",
|
| 6 |
"training": {
|
| 7 |
"random_seed": 12345,
|
| 8 |
+
"training_size": 811,
|
| 9 |
"testing_size": 0,
|
| 10 |
+
"hash_training": "05a75d4702030cce0e44c86d9d3fecc91f67a9702e1c1493716c7d841344b38b",
|
| 11 |
"hash_testing": null
|
| 12 |
},
|
| 13 |
"environment": {
|
| 14 |
"python": "3.11.14",
|
| 15 |
"xgboost": "3.2.0",
|
| 16 |
"scikit_learn": "1.8.0",
|
| 17 |
+
"numpy": "2.3.5",
|
| 18 |
"pandas": "3.0.5",
|
| 19 |
"torch": "2.14.0",
|
| 20 |
+
"ephysatlas": "0.9.0"
|
| 21 |
},
|
| 22 |
"method": "xgboost",
|
| 23 |
"granularity": "channel",
|
|
|
|
| 57 |
"decay_fit_error",
|
| 58 |
"decay_fit_r_squared",
|
| 59 |
"decay_n_peaks",
|
|
|
|
| 60 |
"rms_lf_csd",
|
| 61 |
"psd_delta_csd",
|
| 62 |
"psd_theta_csd",
|
|
|
|
| 77 |
"alpha_mean",
|
| 78 |
"alpha_std",
|
| 79 |
"depolarisation_slope",
|
|
|
|
|
|
|
| 80 |
"polarity",
|
| 81 |
"recovery_slope",
|
|
|
|
| 82 |
"repolarisation_slope",
|
| 83 |
+
"slowness_s_per_m",
|
| 84 |
+
"slowness_s_per_m_std",
|
| 85 |
+
"spatial_spread_um",
|
| 86 |
+
"spatial_spread_um_std",
|
| 87 |
"spike_count",
|
|
|
|
| 88 |
"tip_val",
|
|
|
|
|
|
|
| 89 |
"outside"
|
| 90 |
],
|
| 91 |
+
"feature_order_sha256": "b1ff4d2e78a689518c73eb480649b09789d3d6d613ae2b4585850b813e24094f"
|
| 92 |
},
|
| 93 |
"outputs": {
|
| 94 |
"kind": "categorical",
|
|
|
|
| 131 |
"void_fluid"
|
| 132 |
],
|
| 133 |
"region_map": "Cosmos",
|
| 134 |
+
"accuracy": 0.5945880856966708
|
| 135 |
}
|
| 136 |
}
|
example/expected_predictions.parquet
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:75bf524095dd94ef5a970cbdc16798344f3dbc74a925353fbd3e5e878f03de2b
|
| 3 |
+
size 85371
|
example/features_sample.parquet
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:020655a5f746c30862c2a27be2e9be2b910b149ef3b97fb17064538487aa481d
|
| 3 |
+
size 258470
|
folds/FOLD00/model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:999fc52438951497bebbe0d7a335f77db9881d94488dd06580a90ecc297959ae
|
| 3 |
+
size 5011871
|
folds/FOLD01/model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fcc90566edc818b6510ca160d6a69c4f418ccdacf1a68225cf5fc3418070104e
|
| 3 |
+
size 4974940
|
folds/FOLD02/model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:19f5a7ef02346c67705576ed2c47725831971d5c3cba1b67ba959088da243635
|
| 3 |
+
size 4997608
|
folds/FOLD03/model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:53b55f8415feb1dca256a19a51670b08d8264ff448ad02cf903a73c236031183
|
| 3 |
+
size 4982063
|
folds/FOLD04/model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:04fad23202941f688e8920e56d691c3f41ce43ec9791a061be54d5821ced4130
|
| 3 |
+
size 4968939
|
model.ubj
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:aa30724d94a82799b65fd13801f75d424704209ab34c2329d091647a21c774f0
|
| 3 |
+
size 5074753
|
split.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|