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 - Model tuning -- unified classifier parameters plus PU-aware grid search
- Graphical UI -- upload data, configure/compare models, inspect diagnostics, and download results
Quick Start
pip install pu-toolbox # core dependencies (Python >= 3.10)
pip install "pu-toolbox[torch]" # + PyTorch-based methods (nnPU, Dist-PU, Self-PU, ...)
pip install "pu-toolbox[ui]" # + Streamlit graphical interface
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
Graphical UI and model tuning
pip install "pu-toolbox[ui]"
pu-toolbox-ui
The UI supports automatic recommendations, manual model parameters, PU-stratified grid search, metric charts, diagnostics, and report/model downloads. See the model tuning guide and UI guide.
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, 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)
uv run python scripts/generate_structure.py --check # structure document consistency (--update to regenerate)
See CONTRIBUTING.md for contribution guidelines.
License
MIT
Release files for pu-toolbox 1.5.1
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.5.1.tar.gz | 914.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pu_toolbox-1.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / pu_toolbox-1.5.1.tar.gz
| Download URL | pu_toolbox-1.5.1.tar.gz |
|---|---|
| Size | 914.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2ec301af17e85d874f270c31a145c981129477b73b4d0258f8b52faa9aa6a77b
|
|
BLAKE2b-256 checksum How to use checksums |
d3da95f9ff164bdef04700baf57005281f06a7e8d073d1925b3b99f6923beba8
|
| 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.5.1-py3-none-any.whl
| Download URL | pu_toolbox-1.5.1-py3-none-any.whl |
|---|---|
| Size | 238.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c5199aebca3bb72df5d75c5f53cae1402978a936760b3161add61e9ac52fc325
|
|
BLAKE2b-256 checksum How to use checksums |
88f14b31531c3f28f71f6697ae78768ed645e85b3ef2a008d165511c5ef5c354
|
| 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}
|