Gaussian process in Julia

Hello all, Julia newbie here. I am sorry I am not sure whether this is the right place to ask this question. If no I will delete it later.
Is there any well-maintained package dedicated for gaussian process in Julia like Gpy or GPFlow in Python? If no is there any package that can help to do gaussian process modelling like Pyro or Edward in Python?
Thank you.

Haven’t tried this out but looks like there’s a library called Stheno that might have what you’re looking for. Also, there’s a Summer of Code project to integrate the Turing.jl probabilistic programming language with Stheno.jl.

3 Likes

Nothing more authoritative than off the top of my head…

Hope that helps?

1 Like

GaussianProcesses.jl

1 Like

No, those are very different. This is looking for the Gaussian process model as used in ML, not to directly use Gaussian process noise.

1 Like

@joshualeond Stheno looks nice however it still lack documentation. But because it will integrate to Turing.jl I think it will be well-maintained. Because probabilistic programming language such as pyro, pymc3, and Stan has support to do Gaussian process, I think Turing.jl can do it also.

@tlienart there are two library with the almost identical name: GaussianProcesses.jl and Gaussian process.jl I am not sure which one is better?

GaussianProcesses.jl is registered and actively developed. For examples you find more in the notebooks than in the documentation.

1 Like

Hey,

you can check out AugmentedGaussianProcesses.jl, it is quite similar to GPFlow in terms in functionnalities (especially for non-gaussian likelihoods)

@yusri-dh apologies for Stheno’s current lack of documentation – I’m finishing up a large refactor of the internals, and a small amount of the user-facing interface, at the minute. When I release this I’ll make sure that there’s some decent documentation of both the internals and user-facing stuff.

You’re correct in saying that other PPLs do, in principle, have support for GPs, but the interfaces they provide are a little clunky and lack the flexibility that Stheno + Turing will have by the end of the GSOC project.

Could I ask what sort of thing you’re interesting in using GPs to do?

1 Like

@willtebbutt I am looking forward to the integration of Stheno and Turing.

I use GP for modelling latent function from one dimensional input (e.g. time) to 2D or 3D output(e.g. 2D or 3D coordinates). I can model it using Pyro PPL from Python but I want to port my code to Julia.

Now I am trying to use GaussianProcesses.jl but looks like it can not handle 2D or 3D output yet. I wonder if Stheno can do that.

2 Likes

Sounds cool! Stheno can definitely handle multiple outputs. Is there a particular multi-output model that you’re using? And what kind of observation noise do you require? Is it Gaussian?

1 Like

I am sorry for the late reply. I just use standard gaussian process regression and the output is following multivariate normal distribution

… but the interfaces they provide are a little clunky and lack the flexibility that Stheno + Turing will have

It would be nice to improve the interface and flexibility of GaussianProcesses.jl. Would you mind to explain what exactly you find clunky and not sufficiently flexible?

1 Like

Hello—

Just to add another option, there is KernelMatrices.jl, which provides very scalable methods for maximum likelihood estimation. It’s pretty flexible in the sense that you really just need to specify the covariance matrix to the point where individual elements can be computed (and the derivatives if you want a scalable gradient, and the second derivatives if you want a scalable Hessian). There are two example files that demonstrate the pretty small amount of boilerplate code required to use the package for estimation.

I only implemented it for mean-zero fields, but at least in spatial statistics it is not uncommon to try and remove a mean term and then separately estimate the covariance structure. If people really want parametric mean functions included as well I don’t think that it would be too much work.

1 Like