{"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/learning-from-positive-and-unlabeled-data-3","title":"Learning from Positive and Unlabeled Data with Arbitrary Positive Shift","arxiv_id":"2002.10261","date":"2020-02-24","proceeding":"NeurIPS 2020 12","authors":["Zayd Hammoudeh","Daniel Lowd"],"abstract":"Positive-unlabeled (PU) learning trains a binary classifier using only positive and unlabeled data. A common simplifying assumption is that the positive data is representative of the target positive class. This assumption rarely holds in practice due to temporal drift, domain shift, and/or adversarial manipulation. This paper shows that PU learning is possible even with arbitrarily non-representative positive data given unlabeled data from the source and target distributions. Our key insight is that only the negative class's distribution need be fixed. We integrate this into two statistically consistent methods to address arbitrary positive bias - one approach combines negative-unlabeled learning with unlabeled-unlabeled learning while the other uses a novel, recursive risk estimator. Experimental results demonstrate our methods' effectiveness across numerous real-world datasets and forms of positive bias, including disjoint positive class-conditional supports. Additionally, we propose a general, simplified approach to address PU risk estimation overfitting.","url_abs":"https://arxiv.org/abs/2002.10261v4","url_pdf":"https://arxiv.org/pdf/2002.10261v4.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":"learning-from-positive-and-unlabeled-data-3","repo_url":"https://github.com/ZaydH/arbitrary_pu","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2002.10261","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2002.10261"}},"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":"deterministic:regex_extraction","url":"https://github.com/ZaydH/arbitrary_pu","reach":null}],"summary":{"ran":2,"ran_fixture":1,"unverified":1},"by_repo_kind":{"official":{"samples":4,"ran":3,"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":"0967c71c2b759a0e","entry":"Labels","repo":"ZaydH/arbitrary_pu","repo_kind":"official","path":"src/apu/purr.py","file_url":"https://github.com/ZaydH/arbitrary_pu/blob/HEAD/src/apu/purr.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0967c71c2b759a0e"}},{"code_sha256_prefix":"1f2cb405c33ed7a9","entry":"PURR","repo":"ZaydH/arbitrary_pu","repo_kind":"official","path":"src/apu/purr.py","file_url":"https://github.com/ZaydH/arbitrary_pu/blob/HEAD/src/apu/purr.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1f2cb405c33ed7a9"}},{"code_sha256_prefix":"3291e1486efcad45","entry":"_get_mean_loss","repo":"ZaydH/arbitrary_pu","repo_kind":"official","path":"src/apu/purr.py","file_url":"https://github.com/ZaydH/arbitrary_pu/blob/HEAD/src/apu/purr.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3291e1486efcad45"}},{"code_sha256_prefix":"361be21096932b40","entry":"RiskEstimator","repo":"ZaydH/arbitrary_pu","repo_kind":"official","path":"src/apu/purr.py","file_url":"https://github.com/ZaydH/arbitrary_pu/blob/HEAD/src/apu/purr.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":"361be21096932b40"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}