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.3-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.3-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.3-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.3-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.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pyjpt-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 7f03743655dda9e069e6a6f4e90465debb1ae701002542f1c3d2d9fc4f660c7c
MD5 583dad8cede20af88cb408cc703d2c9c
BLAKE2b-256 4f131937e9e57463be533b3a3ff6a9c80933b9617a23fea28aef0ecc6b77e4ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyjpt-1.3.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b58b1e094159e8b54bc9fd1e6367e0f457317bbf8a2265baa58c2c0bc60abffe
MD5 fdfa7abbb11696bb1d3293a9644f4870
BLAKE2b-256 3187f99e93cc599418cb53e4eb8c468abab022599ba83f082f51c5bfec4ba4ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyjpt-1.3.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 40b95e256ecf68e23fb9caf79e72387dc6593ae7aa7f570be52e6505f0a450e9
MD5 4cce901fde75b7a4c719ec37722b4436
BLAKE2b-256 faee36500e97d974596b10a0e69ca8c4e7d322dbf31cfedbac1a778dfdb55767

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyjpt-1.3.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 936d28efa1b780f432393412333076eef3adde2b50a8d9ed2a72c4bc80f8c0b4
MD5 783124ee9a681ef0e33dd53066ee199c
BLAKE2b-256 682abcfab17dbbd217728ecb0490e4e3ff996c17539d0f35456fb3dd4b625e8e

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