STOR-i / GaussianProcesses.jl

A Julia package for Gaussian Processes
https://stor-i.github.io/GaussianProcesses.jl/latest/
Other
308 stars 53 forks source link

time series #82

Open atteson opened 6 years ago

atteson commented 6 years ago

I tried to extend this to use for time series (in particular, gaussian times series with long memory) by extending Stationary but I couldn't seem to work out the details. The top of Stationary indicated 2 methods that needed to be implemented but it seems more were required and I gave up after 4 or 5. Documentation on how to write a new kernel would be helpful here.

chris-nemeth commented 6 years ago

Thanks for raising this issue. We're currently working on a readthedocs page to provide more information on the package. There is a notebook which gives a time series example, but I think what you're looking for will require new kernels to be implemented. Could you give us some more information about what you're trying to do and perhaps we can help you create the kernel you need?

atteson commented 6 years ago

Thanks for responding. What I have in mind is to use a stationary kernel where the covariance with n lags is given by something like:

gamma(n) = n == 0 ? sigma : lambda * n^-alpha

where sigma, lambda and alpha are parameters which I'd like to ultimately try to optimize. I've written most of this this as a stand alone type right now (including calculation of derivatives for optimization where ReverseDiff is used for the function above since I'd like to experiment with different functions) but would be happy to try to integrate it if you can help with how to develop a custom kernel.

chris-nemeth commented 6 years ago

We've developed the stationary kernels based on weighted squared Euclidean distance as this is common to most of the standard kernels. I think it would be difficult to put your kernel into that framework by, for example, using a similar style to the cov function we have for SE. The easiest way forward is probably to use the Const or Lin kernels as a template. Most of the functions here, such as get_params will be straightforward and the cov function will be the gamma function you've defined. For the gradients, you should only need the first function.