{"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/robust-positive-unlabeled-learning-via-noise","title":"Robust Positive-Unlabeled Learning via Noise Negative Sample Self-correction","arxiv_id":"2308.00279","date":"2023-08-01","proceeding":null,"authors":["Zhangchi Zhu","Lu Wang","Pu Zhao","Chao Du","Wei zhang","Hang Dong","Bo Qiao","QIngwei Lin","Saravan Rajmohan","Dongmei Zhang"],"abstract":"Learning from positive and unlabeled data is known as positive-unlabeled (PU) learning in literature and has attracted much attention in recent years. One common approach in PU learning is to sample a set of pseudo-negatives from the unlabeled data using ad-hoc thresholds so that conventional supervised methods can be applied with both positive and negative samples. Owing to the label uncertainty among the unlabeled data, errors of misclassifying unlabeled positive samples as negative samples inevitably appear and may even accumulate during the training processes. Those errors often lead to performance degradation and model instability. To mitigate the impact of label uncertainty and improve the robustness of learning with positive and unlabeled data, we propose a new robust PU learning method with a training strategy motivated by the nature of human learning: easy cases should be learned first. Similar intuition has been utilized in curriculum learning to only use easier cases in the early stage of training before introducing more complex cases. Specifically, we utilize a novel ``hardness'' measure to distinguish unlabeled samples with a high chance of being negative from unlabeled samples with large label noise. An iterative training strategy is then implemented to fine-tune the selection of negative samples during the training process in an iterative manner to include more ``easy'' samples in the early stage of training. Extensive experimental validations over a wide range of learning tasks show that this approach can effectively improve the accuracy and stability of learning with positive and unlabeled data. Our code is available at https://github.com/woriazzc/Robust-PU","url_abs":"https://arxiv.org/abs/2308.00279v1","url_pdf":"https://arxiv.org/pdf/2308.00279v1.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":"robust-positive-unlabeled-learning-via-noise","repo_url":"https://github.com/woriazzc/robust-pu","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2308.00279","atlas_url":"https://app.syntology.ai/?focus=2308.00279","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2308.00279"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/woriazzc/robust-pu","reach":{"status":"ok"}}],"summary":{"ran":8,"unverified":2},"by_repo_kind":{"official":{"samples":10,"ran":8,"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":10,"samples":[{"code_sha256_prefix":"423880d374113ff2","entry":"b_focal_loss","repo":"woriazzc/robust-pu","repo_kind":"official","path":"lossFunc.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/lossFunc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"423880d374113ff2"}},{"code_sha256_prefix":"d69100eb16c7d2f1","entry":"calculate_spl_weights","repo":"woriazzc/robust-pu","repo_kind":"official","path":"spl_utills.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/spl_utills.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d69100eb16c7d2f1"}},{"code_sha256_prefix":"2660b9d52e1de712","entry":"export","repo":"woriazzc/robust-pu","repo_kind":"official","path":"helpers.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/helpers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2660b9d52e1de712"}},{"code_sha256_prefix":"783e10c56217d9fe","entry":"get_pu_data","repo":"woriazzc/robust-pu","repo_kind":"official","path":"utils.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"783e10c56217d9fe"}},{"code_sha256_prefix":"1c4f69034a53732d","entry":"logistic_loss","repo":"woriazzc/robust-pu","repo_kind":"official","path":"lossFunc.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/lossFunc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"1c4f69034a53732d"}},{"code_sha256_prefix":"fd988895d0a19180","entry":"parameter_count","repo":"woriazzc/robust-pu","repo_kind":"official","path":"helpers.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/helpers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fd988895d0a19180"}},{"code_sha256_prefix":"f2c81cd6c482737d","entry":"preprocess_uci_dataset","repo":"woriazzc/robust-pu","repo_kind":"official","path":"utils.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f2c81cd6c482737d"}},{"code_sha256_prefix":"cb3faea00e50c270","entry":"sigmoid_loss","repo":"woriazzc/robust-pu","repo_kind":"official","path":"lossFunc.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/lossFunc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cb3faea00e50c270"}},{"code_sha256_prefix":"50359d1b37d86c4a","entry":"get_datasets","repo":"woriazzc/robust-pu","repo_kind":"official","path":"utils.py","file_url":"https://github.com/woriazzc/robust-pu/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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"50359d1b37d86c4a"}},{"code_sha256_prefix":"f0259fb4fd70adb7","entry":"get_ordered_dataset_by_prob","repo":"woriazzc/robust-pu","repo_kind":"official","path":"spl_utills.py","file_url":"https://github.com/woriazzc/robust-pu/blob/HEAD/spl_utills.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f0259fb4fd70adb7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}