{"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/protogate-prototype-based-neural-networks","title":"ProtoGate: Prototype-based Neural Networks with Global-to-local Feature Selection for Tabular Biomedical Data","arxiv_id":"2306.12330","date":"2023-06-21","proceeding":null,"authors":["Xiangjian Jiang","Andrei Margeloiu","Nikola Simidjievski","Mateja Jamnik"],"abstract":"Tabular biomedical data poses challenges in machine learning because it is often high-dimensional and typically low-sample-size (HDLSS). Previous research has attempted to address these challenges via local feature selection, but existing approaches often fail to achieve optimal performance due to their limitation in identifying globally important features and their susceptibility to the co-adaptation problem. In this paper, we propose ProtoGate, a prototype-based neural model for feature selection on HDLSS data. ProtoGate first selects instance-wise features via adaptively balancing global and local feature selection. Furthermore, ProtoGate employs a non-parametric prototype-based prediction mechanism to tackle the co-adaptation problem, ensuring the feature selection results and predictions are consistent with underlying data clusters. We conduct comprehensive experiments to evaluate the performance and interpretability of ProtoGate on synthetic and real-world datasets. The results show that ProtoGate generally outperforms state-of-the-art methods in prediction accuracy by a clear margin while providing high-fidelity feature selection and explainable predictions. Code is available at https://github.com/SilenceX12138/ProtoGate.","url_abs":"https://arxiv.org/abs/2306.12330v2","url_pdf":"https://arxiv.org/pdf/2306.12330v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"protogate-prototype-based-neural-networks","repo_url":"https://github.com/SilenceX12138/ProtoGate","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"inductive-bias","task_name":"Inductive Bias"},{"task_slug":"feature-selection","task_name":"feature selection"}],"methods":[{"method_slug":"feature-selection","method_name":"Feature Selection"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2306.12330","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2306.12330"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/SilenceX12138/ProtoGate","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_honours":1,"unverified":13},"by_repo_kind":{"official":{"samples":14,"ran":1,"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":"cda491bdda02d633","entry":"get_labels_lists","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/utils.py","link_basis":"plan_row","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cda491bdda02d633"}},{"code_sha256_prefix":"bebc20d13e6f240c","entry":"compute_all_metrics","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bebc20d13e6f240c"}},{"code_sha256_prefix":"80b33ca8bcabbd77","entry":"create_wandb_logger","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/run_experiment.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/run_experiment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"80b33ca8bcabbd77"}},{"code_sha256_prefix":"ffdfda6bfc1ce5a8","entry":"detach_tensors","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/utils.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ffdfda6bfc1ce5a8"}},{"code_sha256_prefix":"b4bc72c526346eb6","entry":"get_activation","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/custom_models/protogate/ProtoGate.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/custom_models/protogate/ProtoGate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b4bc72c526346eb6"}},{"code_sha256_prefix":"c4e423c29d9e9d75","entry":"get_run_name","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/run_experiment.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/run_experiment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c4e423c29d9e9d75"}},{"code_sha256_prefix":"07d380ea45c24645","entry":"load_cohort","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"07d380ea45c24645"}},{"code_sha256_prefix":"6e369ec9defcbdf3","entry":"load_csv_data","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"6e369ec9defcbdf3"}},{"code_sha256_prefix":"3b83a3059263cacc","entry":"param_tune_experiment","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/param_tune.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/param_tune.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3b83a3059263cacc"}},{"code_sha256_prefix":"61cbaf7cc10d3fe4","entry":"pearson_distance","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/_shared_imports.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/_shared_imports.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"61cbaf7cc10d3fe4"}},{"code_sha256_prefix":"33fe70f3b4718dbc","entry":"pred_loss","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/custom_models/protogate/ProtoGate.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/custom_models/protogate/ProtoGate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"33fe70f3b4718dbc"}},{"code_sha256_prefix":"f65d0fd16c1fefea","entry":"proto_predict","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/custom_models/protogate/ProtoGate.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/custom_models/protogate/ProtoGate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f65d0fd16c1fefea"}},{"code_sha256_prefix":"29afa4ebe6fffe82","entry":"seed_everything","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/_shared_imports.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/_shared_imports.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"29afa4ebe6fffe82"}},{"code_sha256_prefix":"049998fcfb7fb86f","entry":"spearman_distance","repo":"SilenceX12138/ProtoGate","repo_kind":"official","path":"src/_shared_imports.py","file_url":"https://github.com/SilenceX12138/ProtoGate/blob/HEAD/src/_shared_imports.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"049998fcfb7fb86f"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}