PU Learning Toolbox
Positive-Unlabeled learning in Python -- sklearn-compatible API, 17 research paper methods, SCAR & SAR support.
Features
- 17 algorithms from recent PU learning research, all native clean-room implementations (method cards)
- sklearn-compatible API --
fit(X, y)/predict(X)/decision_function(X), works with pipelines and cross-validation - SCAR & SAR -- constant and instance-dependent labeling mechanisms, with a data simulator
- Data profiling + recommender -- automatic quality checks, SCAR/SAR evidence, and a 7-dimension scoring recommender that picks the method for your data
- Auditable pipeline -- one-call
PUPipeline(profile -> prior -> train -> PU-stratified CV -> evaluate) plus structured diagnostic reports and prior/propensity sensitivity analysis - CLI --
pu-toolboxturns the whole pipeline into terminal commands
Quick Start
pip install pu-toolbox # core dependencies (Python >= 3.10)
pip install "pu-toolbox[torch]" # + PyTorch-based methods (nnPU, Dist-PU, Self-PU, ...)
Installation environments
Any Python interpreter >= 3.10 works: the package is a pure-Python universal wheel with no compiled extensions, so the interpreter source does not matter. Notes per environment:
- venv / uv (recommended): standard isolated environments, nothing special.
- System Python (python.org / Ubuntu / Homebrew): must be >= 3.10.
Ubuntu 22.04+ and Debian 12+ block
pip installinto the system environment (PEP 668) -- create a venv instead. - Anaconda / Miniconda:
pip install pu-toolboxinside a conda env (the package is PyPI-only;conda installwill not find it). If you already installed torch via conda, a plainpip install pu-toolbox(without the[torch]extra) still enables the PyTorch-based methods -- torch is an optional dependency loaded lazily.
Hello World
import numpy as np
from pu_toolbox.preprocessing import make_scar_dataset
from pu_toolbox import PUPipeline
# Synthetic SCAR data (labeling independent of features — the premise of
# every class-prior estimator): some positives are labeled (1), the rest
# are unlabeled (0). For SAR data use make_sar_dataset(mechanism="linear").
X, y_pu, y_true = make_scar_dataset(
n=500, c=0.5, n_features=8, separation=1.0, random_state=42,
)
# One call: profile -> class prior -> train -> PU-stratified CV -> evaluate
report = PUPipeline().fit_evaluate(X, y_pu, y_true=y_true)
print(report.summary())
Full docs (Chinese): docs/README.md. More runnable examples: examples/minimal/.
Command Line
The pu-toolbox console command wraps the full pipeline. Full guide: docs/user/howto/cli.md.
# 1. Generate SCAR demo data (X.csv / y_pu.csv / y_true.csv)
pu-toolbox make-demo-data --out-dir demo/ --n 200 --seed 42
# 2. One-shot full pipeline run (auto mode picks the algorithm)
pu-toolbox run --data demo/X.csv --labels demo/y_pu.csv --out-dir results/
# 3. Inspect results
# results/report.md full Markdown report
# results/report.json strict JSON (no NaN), machine-readable
Documentation
Docs are split by audience; the full index is docs/README.md.
| Entry | Content |
|---|---|
docs/user/quickstart.md |
5-minute start (CLI + Python) |
docs/user/concepts/ |
PU problem, SCAR/SAR, method selection |
docs/user/howto/ |
Task guides: simulation, profiling, pipeline, CLI, reports, sensitivity |
docs/user/reference/api.md |
Precise API contract |
docs/dev/ |
Contributor docs: architecture, structure, roadmap, compatibility |
docs/research/method_cards/ |
Per-paper research cards |
AI workflow skill
pu-workflow (Agent Skills open standard) drives the full PU analysis
workflow — profiling, assumption diagnosis, method recommendation,
training, and result interpretation — from natural language. Loaded
natively by Claude Code / Cursor (.claude/skills/) and Codex / Gemini
CLI / Windsurf (.agents/skills/). The skill ships inside the PyPI
wheel: pip install "pu-toolbox>=1.2" && pu-toolbox skill install —
see How to enable and use the skill.
Development
git clone https://github.com/shuidisjtu/pu-learning-toolbox.git
cd pu-learning-toolbox
pip install -e ".[dev,torch]" # development install
uv run pytest tests/ -v -m "not slow and not e2e" # fast tests (e2e runs nightly)
uv run ruff check pu_toolbox/ # lint
uv run ruff format --check pu_toolbox/ # format check
# Quality gates
uv run python scripts/check_test_quality.py
uv run python scripts/check_doc_links.py
uv run python scripts/check_project_metadata.py
uv run python scripts/check_math_rendering.py
uv run python scripts/check_skill_sync.py
uv run python scripts/check_format.py # ruff check + format --check (full scope)
See CONTRIBUTING.md for contribution guidelines.
License
MIT
Release files for pu-toolbox 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pu_toolbox-1.4.0.tar.gz | 913.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pu_toolbox-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / pu_toolbox-1.4.0.tar.gz
| Download URL | pu_toolbox-1.4.0.tar.gz |
|---|---|
| Size | 913.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0da499d914ad82782e99f84147c8f346e71f41f038ab62c060dce088cc89f320
|
|
BLAKE2b-256 checksum How to use checksums |
f16dcd319e62a95923f5da9f9bbfe1f8d26cda8d0109af699a3c55caddc0377a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / pu_toolbox-1.4.0-py3-none-any.whl
| Download URL | pu_toolbox-1.4.0-py3-none-any.whl |
|---|---|
| Size | 207.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03a7a6050f905aa14388642568df775ac131ffdeca89ca79330f6d75340af69d
|
|
BLAKE2b-256 checksum How to use checksums |
c68a00f716e99d13cc66aef9b78c22654cb4e893bfcfe9b5531327c722b2a54d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|