`sumproduct <https://pypi.python.org/pypi/sumproduct>`__
========================================================
|Build Status|
An implementation of Belief Propagation for factor graphs, also known as
the sum-product algorithm
(`Reference <http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage>`__).
::
pip install sumproduct
.. figure:: http://f.cl.ly/items/2P021j2y3A2Q191F451h/unnamed0.png
:alt: Simple factor graph
Simple factor graph
The factor graph used in ``test.py`` (image made with
`yEd <http://www.yworks.com/en/products_yed_applicationfeatures.html>`__).
Basic Usage
-----------
Create a factor graph
~~~~~~~~~~~~~~~~~~~~~
::
from sumproduct import Variable, Factor, FactorGraph
import numpy as np
g = FactorGraph(silent=True) # init the graph without message printouts
x1 = Variable('x1', 2) # init a variable with 2 states
x2 = Variable('x2', 3) # init a variable with 3 states
f12 = Factor('f12', np.array([
[0.8,0.2],
[0.2,0.8],
[0.5,0.5]
])) # create a factor, node potential for p(x1 | x2)
# connect the parents to their children
g.add(f12)
g.append('f12', x2) # order must be the same as dimensions in factor potential!
g.append('f12', x1) # note: f12 potential's shape is (3,2), i.e. (x2,x1)
Run Inference
~~~~~~~~~~~~~
sum-product algorithm
^^^^^^^^^^^^^^^^^^^^^
::
>>> g.compute_marginals()
>>> g.nodes['x1'].marginal()
array([ 0.5, 0.5])
Brute force marginalization and conditioning
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The sum-product algorithm can only compute exact marginals for acyclic
graphs. Check against the brute force method (at great computational
expense) if you have a loopy graph.
::
>>> g.brute_force()
>>> g.nodes['x1'].bfmarginal
array([ 0.5, 0.5])
Condition on Observations
^^^^^^^^^^^^^^^^^^^^^^^^^
::
>>> g.observe('x2', 2) # observe state 1 (middle of above f12 potential)
>>> g.compute_marginals(max_iter=500, tolerance=1e-6)
>>> g.nodes['x1'].marginal()
array([ 0.2, 0.8])
>>> g.brute_force()
>>> g.nodes['x1'].bfmarginal
array([ 0.2, 0.8])
Additional Information
^^^^^^^^^^^^^^^^^^^^^^
``sumproduct`` implements a parallel message passing schedule: Message
passing alternates between Factors and Variables sending messages to all
their neighbors until the convergence of marginals.
Check ``test.py`` for a detailed example.
Implementation Details
----------------------
See block comments in the code's methods for details, but the
implementation strategy comes from Chapter 5 of `David Barber's
book <http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage>`__.
.. |Build Status| image:: https://travis-ci.org/ilyakava/sumproduct.svg?branch=master
:target: https://travis-ci.org/ilyakava/sumproduct
========================================================
|Build Status|
An implementation of Belief Propagation for factor graphs, also known as
the sum-product algorithm
(`Reference <http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage>`__).
::
pip install sumproduct
.. figure:: http://f.cl.ly/items/2P021j2y3A2Q191F451h/unnamed0.png
:alt: Simple factor graph
Simple factor graph
The factor graph used in ``test.py`` (image made with
`yEd <http://www.yworks.com/en/products_yed_applicationfeatures.html>`__).
Basic Usage
-----------
Create a factor graph
~~~~~~~~~~~~~~~~~~~~~
::
from sumproduct import Variable, Factor, FactorGraph
import numpy as np
g = FactorGraph(silent=True) # init the graph without message printouts
x1 = Variable('x1', 2) # init a variable with 2 states
x2 = Variable('x2', 3) # init a variable with 3 states
f12 = Factor('f12', np.array([
[0.8,0.2],
[0.2,0.8],
[0.5,0.5]
])) # create a factor, node potential for p(x1 | x2)
# connect the parents to their children
g.add(f12)
g.append('f12', x2) # order must be the same as dimensions in factor potential!
g.append('f12', x1) # note: f12 potential's shape is (3,2), i.e. (x2,x1)
Run Inference
~~~~~~~~~~~~~
sum-product algorithm
^^^^^^^^^^^^^^^^^^^^^
::
>>> g.compute_marginals()
>>> g.nodes['x1'].marginal()
array([ 0.5, 0.5])
Brute force marginalization and conditioning
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The sum-product algorithm can only compute exact marginals for acyclic
graphs. Check against the brute force method (at great computational
expense) if you have a loopy graph.
::
>>> g.brute_force()
>>> g.nodes['x1'].bfmarginal
array([ 0.5, 0.5])
Condition on Observations
^^^^^^^^^^^^^^^^^^^^^^^^^
::
>>> g.observe('x2', 2) # observe state 1 (middle of above f12 potential)
>>> g.compute_marginals(max_iter=500, tolerance=1e-6)
>>> g.nodes['x1'].marginal()
array([ 0.2, 0.8])
>>> g.brute_force()
>>> g.nodes['x1'].bfmarginal
array([ 0.2, 0.8])
Additional Information
^^^^^^^^^^^^^^^^^^^^^^
``sumproduct`` implements a parallel message passing schedule: Message
passing alternates between Factors and Variables sending messages to all
their neighbors until the convergence of marginals.
Check ``test.py`` for a detailed example.
Implementation Details
----------------------
See block comments in the code's methods for details, but the
implementation strategy comes from Chapter 5 of `David Barber's
book <http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage>`__.
.. |Build Status| image:: https://travis-ci.org/ilyakava/sumproduct.svg?branch=master
:target: https://travis-ci.org/ilyakava/sumproduct
Metadata
Release files for sumproduct 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sumproduct-0.0.5.tar.gz | 7.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sumproduct-0.0.5-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 16.8 kB
Release files / sumproduct-0.0.5.tar.gz
| Download URL | sumproduct-0.0.5.tar.gz |
|---|---|
| Size | 7.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
51e45634525393cdd0ae8dc3dd75a8e2c4808e0852898a366d0a781483cdf554
|
|
BLAKE2b-256 checksum How to use checksums |
b7288aa07ef3261e19c98d7d051ccc8343d346c20b13c51cf0493040eaf099e9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / sumproduct-0.0.5-py2.py3-none-any.whl
| Download URL | sumproduct-0.0.5-py2.py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
c91b05cdf82e4641c8d38f35b2079455d3179a5495f64df251888bc8e91a43cd
|
|
BLAKE2b-256 checksum How to use checksums |
ede5354eb8a56f455792177eb1a39f102ad19c0b27ca95cfe0013fbe5132b1b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |