rpranav commited on
Commit
2e75584
·
verified ·
1 Parent(s): c16a480

Publish 2026_W39_Cosmos_comfortable-cerulean-serval

Browse files
README.md CHANGED
@@ -9,12 +9,12 @@ tags:
9
  - international-brain-lab
10
  ---
11
 
12
- # Ephys Atlas region classifier (2026_W26, 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_W26`.
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="2026_W26")
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
- - **51 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_W26`** -- 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,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.5959** over 13 Cosmos regions,
70
- 761 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,7 +85,7 @@ typically the marginally better estimator, so treat the number as slightly conse
85
 
86
  ## Reproducibility
87
 
88
- **Pin the revision.** `revision="2026_W26"` 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,5 +101,5 @@ which the feature transformer relies on).
101
 
102
  ## Citation
103
 
104
- Please cite the International Brain Laboratory Ephys Atlas. Model id `2026_W26_Cosmos_agitated-latte-sandpiper`,
105
- feature vintage `2026_W26`.
 
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": "65932d7dd76206647e2abbeef575771778dfaad2",
12
- "bytes": 2875
13
  },
14
  {
15
  "path": "example/expected_predictions.parquet",
16
- "hash": "b76e75acb1087fc01f7b9ec368f2b177b981c740",
17
- "bytes": 85727
18
  },
19
  {
20
  "path": "example/features_sample.parquet",
21
- "hash": "0e0386a5f8e9a0112d2eed7d1e9b4dffeaefa319",
22
- "bytes": 274157
23
- },
24
- {
25
- "path": "folds/FOLD00/meta.yaml",
26
- "hash": "da8e2925cbae2c4b5ac582fc1188a833e11241f9",
27
- "bytes": 1260
28
  },
29
  {
30
  "path": "folds/FOLD00/model.ubj",
31
- "hash": "61c2349c734e115b753cab9f519cc0cba001ddcc",
32
- "bytes": 4667085
33
- },
34
- {
35
- "path": "folds/FOLD01/meta.yaml",
36
- "hash": "e45952ed7121248ed436305bbd7cddc3582b2be7",
37
- "bytes": 1260
38
  },
39
  {
40
  "path": "folds/FOLD01/model.ubj",
41
- "hash": "ac129dc6fb50cc61f9e61dc7b2bc672ff2a9c0e2",
42
- "bytes": 4695254
43
- },
44
- {
45
- "path": "folds/FOLD02/meta.yaml",
46
- "hash": "3bbb6c16f2bbcd7535f9c0fb1da25e8b90eeaced",
47
- "bytes": 1260
48
  },
49
  {
50
  "path": "folds/FOLD02/model.ubj",
51
- "hash": "f66e41919925ec0506242d14735778af81ef7c7b",
52
- "bytes": 4709750
53
- },
54
- {
55
- "path": "folds/FOLD03/meta.yaml",
56
- "hash": "3180f02a6359ac1a1599d3f71b6ce98c20ea7349",
57
- "bytes": 1260
58
  },
59
  {
60
  "path": "folds/FOLD03/model.ubj",
61
- "hash": "6b51a4c2c226ac363cddae7d7ab2d462b9f306ce",
62
- "bytes": 4736616
63
- },
64
- {
65
- "path": "folds/FOLD04/meta.yaml",
66
- "hash": "54fab968b9f03bde8b8b585fe41fce53e46ba9f9",
67
- "bytes": 1260
68
  },
69
  {
70
  "path": "folds/FOLD04/model.ubj",
71
- "hash": "635e8a7c72f9dd7a4c54550e5e4baae71fac8e5d",
72
- "bytes": 4705436
73
- },
74
- {
75
- "path": "meta.yaml",
76
- "hash": "70fcaea1a9a89b3021a5e7b9b0dcca0fbf25474d",
77
- "bytes": 1198
78
  },
79
  {
80
  "path": "model.ubj",
81
- "hash": "35ebf36032b127a6a7e15bae2aad14c76d844d14",
82
- "bytes": 4883969
83
  },
84
  {
85
  "path": "split.json",
86
- "hash": "bb9b993f5b18f57f1936c2ce2bfc0c4bb47633c5",
87
- "bytes": 217742
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": "2026_W26_Cosmos_agitated-latte-sandpiper",
3
  "task": "region-classification",
4
  "model_class": "xgboost.sklearn.XGBClassifier",
5
- "vintage": "2026_W26",
6
  "training": {
7
  "random_seed": 12345,
8
- "training_size": 761,
9
  "testing_size": 0,
10
- "hash_training": "2b1c68c524d9a6bf1bc0c5766feba0b5fe070789ec0cb523036517aa57e1c100",
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.4.6",
18
  "pandas": "3.0.5",
19
  "torch": "2.14.0",
20
- "ephysatlas": "0.7.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": "7e37a356402fb16faa605aab5ba4ec129d9886a7c1ace493351c8802c1d1c78a"
95
  },
96
  "outputs": {
97
  "kind": "categorical",
@@ -134,6 +131,6 @@
134
  "void_fluid"
135
  ],
136
  "region_map": "Cosmos",
137
- "accuracy": 0.5958579719667104
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:4c937f8e3996a574b1ad497bd67cce14f2d449391dcef0c826042989d5e0325d
3
- size 85727
 
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:f32bada42429cf891c08d2f443f4db46f2ff6a2692b843a29897896484f7664b
3
- size 274157
 
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:1e1714dadd326f59335c1c4c23e34fb480f272676a7d927f606632999353245a
3
- size 4667085
 
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:0be7566640aa775322d5093f1c6f90cb6f47b86bdc84b1f635affacdd5f6e27a
3
- size 4695254
 
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:9bdd37a338ce35c5dbb8a0c3d54b1c169d412ad1482ffde705c0ab6a20d8655b
3
- size 4709750
 
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:a741524ebb9acb63c96b8448a1f3d7ef7e829dea4350ac33e2d1cf18352d72dd
3
- size 4736616
 
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:aef4a89b6f92839be59d3705619a8525374f9bc354de4a00d57d01dda430b22d
3
- size 4705436
 
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:a1cf2ad112654a1a4ab96744402711b023f230d839691a3977905c773f636838
3
- size 4883969
 
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