Skip to main content

A library of scalable Bayesian generalised linear models with fancy features

Project description

https://travis-ci.org/NICTA/revrand.svg?branch=master

A library of scalable Bayesian generalised linear models with fancy features

This library implements various Bayesian linear models (Bayesian linear regression) and generalised linear models. A few features of this library are:

  • A fancy basis functions/feature composition framework for combining basis functions like radial basis function, sigmoidal basis functions, polynomial basis functions etc.

  • Basis functions that can be used to approximate Gaussian processes with shift invariant covariance functions (e.g. square exponential) when used with linear models [1], [2], [3].

  • Non-Gaussian likelihoods with Bayesian generalised linear models using a modified version of the nonparametric variational inference algorithm presented in [4].

  • Large scale learning using stochastic gradient descent (ADADELTA).

Quickstart

To install, simply run setup.py:

$ python setup.py install

or install with pip:

$ pip install git+https://github.com/nicta/revrand.git@release

Refer to docs/installation.rst for advanced installation instructions.

Have a look at some of the demos, e.g.:

$ python demos/demo_regression.py

Or,

$ python demos/demo_glm.py

Bayesian Linear Regression Example

Here is a very quick example of how to use Bayesian linear regression with SGD optimisation of the likelihood noise, regulariser and basis function parameters. Assuming we already have training noisy targets y, inputs X, and some query inputs Xs (as well as the true noiseless function f):

import matplotlib.pyplot as pl
import numpy as np
from revrand.basis_functions import LinearBasis, RandomRBF
from revrand.regression import learn_sgd, predict

...

# Concatenate a linear basis and a Random radial basis (GP approx)
basis = LinearBasis(onescol=True) + RandomRBF(nbases=300, Xdim=X.shape[1])
init_lenscale = 1.0

# Learn regression parameters and predict
params = learn_sgd(X, y, basis, [init_lenscale])
Eys, Vfs, Vys = predict(Xs, basis, *params)

# Training/Truth
pl.plot(X, y, 'k.', label='Training')
pl.plot(Xs, f, 'k-', label='Truth')

# SGD Regressor
Sys = np.sqrt(Vys)
pl.plot(Xs, Eys, 'r-', label='SGD Bayes linear reg.')
pl.fill_between(Xs, Eys - 2 * Sys, Eys + 2 * Sys, facecolor='none',
                edgecolor='r', linestyle='--', label=None)

pl.legend()

pl.grid(True)
pl.title('Regression demo')
pl.ylabel('y')
pl.xlabel('x')
pl.show()

This script will output something like the following,

blr_sgd_demo.png

Bayesian Generalised Linear Model Example

This example is very similar to that above, but now let’s assume our targets y are drawn from a Poisson likelihood, or observation, distribution which is a function of the inputs, X. The task here is to predict the mean of the Poisson distribution for query inputs Xs, as well as the uncertainty associated with the prediction.

import matplotlib.pyplot as pl
import numpy as np
from revrand.basis_functions import RandomRBF
from revrand.glm import learn, predict_meanvar, predict_interval

...

# Random radial basis (GP approx)
basis = RandomRBF(nbases=100, Xdim=X.shape[1])
init_lenscale = 1.0

# Set up the likelihood of the GLM
llhood = likelihoods.Poisson(tranfcn='exp')  # log link

# Learn regression parameters and predict
params = learn(X, y, llhood, [], basis, [init_lenscale])
Eys, _, _, _ = predict_meanvar(Xs, llhood, basis, *params)
y95n, y95x = predict_interval(0.95, Xs, llhood, basis, *params)

# Training/Truth
pl.plot(X, y, 'k.', label='Training')
pl.plot(Xs, f, 'k-', label='Truth')

# GLM SGD Regressor
pl.plot(Xs, Eys, 'b-', label='GLM mean.')
pl.fill_between(Xs, y95n, y95x, facecolor='none',
                edgecolor='b', linestyle='--', label=None)

pl.legend()

pl.grid(True)
pl.title('Regression demo')
pl.ylabel('y')
pl.xlabel('x')
pl.show()

This script will output something like the following,

glm_sgd_demo.png

Bugs & Feedback

For bugs, questions and discussions, please use Github Issues.

References

Project details


Download files

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

Source Distribution

revrand-0.1rc1.tar.gz (41.7 kB view details)

Uploaded Source

File details

Details for the file revrand-0.1rc1.tar.gz.

File metadata

  • Download URL: revrand-0.1rc1.tar.gz
  • Upload date:
  • Size: 41.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for revrand-0.1rc1.tar.gz
Algorithm Hash digest
SHA256 e9f194cf699eef9d3b8650c9366ae40f22a42ed3ec6fc06c1107e2349b9c92b3
MD5 4d98206c56cf3c715da669e0715184f0
BLAKE2b-256 7ce81f59d78e98933eede6ca62ca22fbd3ba7a1c0096393d66a3ebddd775ec0f

See more details on using hashes here.

Supported by

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