Distributed privacy-preserving machine learning simulation with Byzantine fault tolerance experiments on the Adult (Census Income) dataset.
This project simulates a distributed learning setting where:
- each node receives a shard of training data,
- each node applies local anonymization,
- honest nodes train local classifiers,
- Byzantine nodes send malicious outputs,
- a central coordinator aggregates node outputs with different robust strategies.
The goal is to evaluate how faulty/adversarial nodes affect predictive performance and how robust aggregation algorithms can mitigate this impact.
The anonymization pipeline is cluster-based and PCA-like:
- data is split into local clusters,
- covariance eigenspace is computed per cluster,
- eigenvector structure is randomized,
- transformed data is mapped back to original dimensionality.
Numerical safeguards are included for tiny clusters to prevent NaN/Inf failures.
For each experiment:
- number of defective nodes:
f in {4, 5, 10}, - total nodes follow
n = 3f + 1, - train/test splits:
60/40,70/30,80/20.
Byzantine nodes are simulated by adversarial probability inversion (1 - p).
The coordinator compares multiple aggregation rules:
meanmediantrimmed_meankrummulti_krumbulyan(practical variant for this node regime)
Each experiment logs:
accuracyf1precisionrecallcohen_kapparoc_aucmcctime_seconds
From the project root:
uv run src/main.pyThis generates/updates the experiment output CSV.
Main result file:
data/byzantine_results.csv
Columns:
defective_nodestotal_nodesdataset_splitaggregation_methodaccuracyf1precisionrecallcohen_kapparoc_aucmcctime_seconds
Expected experiment grid size:
3defective-node settings ×3data splits ×6aggregators =54rows.
pyproject.toml
README.md
data/
adult.csv
byzantine_results.csv
src/
anon.py
main.py
docs/
briefing.txt
- The project is designed for reproducible experimentation and comparison of robust aggregation methods.
- If you change the Byzantine attack model, method rankings may change significantly.
main.pyis the end-to-end execution entry point for all experiments.