{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2511-22305","title":"FLUX: Efficient Descriptor-Driven Clustered Federated Learning under Arbitrary Distribution Shifts","arxiv_id":"2511.22305","date":"2025-11-27","proceeding":"NeurIPS","authors":["Dario Fenoglio","Mohan Li","Pietro Barbiero","Nicholas D. Lane","Marc Langheinrich","Martin Gjoreski"],"abstract":"Federated Learning (FL) enables collaborative model training across multiple clients while preserving data privacy. Traditional FL methods often use a global model to fit all clients, assuming that clients' data are independent and identically distributed (IID). However, when this assumption does not hold, the global model accuracy may drop significantly, limiting FL applicability in real-world scenarios. To address this gap, we propose FLUX, a novel clustering-based FL (CFL) framework that addresses the four most common types of distribution shifts during both training and test time. To this end, FLUX leverages privacy-preserving client-side descriptor extraction and unsupervised clustering to ensure robust performance and scalability across varying levels and types of distribution shifts. Unlike existing CFL methods addressing non-IID client distribution shifts, FLUX i) does not require any prior knowledge of the types of distribution shifts or the number of client clusters, and ii) supports test-time adaptation, enabling unseen and unlabeled clients to benefit from the most suitable cluster-specific models. Extensive experiments across four standard benchmarks, two real-world datasets and ten state-of-the-art baselines show that FLUX improves performance and stability under diverse distribution shifts, achieving an average accuracy gain of up to 23 percentage points over the best-performing baselines, while maintaining computational and communication overhead comparable to FedAvg.","url_abs":"https://arxiv.org/abs/2511.22305","url_pdf":"https://arxiv.org/pdf/2511.22305","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2511.22305","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2511.22305"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/alfredoLimo/ANDA","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":23},"by_repo_kind":{"found_in_text":{"samples":23,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"c22f37ca60d19d5c","entry":"load_full_datasets","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"utils.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c22f37ca60d19d5c"}},{"code_sha256_prefix":"8a90e00fbc6438a2","entry":"load_split_datasets","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"anda.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/anda.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8a90e00fbc6438a2"}},{"code_sha256_prefix":"1ac45089a2626181","entry":"load_split_datasets_dynamic","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"anda.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/anda.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1ac45089a2626181"}},{"code_sha256_prefix":"891ad5c80364290a","entry":"merge_data","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"utils.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"891ad5c80364290a"}},{"code_sha256_prefix":"f25dc7f07588f5ef","entry":"rotate_dataset","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"utils.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f25dc7f07588f5ef"}},{"code_sha256_prefix":"16b64a18e3b128ea","entry":"split_feature_label_skew","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"16b64a18e3b128ea"}},{"code_sha256_prefix":"b3f9f679b86f0f1a","entry":"split_feature_skew","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b3f9f679b86f0f1a"}},{"code_sha256_prefix":"34f5c3f4ed761f12","entry":"split_label_skew","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"34f5c3f4ed761f12"}},{"code_sha256_prefix":"1f69dcd04d3f2669","entry":"split_trDA_teDR_Px","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1f69dcd04d3f2669"}},{"code_sha256_prefix":"5ac81bec1fce01f8","entry":"split_trDA_teDR_Py","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5ac81bec1fce01f8"}},{"code_sha256_prefix":"ea6e92d7f70005eb","entry":"split_trDA_teDR_Py_x","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ea6e92d7f70005eb"}},{"code_sha256_prefix":"df47519878157bdc","entry":"split_trDA_teND_Px","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"df47519878157bdc"}},{"code_sha256_prefix":"1f13b30ca7272d28","entry":"split_trDA_teND_Py","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1f13b30ca7272d28"}},{"code_sha256_prefix":"954e8bca36512ae7","entry":"split_trDA_teND_Py_x","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDA_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDA_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"954e8bca36512ae7"}},{"code_sha256_prefix":"52b9d39b5ebfd351","entry":"split_trDR_teDR_Px","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"52b9d39b5ebfd351"}},{"code_sha256_prefix":"8b5656660ffeffc5","entry":"split_trDR_teDR_Py","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8b5656660ffeffc5"}},{"code_sha256_prefix":"e62892cf1a395368","entry":"split_trDR_teDR_Py_x","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e62892cf1a395368"}},{"code_sha256_prefix":"3b2a66cafa3dde80","entry":"split_trDR_teND_Px","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3b2a66cafa3dde80"}},{"code_sha256_prefix":"fe9c2fef71e10aed","entry":"split_trDR_teND_Py","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fe9c2fef71e10aed"}},{"code_sha256_prefix":"3dc06bc3aaf65d01","entry":"split_trDR_teND_Py_x","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trDR_teND.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trDR_teND.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3dc06bc3aaf65d01"}},{"code_sha256_prefix":"843c09ae939ba769","entry":"split_trND_teDR_Px","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trND_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trND_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"843c09ae939ba769"}},{"code_sha256_prefix":"3e9ecc25052592ac","entry":"split_trND_teDR_Py","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trND_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trND_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3e9ecc25052592ac"}},{"code_sha256_prefix":"2c85ea3b5c8a86a3","entry":"split_trND_teDR_Py_x","repo":"alfredoLimo/ANDA","repo_kind":"found_in_text","path":"split_fn_trND_teDR.py","file_url":"https://github.com/alfredoLimo/ANDA/blob/HEAD/split_fn_trND_teDR.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2c85ea3b5c8a86a3"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_api"},"syntology_extracted_results":null}