KernelFunctions.jl icon indicating copy to clipboard operation
KernelFunctions.jl copied to clipboard

Add missing kernels from GPML

Open sharanry opened this issue 5 years ago • 8 comments

GPML kernels: https://github.com/alshedivat/gpml/tree/master/cov

sharanry avatar Mar 12 '20 10:03 sharanry

Do you have a list somewhere?

theogf avatar Mar 12 '20 10:03 theogf

From a quick look, these seem to be the missing kernels (Checked implies that a PR has been created.

  • [x] covCos - Note: Output Restricted to [-1,1]. To be extended to hyper-sphere in the future
  • [ ] covDiscrete
  • [x] covEye
  • [x] covFBM - Fractional Brownian motion covariance with Hurst index h from (0,1).
  • [x] covGabor - Gabor covariance function with length scale ell and period p.
  • [x] covGaborard
  • [x] covGaboriso
  • [x] covLINard - Linear
  • [x] covLINiso
  • [ ] covLINone
  • [x] covMaha - Mahalanobis distance-based covariance function.
  • [x] covMask
  • [x] covMaternard
  • [x] covMaterniso
  • [x] covNNone - Neural network covariance function with a single parameter for the distance measure
  • [ ] covOU - covOU i-times integrated Ornstein-Uhlenbeck process covariance function
  • [ ] covPER - Periodic covariance function from an arbitrary covariance function k0 via embedding IR^D into IC^D.
  • [ ] covPERard
  • [ ] covPERiso
  • [x] covPP - Piecewise Polynomial covariance function with compact support
  • [x] covPPard
  • [x] covPPiso
  • [x] covPeriodic
  • [ ] covPeriodicNoDC
  • [ ] covPref - covariance function for preference learning. The covariance function corresponds to a prior on f(x1) - f(x2).
  • [x] covRQard
  • [x] covRQiso
  • [x] covSEard
  • [x] covSEiso
  • [ ] covSEisoU
  • [x] covSEproj
  • [ ] covSEvlen
  • [x] covSM - Gaussian Spectral Mixture covariance function.
  • [ ] covULL - Stationary covariance function for underdamped linear Langevin process
  • [x] covW - i-times integrated Wiener process covariance function.
  • [x] covWarp - Apply a covariance function to p(x) rather than x i.e. warp the inputs.

sharanry avatar Mar 12 '20 10:03 sharanry

@theogf @willtebbutt Do you suggest I make separate PRs for each kernel or just one for all of them combined?

I suggest we make separate PRs so we can incrementally add them.

sharanry avatar Mar 12 '20 10:03 sharanry

A lot of this kernel are actually already implemented covSEard etc. I think having one PR per kernel seems fine. Maybe you can start by opening an issue for the ones missing so anyone can participate?

theogf avatar Mar 12 '20 11:03 theogf

Yeah, you really just need to implement the "base" kernel -- the input transformations provided by KernelFunctions gives you the rest for free (see the @kernel macro in #38 and more generally the various Transforms).

I think maybe covSEvlen might need a special implementation, but the various ---ard, ---iso, ---proj etc should be fine.

I agree that we don't have the Cosine, Gabor, Eye, FBM, Maha, NN, PP, Pref, SM, ULL, or W (wiener process). (I'm not even sure what some of these are lol)

There are also more recent kernels that GPML doesn't have, but we might want to implement. I'm thinking the various DNN kernels that have cropped up in the literature in recent years (I can't remember their names off the top of my head though)

willtebbutt avatar Mar 12 '20 14:03 willtebbutt

Haha same for me it's the first time I hear about some of those. I will try to write some documentation on how to make custom kernels. But you can already have a look at the beginning of https://github.com/theogf/KernelFunctions.jl/blob/master/test/test_custom.jl

theogf avatar Mar 12 '20 14:03 theogf

Yeah. The function names aren't the most helpful. I have added a short description to them. Hope that helps.

sharanry avatar Mar 12 '20 15:03 sharanry

Very excited for having implementations of these. I've had an issue on Stheno.jl about this for a while, so it would be amazing to have this stuff done here!

willtebbutt avatar Mar 12 '20 15:03 willtebbutt