Project F: Reproduce a paper
Download the data behind a published result, reimplement the method, get a number, and explain why it differs from theirs. A graduate-level portfolio piece built from a laptop, and the fastest way to learn what published accuracies mean.
You are skimming: the title, the first figure, and the short version. Switch to Read in the header for the full page, or Deep to open every deep dive.
Most published decoding accuracies are a little too good. Not from dishonesty, usually, but from choices: a favourable cross-validation split, a tuned hyperparameter, a subject dropped. The only way to know what a number means is to try to get it yourself. Pick one of the four targets below, download the public data, implement the method from the paper’s description, and report your number next to theirs with your best explanation of the gap. Then post it. A reproduction with an honest discrepancy is worth more to a lab than a novel result with none.
Four targets, in order of difficulty
EEGNet on BCI Competition IV 2a. The 2018 paper reports four-class motor imagery accuracy on nine subjects. MOABBMOABBMother of All BCI Benchmarks: a library that runs classifiers across many public EEG datasets the same way so results are comparable. Glossary entry downloads the data and BraindecodeBraindecodeA PyTorch library of deep-learning models for EEG, including EEGNet and ShallowConvNet, with dataset loaders. Glossary entry has the model. The exercise is matching their preprocessing and their split (within-subject, session 1 train, session 2 test) and seeing how close you land. Then run the RiemannianRiemannian geometry classifiersMethods that treat each trial's covariance matrix as a point on a curved space and classify by distance there; the strongest simple baseline for EEG today. Glossary entry baseline on the same split and note that it is about as good. Two weeks.
A Kalman filter cursor decoder on intracortical data. The DANDIDANDI archiveA public repository of neurophysiology data in NWB format, including human intracortical BCI recordings from published papers. Glossary entry archive and the Neural Latents Benchmark host monkey and human motor cortex recordings with hand or cursor kinematics. Bin spikes at 20 ms, fit a linear observation model from velocity to firing rates, and run the Kalman filterKalman filterAn estimator that blends a prediction from a motion model with a noisy measurement, weighting each by how much it trusts it; the decoder behind most intracortical cursor control. Glossary entry exactly as the BrainGate papers describe. Report the correlation between decoded and true velocity. Three weeks; the Kalman explainer is the preparation.
A seizure detector on the TUH corpus. Request access to the Temple University seizure corpus. Band-power features per two-second window, a gradient-boosted classifier, and evaluation the way clinicians care about: sensitivity to seizures and false alarms per 24 hours, not accuracy per window. Compare to the published baselines on the corpus. Three to four weeks; the data are large.
A speech decoder. The data behind the 2023 speech-BCI papers (Willett et al.; Metzger et al.) are public. Reimplementing the recurrent network that maps neural features to phonemes is a real project, a month or more, and the result is a portfolio piece that few graduate students have. Start here only after the first two.
The method
Read the paper the way the Phase 0 page says. Then read its methods three times, writing down every choice: filter settings, epoch windows, normalization, split, hyperparameters, and what was done with subjects or trials that were excluded. Where the paper is silent, you must choose, and every such choice goes in your report as “not specified; I assumed.”
Implement in a clean repository with a README that states the target number, your number, and the gap. Use the same evaluation the paper used first, exactly, even if you think it is flawed; then add the evaluation you think is right and report both.
The report
One page. The paper’s claim. Their number. Your number, with the same split. Your number with an honest split, if different. A list of every place you had to assume. Your best explanation of the gap, in order of likelihood. What you learned about the method that the paper did not say. Post it on your site and, if the gap is interesting, send it to the authors; they are usually glad.
- Pick a target. Read the paper and write the five-line summary, then the methods checklist.
- Get the data. For TUH, request access early; it takes days.
- Implement the preprocessing exactly. Check intermediate results against any figure in the paper you can compare to.
- Implement the model. Get any number at all first, then tune toward the paper’s setup.
- Run the paper’s evaluation, then your honest one.
- Write the report. Post it. Note the time it took.