To install pystruct, you need cvxopt, cython and scikit-learn (which requires numpy and scipy).
The easiest way to install pystruct is using pip:
pip install pystruct
This will also install the additional inference package ad3.
Installation instructions for the requirements are below.
The easiest way to get all requirements is via the package manager, that is apt on Ubuntu and Debian:
sudo apt-get install build-essential python-dev python-setuptools python-numpy \\
python-scipy libatlas-dev libatlas3gf-base python-cvxopt
To install the current versions of scikit-learn and pystruct, you can use pip:
pip install --user --upgrade scikit-learn pystruct
Follow instructions on the scikit-learn website and then install CVXOPT. Finally, you can install pystruct simply using:
pip install --user --upgrade pystruct
In particular for OS X and Windows, an alternative is to use the Anaconda Python distribution. The anaconda environment comes with its own Python and a package manager named conda. You can install cvxopt using the conda package manager:
conda install cvxopt
And then install pystruct:
pip install --user --upgrade pystruct
While PyStruct implements some simple inference algorithms, these are not as optimized as other available code.
Therefore it is recommended to install additional inference packages.
By default PyStruct will also install the AD3 package, which contains a high-quality solver
that can be chosen via inference_method='ad3'
.
Another solver that is helpful for highly connected graphs like grid-graphs is QPBO, which
can be installed via the pyqpbo package:
pip install --user pyqpbo
Unfortunately QPBO might not compile with newer C compilers, so we decided to not make it a dependency.
There is a very high quality collection of inference algorithms in
the OpenGM library, which
is highly recommended. The algorithms in OpenGM can be chosen by specifying
inference_algorithm=('ogm', {'alg': ALGORITHM})
where ALGORITHM can be a
wide variety of algorithms, including dynamic programming, TRWS, graph cuts and
many more, see inference_ogm()
.
In particular for tree-structured (not chain) models, the implementation of dynamic programming max-product belief propagation in OpenGM is much faster than the one in PyStruct.