Code and experiments for a time series classifier built on the assumption that series of different classes are generated by distinct dynamical systems (ordinary or stochastic differential equations), whose noisy phase trajectories form the observed data.
Each series is assigned to the class whose dynamics best fit it. The theoretical classifier is asymptotically optimal under suitable noise conditions; in practice the intractable exact trajectories are replaced by conditional expectations from a smoothing problem and unknown vector fields are learned from data with Neural ODEs (NODE). Univariate series are lifted to a phase space via the Takens embedding.
See paper/node_classification_Semkin.tex
for the full method and proofs.
.
├── experiment/ # empirical study (see below)
├── paper/ # LaTeX source of the paper and figures
├── diploma/ # thesis based on the paper
├── pyproject.toml # dependencies (managed with uv)
└── uv.lock
Each folder is a self-contained Snakemake
pipeline (Snakefile + config.yaml) with field-learning and classification
scripts. Results are tracked with MLflow.
| Folder | Task |
|---|---|
linear_systems |
Classify three synthetic linear ODE systems; our classifier vs. k-NN+DTW and LSTM baselines across noise levels |
linear_systems_sde |
Same task for the SDE version of the systems |
basic_motions |
Human activity recognition from IMU (BasicMotions), ODE, with acceleration as a control variable |
basic_motions_no_control |
Ablation of the above without the acceleration control |
basic_motions_sde |
IMU activity recognition, SDE |
basic_motions_sde_no_control |
SDE ablation without control |
ecg5000 |
Heart failure detection from univariate ECG (ECG5000) via Takens embedding + NODE |
toy |
Illustrative examples used for the paper's figures (close vector fields, noise, solver discrepancy) |
Requires Python ≥ 3.12. Install with uv:
uv syncPipelines are run from the repository root (paths in each Snakefile are
root-relative), for example:
uv run snakemake -s experiment/linear_systems/Snakefile --cores 1- Kirill Semkin
- Vadim Strijov