Skip to content

Commit 3be0cbe

Browse files
committed
Add Gabor kernel using KernelProduct
1 parent b78395d commit 3be0cbe

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

src/KernelFunctions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export ExponentiatedKernel
1414
export MaternKernel, Matern32Kernel, Matern52Kernel
1515
export LinearKernel, PolynomialKernel
1616
export RationalQuadraticKernel, GammaRationalQuadraticKernel
17-
export MahalanobisKernel
17+
export MahalanobisKernel, GaborKernel
1818
export KernelSum, KernelProduct
1919
export TransformedKernel, ScaledKernel
2020

src/kernels/gabor.jl

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,40 @@
33
44
Gabor kernel with length scale ell and period p. Given by
55
```math
6-
κ(x,y) = h(x-z), h(t) = exp(-sum(t.^2./(2*ell.^2)))*cos(2*pi*sum(t./p))
6+
κ(x,y) = h(x-z), h(t) = exp(-sum(t.^2./(ell.^2)))*cos(pi*sum(t./p))
77
```
88
99
"""
10-
struct GaborKernel{T<:Real} <: BaseKernel
10+
struct GaborKernel{T<:Real, K<:Kernel} <: BaseKernel
1111
ell::T
1212
p::T
13+
κ::K
1314
function GaborKernel(;ell::T=1.0, p::T=1.0) where {T<:Real}
14-
new{T}(ell, p)
15+
k = transform(SqExponentialKernel(), 1/ell)*transform(CosineKernel(), 1/p)
16+
new{T, typeof(k)}(ell, p, k)
1517
end
1618
end
1719

18-
kappa::GaborKernel, d::T) where {T<:Real} = exp(-sum(d.^2 ./(2*κ.ell.^2)))*cospi(2*sum(d)./ κ.p)
20+
kappa::GaborKernel, x, y) where {T<:Real} = kappa.κ, x ,y)
1921

20-
metric(::GaborKernel) = Euclidean()
22+
function kernelmatrix(
23+
κ::GaborKernel,
24+
X::AbstractMatrix;
25+
obsdim::Int=defaultobs)
26+
kernelmatrix.κ, X; obsdim=obsdim)
27+
end
28+
29+
function kernelmatrix(
30+
κ::GaborKernel,
31+
X::AbstractMatrix,
32+
Y::AbstractMatrix;
33+
obsdim::Int=defaultobs)
34+
kernelmatrix.κ, X, Y; obsdim=obsdim)
35+
end
36+
37+
function kerneldiagmatrix(
38+
κ::GaborKernel,
39+
X::AbstractMatrix;
40+
obsdim::Int=defaultobs) #TODO Add test
41+
kerneldiagmatrix.κ, X; obsdim=obsdim)
42+
end

test/test_kernels.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ x = rand()*2; v1 = rand(3); v2 = rand(3); id = IdentityTransform()
6868
@test k(v1,v2) exp(dot(v1,v2))
6969
end
7070
end
71+
@testset "Gabor" begin
72+
k = GaborKernel(ell=2.0, p=2.0)
73+
# @info kappa(k,v1,v2)
74+
# @info k(v1,v2)
75+
end
7176
@testset "Matern" begin
7277
@testset "MaternKernel" begin
7378
ν = 2.0

0 commit comments

Comments
 (0)