Add missing kernels from GPML
GPML kernels: https://github.com/alshedivat/gpml/tree/master/cov
Do you have a list somewhere?
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.
@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.
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?
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)
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
Yeah. The function names aren't the most helpful. I have added a short description to them. Hope that helps.
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!