Matern Gaussian Processes on Graphs
This repo provides an extension for gpflow
with Matérn kernels, inducing variables and trainable models implemented for graphs. Easily integrated with the rest of gpflow
functionality, it allows one to run GP regression and classification problems on graphs. See examples
notebooks and docstrings for how-to guides/documentation.
Installation
Minimal installation is performed by typing
pip install -e .
in your terminal inside the cloned repo directory.
To run example notebooks, install the dependencies with
pip install -e .[examples]
On Windows, we recommend using Windows Subsystem for Linux (WSL).
Library usage
A rough outline of how to use the library is as follows:
>>> from graph_matern.kernels.graph_matern_kernel import GraphMaternKernel
>>> laplacian = nx.laplacian_matrix(G) # G is a networkx Graph
>>> eigenvalues, eigenvectors = tf.linalg.eigh(laplacian) # only should be done once-per-graph
>>> kernel = GraphMaternKernel((eigenvectors, eigenvalues))
>>> model = gpflow.models.GPR(data=data, kernel=kernel)
Note that one is not constrained to use GPR
as a model, check out our example notebooks for a more detailed how-to.
Examples
Notebook with topic classification for citation networks on the CORA
dataset [1] is
jupyter notebook examples/classification.ipynb
Notebook with primitive regression on PEMS data [2] is
jupyter notebook examples/regression.ipynb
The data in examples/data
is third-party, and only provided in the repo to facilitate running the examples.
Citation
@inproceedings{borovitskiy2021matern,
title={Matern Gaussian Processes on Graphs},
author={Viacheslav Borovitskiy and Iskander Azangulov and Alexander Terenin and Peter Mostowsky and Marc Peter Deisenroth and Nicolas Durrande},
booktitle={International Conference on Artificial Intelligence and Statistics},
year={2021},
organization={PMLR}
}