Federated Learning on Multilabel Evolving Data Streams

October 22, 2025 · View on GitHub

For details, see the paper: IEEE Internet of Things Journal - Federated Learning on Multilabel Evolving Data Streams

Abstract

Multilabel classification in distributed evolving data stream environment presents significant challenges, including addressing distributed concept drifts and label dependencies. In this study, we introduce two novel solutions employing federated learning (FL) problem transformation techniques to tackle these challenges effectively. Our first approach is an error-driven micro-cluster-based learning strategy that adapts micro-clusters to the evolving data distributions, enabling the handling of concept drifts from various client sources. Our second approach utilizes a graph-based method that leverages graph centrality to capture label dependency and correlation in distributed multilabel data streams. Experimental evaluations reveal that our proposed solutions outperform state-of-the-art methods in terms of multilabel classification metrics. This study highlights the potential of FL in overcoming the challenges associated with distributed multilabel data stream classification.

overview

Quick Start

1. Install Dependencies

We recommend using conda to set up the environment.

conda create --name venv python=3.11 -y
conda activate venv

pip install -r requirement.txt

2. Run Tests (Optional)

python tests/test_utils.py

3. Run the Code

Parameters

ParameterDefaultDescription
--datasetyelpDataset name
--clients5Number of federated clients
--features671Number of features
--labels5Number of labels
--max_mc500Max micro-clusters per client
--global_mc500Max global micro-clusters
--percent_init0.15Initial data percentage
--run_typefedRun mode: fed (recommended)

Usage Examples

python main.py --dataset yelp --clients 5 --run_type fed

# Scale up with more clients  
python main.py --dataset yelp --clients 10 --run_type fed
python main.py --dataset yelp --clients 20 --run_type fed

# Different datasets
python main.py --dataset scene --clients 3 --run_type fed

The data_preprocessed/ folder contains:

  • yelp.npy - Yelp multi-label dataset
  • scene.npy - Scene multi-label dataset

Dataset Statistics

DatasetInstancesFeaturesFeature TypeLabelsCardinalityLink
Emotions59372numeric61.868Emotions
Birds645260numeric191.014Birds
Enron1,7021,001nominal533.378Enron
Image2,000294numeric51.236Image
Yeast2,417103numeric144.237Yeast
Scene2,407294nominal61.074Scene
Slashdot3,7821,079nominal221.181Slashdot
Tmc2007-50028,600500nominal222.220Tmc2007-500
Yelp10,810671nominal51.638Yelp

Citation

If you find this code useful, please consider giving a star ⭐ and citation

@ARTICLE{11098479,
  author={Lamptey, Khalid Odartey and Ayekai, Browne Judith and Ud Din, Salah},
  journal={IEEE Internet of Things Journal}, 
  title={Federated Learning on Multilabel Evolving Data Streams}, 
  year={2025},
  volume={12},
  number={20},
  pages={42103-42115},
  keywords={Streams;Federated learning;Multi label classification;Concept drift;Distributed databases;Accuracy;Training;Machine learning algorithms;Decision trees;Data models;Concept drift;data streams;federated learning (FL);multilabel classification;prototype-learning},
  doi={10.1109/JIOT.2025.3592954}}