Skip to main content

Joint Probability Trees - A formalism for learning and reasoning about joint probability distributions

Project description

pyjpt — Joint Probability Trees

Joint Probability Trees

Joint Probability Trees (JPTs) are a formalism for learning and reasoning about joint probability distributions that is tractable for practical applications. JPTs support both symbolic and subsymbolic variables in a single hybrid model without relying on prior knowledge about variable dependencies or families of distributions.

JPT representations build on tree structures that partition the probability space into relevant subregions elicited from training data, rather than postulating a rigid dependency model prior to learning. Learning and inference scale linearly, and the tree structure enables white-box reasoning about any posterior probability P(Q|E), providing interpretable explanations for every inference result.

Installation

Install the core package from PyPI:

pip install pyjpt

Optional dependencies

Depending on your use case, install one or more optional dependency groups:

pip install pyjpt[matplotlib]   # matplotlib and graphviz plotting
pip install pyjpt[plotly]       # interactive plotly plotting
pip install pyjpt[seq]          # sequential/temporal models
pip install pyjpt[mlflow]       # MLflow experiment tracking

Multiple groups can be combined:

pip install pyjpt[matplotlib,mlflow]

Development setup

Clone the repository and install in editable mode with all development dependencies:

git clone https://github.com/joint-probability-trees/jpt-dev
cd jpt-dev
pip install -e ".[dev]"

By default, Cython extensions are compiled during installation. For development, you can skip pre-compilation and let pyximport handle on-the-fly compilation at runtime instead:

JPT_NO_CYTHON=1 pip install -e ".[dev]"

With on-the-fly compilation, changes to .pyx files are picked up automatically on the next import without requiring a rebuild.

Running tests

cd test
python -m unittest discover

Building distributions

python -m build            # sdist + wheel
python -m build --sdist    # source distribution only
python -m build --wheel    # wheel only

Documentation

The documentation is hosted on Read the Docs.

Building the documentation locally

Install the documentation dependencies:

pip install -r doc/requirements.txt

Then build the HTML documentation from the doc/ directory:

cd doc
make html

The output is written to doc/build/html/. Open doc/build/html/index.html in a browser to view it. The html target automatically cleans previous build artifacts before rebuilding.

Citation

If you use JPTs in your research, please cite:

@inproceedings{nyga23jpts,
    title     = {{Joint Probability Trees}},
    author    = {Daniel Nyga and Mareike Picklum and
                 Tom Schierenbeck and Michael Beetz},
    year      = {2023},
    booktitle = {arxiv.org},
    url       = {http://arxiv.org/abs/2302.07167}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyjpt-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pyjpt-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pyjpt-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pyjpt-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

File details

Details for the file pyjpt-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pyjpt-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c95bca0d0c73ec8036f2caa917e40015ca501f37f833ef6a8afb2cc445983726
MD5 84ff93a886deb17ec02056c0d932ec7c
BLAKE2b-256 ac4a9745cce8940126ede83cf3e83f2765946461c4bf314ce40d23957495a57a

See more details on using hashes here.

File details

Details for the file pyjpt-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pyjpt-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 184ee32790a8268cde36e2860a15236b14487b073971c30e263c00e8319c8847
MD5 3e6cd0056319dae7875d351b4867788c
BLAKE2b-256 95c9c299798bf910a8071e27587ddf89a973276e34c4813c62473c50e6604e44

See more details on using hashes here.

File details

Details for the file pyjpt-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pyjpt-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 5d21e641ceb8370ebf20e0da3466d63ef6558befcb5747f618b10abce8c44911
MD5 97ed8212d44733705d4a80f51e0a169f
BLAKE2b-256 bff23bfbc76628243bb3b72b769db5bf772c811a3e4011933b0df5504bfd05e1

See more details on using hashes here.

File details

Details for the file pyjpt-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pyjpt-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 23103f235f8e344d76fca3cd2e12145c1bfba08e6abacdddc2629643aa14668e
MD5 b6a672332328e120d47a1c332ae515b3
BLAKE2b-256 a4b8a09ecbc1dbbdf510a3a56c29bc3f12e0fb7d4230d57a908538852fab706f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page