Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Gibbskernel #374

Merged
merged 28 commits into from
Oct 1, 2021
Merged
Changes from 6 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d50f2b4
add gibbskernel.jl
Cyberface Sep 28, 2021
2ca62f4
include gibbskernel.jl
Cyberface Sep 28, 2021
2b83286
some modifications for gibbskernel and added a small test
Cyberface Sep 28, 2021
e4d1414
fix missing definition of ell function in test
Cyberface Sep 28, 2021
f9f066a
fix gibbskernel test
Cyberface Sep 29, 2021
d6b53b9
add gibbskernel to test/runtests.jl
Cyberface Sep 29, 2021
698c453
Update test/kernels/gibbskernel.jl
Cyberface Sep 29, 2021
3a98028
Update src/kernels/gibbskernel.jl
Cyberface Sep 29, 2021
0f757a3
Update src/kernels/gibbskernel.jl
Cyberface Sep 29, 2021
2e1df2d
implement changes based on PR discussion and update test
Cyberface Sep 29, 2021
b5c6faa
add brackets back in
Cyberface Sep 29, 2021
19e6665
fix unit test for gibbs kernel
Cyberface Sep 29, 2021
21de7d4
update gibbskernel test: implement theogf's idea about using a non-tr…
Cyberface Sep 30, 2021
4ddafbe
ensure ell returns positive value in test
Cyberface Sep 30, 2021
9fd1d14
gibbs kernel: fixed implementation and unittest
Cyberface Sep 30, 2021
5531851
gibbs kernel: fix docstring
Cyberface Sep 30, 2021
78faeac
Update src/kernels/gibbskernel.jl
Cyberface Oct 1, 2021
ae8b3d4
Update src/kernels/gibbskernel.jl
Cyberface Oct 1, 2021
6b91a23
add gibbskernel to docs
Cyberface Oct 1, 2021
a914957
Update src/kernels/gibbskernel.jl
Cyberface Oct 1, 2021
6eb4099
Update test/kernels/gibbskernel.jl
Cyberface Oct 1, 2021
79aa4f5
gibbskernel test: formatting
Cyberface Oct 1, 2021
0942447
Merge branch 'master' into gibbskernel
devmotion Oct 1, 2021
de3e535
Fix format (hopefully)
devmotion Oct 1, 2021
0caf2fd
Add newline character
devmotion Oct 1, 2021
cfbca3d
Apply suggestions from code review
devmotion Oct 1, 2021
1fb7903
Export invsqrt2
theogf Oct 1, 2021
f577700
Version bump
theogf Oct 1, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/KernelFunctions.jl
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ export PiecewisePolynomialKernel
export PeriodicKernel, NeuralNetworkKernel
export KernelSum, KernelProduct, KernelTensorProduct
export TransformedKernel, ScaledKernel, NormalizedKernel
export GibbsKernel

export Transform,
SelectTransform,
@@ -94,6 +95,7 @@ include("basekernels/rational.jl")
include("basekernels/sm.jl")
include("basekernels/wiener.jl")

include("kernels/gibbskernel.jl")
include("kernels/scaledkernel.jl")
include("kernels/normalizedkernel.jl")
include("matrix/kernelmatrix.jl")
37 changes: 37 additions & 0 deletions src/kernels/gibbskernel.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""

GibbsKernel(x, y)

# Definition

The Gibbs kernel is non-stationary generalisation of the Squared-Exponential
kernel. The lengthscale parameter ``\\ell`` becomes a function of
position ``\\ell(x)``.

``\\ell(x) = 1.`` then you recover the standard Squared-Exponential kernel
with constant lengthscale.

```math
k(x, y) = \\sqrt{ \\left( \\frac{2 \\ell(x) \\ell(y)}{\\ell(x)^2 + \\ell(y)^2} \\right) } \\quad \\rm{exp} \\left( - \\frac{(x - y)^2}{\\ell(x)^2 + \\ell(y)^2} \\right)
```

[1] - Mark N. Gibbs. "Bayesian Gaussian Processes for Regression and Classication."
PhD thesis, 1997

[2] - Christopher J. Paciorek and Mark J. Schervish. "Nonstationary Covariance
Functions for Gaussian Process Regression". NEURIPS, 2003

[3] - Sami Remes, Markus Heinonen, Samuel Kaski.
"Non-Stationary Spectral Kernels". arXiV:1705.08736, 2017

[4] - Sami Remes, Markus Heinonen, Samuel Kaski.
"Neural Non-Stationary Spectral Kernel". arXiv:1811.10978, 2018
"""

#function (k::GibbsKernel)(x, y, ell)
function GibbsKernel(x::Any, y::Any, ell::Function)
fac = ell(x)^2 + ell(y)^2
term1 = 2.0 * ell(x) * ell(y) / fac
term2 = - (x-y)^2 / fac
return term1 * exp(term2)
end
13 changes: 13 additions & 0 deletions test/kernels/gibbskernel.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Test
using KernelFunctions

@testset "gibbskernel" begin
x = 1.0
y = 2.0

k = SqExponentialKernel()

ell(x) = 1.0

@test GibbsKernel(x, y, ell) == k(x, y)
end
1 change: 1 addition & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
@@ -126,6 +126,7 @@ include("test_utils.jl")
include("kernels/transformedkernel.jl")
include("kernels/normalizedkernel.jl")
include("kernels/neuralkernelnetwork.jl")
include("kernels/gibbskernel.jl")
end
@info "Ran tests on Kernel"
end