Skip to content

Commit c621e20

Browse files
committed
Remove metric fields
1 parent 460ed86 commit c621e20

File tree

7 files changed

+54
-29
lines changed

7 files changed

+54
-29
lines changed

src/generic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Base.iterate(k::Kernel, ::Any) = nothing
99
for k in [:ExponentialKernel,:SqExponentialKernel,:GammaExponentialKernel,:MaternKernel,:Matern32Kernel,:Matern52Kernel,:LinearKernel,:PolynomialKernel,:ExponentiatedKernel,:ZeroKernel,:WhiteKernel,:ConstantKernel,:RationalQuadraticKernel,:GammaRationalQuadraticKernel]
1010
@eval begin
1111
@inline::$k)(d::Real) = kappa(κ,d) #TODO Add test
12-
@inline::$k)(x::AbstractVector{<:Real},y::AbstractVector{<:Real}) = kappa(κ,evaluate(κ.metric,transform(κ,x),transform(κ,y)))
12+
@inline::$k)(x::AbstractVector{<:Real},y::AbstractVector{<:Real}) = kappa(κ,evaluate(metric(κ),transform(κ,x),transform(κ,y)))
1313
@inline::$k)(X::AbstractMatrix{T},Y::AbstractMatrix{T};obsdim::Integer=defaultobs) where {T} = kernelmatrix(κ,X,Y,obsdim=obsdim)
1414
@inline::$k)(X::AbstractMatrix{T};obsdim::Integer=defaultobs) where {T} = kernelmatrix(κ,X,obsdim=obsdim)
1515
end

src/kernels/constant.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ Create a kernel always returning zero
55
"""
66
struct ZeroKernel{T,Tr} <: Kernel{T,Tr}
77
transform::Tr
8-
metric::Delta
8+
99
function ZeroKernel{T,Tr}(t::Tr) where {T,Tr<:Transform}
10-
new{T,Tr}(t,Delta())
10+
new{T,Tr}(t)
1111
end
1212
end
1313

@@ -17,6 +17,8 @@ end
1717

1818
@inline kappa::ZeroKernel,d::T) where {T<:Real} = zero(T)
1919

20+
metric(::ZeroKernel) = Delta()
21+
2022
"""
2123
`WhiteKernel([tr=IdentityTransform()])`
2224
@@ -27,9 +29,9 @@ Kernel function working as an equivalent to add white noise.
2729
"""
2830
struct WhiteKernel{T,Tr} <: Kernel{T,Tr}
2931
transform::Tr
30-
metric::Delta
32+
3133
function WhiteKernel{T,Tr}(t::Tr) where {T,Tr<:Transform}
32-
new{T,Tr}(t,Delta())
34+
new{T,Tr}(t)
3335
end
3436
end
3537

@@ -39,6 +41,8 @@ end
3941

4042
@inline kappa::WhiteKernel,δₓₓ::Real) = δₓₓ
4143

44+
metric(::WhiteKernel) = Delta()
45+
4246
"""
4347
`ConstantKernel([tr=IdentityTransform(),[c=1.0]])`
4448
```
@@ -48,10 +52,10 @@ Kernel function always returning a constant value `c`
4852
"""
4953
struct ConstantKernel{T,Tr,Tc<:Real} <: Kernel{T,Tr}
5054
transform::Tr
51-
metric::Delta
5255
c::Tc
56+
5357
function ConstantKernel{T,Tr,Tc}(t::Tr,c::Tc) where {T,Tr<:Transform,Tc<:Real}
54-
new{T,Tr,Tc}(t,Delta(),c)
58+
new{T,Tr,Tc}(t,c)
5559
end
5660
end
5761

@@ -67,3 +71,5 @@ function ConstantKernel(t::Tr,c::Tc=1.0) where {Tr<:Transform,Tc<:Real}
6771
end
6872

6973
@inline kappa::ConstantKernel,x::Real) = κ.c
74+
75+
metric(::ConstantKernel) = Delta()

src/kernels/exponential.jl

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@ related form of the kernel or [`GammaExponentialKernel`](@ref) for a generalizat
1010
"""
1111
struct SqExponentialKernel{T,Tr} <: Kernel{T,Tr}
1212
transform::Tr
13-
metric::SqEuclidean
13+
1414
function SqExponentialKernel{T,Tr}(transform::Tr) where {T,Tr<:Transform}
15-
return new{T,Tr}(transform,SqEuclidean())
15+
return new{T,Tr}(transform)
1616
end
1717
end
1818

1919
@inline kappa::SqExponentialKernel, d²::Real) = exp(-d²)
2020
@inline iskroncompatible(::SqExponentialKernel) = true
2121

22+
metric(::SqExponentialKernel) = SqEuclidean()
23+
2224
## Aliases ##
2325
const RBFKernel = SqExponentialKernel
2426
const GaussianKernel = SqExponentialKernel
@@ -32,14 +34,15 @@ The exponential kernel is an isotropic Mercer kernel given by the formula:
3234
"""
3335
struct ExponentialKernel{T,Tr} <: Kernel{T,Tr}
3436
transform::Tr
35-
metric::Euclidean
37+
3638
function ExponentialKernel{T,Tr}(transform::Tr) where {T,Tr<:Transform}
37-
return new{T,Tr}(transform,Euclidean())
39+
return new{T,Tr}(transform)
3840
end
3941
end
4042

4143
@inline kappa::ExponentialKernel, d::Real) = exp(-d)
4244
@inline iskroncompatible(::ExponentialKernel) = true
45+
metric(::ExponentialKernel) = Euclidean()
4346

4447
## Alias ##
4548
const LaplacianKernel = ExponentialKernel
@@ -53,10 +56,10 @@ The γ-exponential kernel is an isotropic Mercer kernel given by the formula:
5356
"""
5457
struct GammaExponentialKernel{T,Tr,Tᵧ<:Real} <: Kernel{T,Tr}
5558
transform::Tr
56-
metric::SqEuclidean
5759
γ::T
60+
5861
function GammaExponentialKernel{T,Tr,Tᵧ}(transform::Tr::Tᵧ) where {T,Tr<:Transform,Tᵧ<:Real}
59-
return new{T,Tr,Tᵧ}(transform,SqEuclidean(),γ)
62+
return new{T,Tr,Tᵧ}(transform,γ)
6063
end
6164
end
6265

@@ -80,3 +83,4 @@ end
8083

8184
@inline kappa::GammaExponentialKernel, d²::Real) = exp(-^κ.γ)
8285
@inline iskroncompatible(::GammaExponentialKernel) = true
86+
metric(::GammaExponentialKernel) = SqEuclidean()

src/kernels/exponentiated.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ The exponentiated kernel is a Mercer kernel given by:
77
"""
88
struct ExponentiatedKernel{T,Tr} <: Kernel{T,Tr}
99
transform::Tr
10-
metric::DotProduct
10+
1111
function ExponentiatedKernel{T,Tr}(transform::Tr) where {T,Tr<:Transform}
12-
return new{T,Tr}(transform,DotProduct())
12+
return new{T,Tr}(transform)
1313
end
1414
end
1515
@inline kappa::ExponentiatedKernel, xᵀy::T) where {T<:Real} = exp(xᵀy)
16+
17+
metric(::ExponentiatedKernel) = DotProduct()

src/kernels/matern.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ For `ν=n+1/2, n=0,1,2,...` it can be simplified and you should instead use [`Ex
88
"""
99
struct MaternKernel{T,Tr,Tν<:Real} <: Kernel{T,Tr}
1010
transform::Tr
11-
metric::Euclidean
1211
ν::Tν
12+
1313
function MaternKernel{T,Tr,Tν}(transform::Tr::Tν) where {T,Tr<:Transform,Tν<:Real}
14-
return new{T,Tr,Tν}(transform,Euclidean(),ν)
14+
return new{T,Tr,Tν}(transform,ν)
1515
end
1616
end
1717

@@ -35,6 +35,8 @@ opt_params(k::MaternKernel) = (opt_params(transform(k)),k.ν)
3535

3636
@inline kappa::MaternKernel, d::Real) = iszero(d) ? one(d) : exp((1.0-κ.ν)*logtwo-lgamma.ν) + κ.ν*log(sqrt(2κ.ν)*d)+log(besselk.ν,sqrt(2κ.ν)*d)))
3737

38+
metric(::MaternKernel) = Euclidean()
39+
3840
"""
3941
`Matern32Kernel([ρ=1.0])`
4042
The matern 3/2 kernel is an isotropic Mercer kernel given by the formula:
@@ -44,14 +46,16 @@ The matern 3/2 kernel is an isotropic Mercer kernel given by the formula:
4446
"""
4547
struct Matern32Kernel{T,Tr} <: Kernel{T,Tr}
4648
transform::Tr
47-
metric::Euclidean
49+
4850
function Matern32Kernel{T,Tr}(transform::Tr) where {T,Tr<:Transform}
49-
return new{T,Tr}(transform,Euclidean())
51+
return new{T,Tr}(transform)
5052
end
5153
end
5254

5355
@inline kappa::Matern32Kernel, d::T) where {T<:Real} = (1+sqrt(3)*d)*exp(-sqrt(3)*d)
5456

57+
metric(::Matern32Kernel) = Euclidean()
58+
5559
"""
5660
`Matern52Kernel([ρ=1.0])`
5761
The matern 5/2 kernel is an isotropic Mercer kernel given by the formula:
@@ -61,10 +65,12 @@ The matern 5/2 kernel is an isotropic Mercer kernel given by the formula:
6165
"""
6266
struct Matern52Kernel{T,Tr} <: Kernel{T,Tr}
6367
transform::Tr
64-
metric::Euclidean
68+
6569
function Matern52Kernel{T,Tr}(transform::Tr) where {T,Tr<:Transform}
66-
return new{T,Tr}(transform,Euclidean())
70+
return new{T,Tr}(transform)
6771
end
6872
end
6973

7074
@inline kappa::Matern52Kernel, d::Real) where {T} = (1+sqrt(5)*d+5*d^2/3)*exp(-sqrt(5)*d)
75+
76+
metric(::Matern52Kernel) = Euclidean()

src/kernels/polynomial.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Where `c` is a real number
88
"""
99
struct LinearKernel{T,Tr,Tc<:Real} <: Kernel{T,Tr}
1010
transform::Tr
11-
metric::DotProduct
1211
c::Tc
12+
1313
function LinearKernel{T,Tr,Tc}(transform::Tr,c::Tc) where {T,Tr<:Transform,Tc<:Real}
14-
return new{T,Tr,Tc}(transform,DotProduct(),c)
14+
return new{T,Tr,Tc}(transform,c)
1515
end
1616
end
1717

@@ -32,6 +32,8 @@ opt_params(k::LinearKernel) = (opt_params(transform(k)),k.c)
3232

3333
@inline kappa::LinearKernel, xᵀy::T) where {T<:Real} = xᵀy + κ.c
3434

35+
metric(::LinearKernel) = DotProduct()
36+
3537
"""
3638
`PolynomialKernel([ρ=1.0[,d=2.0[,c=0.0]]])`
3739
The polynomial kernel is a Mercer kernel given by
@@ -42,11 +44,11 @@ Where `c` is a real number, and `d` is a shape parameter bigger than 1
4244
"""
4345
struct PolynomialKernel{T,Tr,Tc<:Real,Td<:Real} <: Kernel{T,Tr}
4446
transform::Tr
45-
metric::DotProduct
4647
c::Tc
4748
d::Td
49+
4850
function PolynomialKernel{T,Tr,Tc,Td}(transform::Tr,c::Tc,d::Td) where {T,Tr<:Transform,Tc<:Real,Td<:Real}
49-
return new{T,Tr,Tc,Td}(transform,DotProduct(),c,d)
51+
return new{T,Tr,Tc,Td}(transform,c,d)
5052
end
5153
end
5254

@@ -69,3 +71,5 @@ params(k::PolynomialKernel) = (params(transform(k)),k.d,k.c)
6971
opt_params(k::PolynomialKernel) = (opt_params(transform(k)),k.d,k.c)
7072

7173
@inline kappa::PolynomialKernel, xᵀy::T) where {T<:Real} = (xᵀy + κ.c)^.d)
74+
75+
metric(::PolynomialKernel) = DotProduct()

src/kernels/rationalquad.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ where `α` is a shape parameter of the Euclidean distance. Check [`GammaRational
88
"""
99
struct RationalQuadraticKernel{T,Tr,Tα<:Real} <: Kernel{T,Tr}
1010
transform::Tr
11-
metric::SqEuclidean
1211
α::Tα
12+
1313
function RationalQuadraticKernel{T,Tr,Tα}(t::Tr::Tα) where {T,Tr,Tα<:Real}
14-
new{T,Tr,Tα}(t,SqEuclidean(),α)
14+
new{T,Tr,Tα}(t,α)
1515
end
1616
end
1717

@@ -35,6 +35,7 @@ opt_params(k::RationalQuadraticKernel) = (opt_params(transform(k)),k.α)
3535

3636
@inline kappa::RationalQuadraticKernel, d²::T) where {T<:Real} = (one(T)+/κ.α)^(-κ.α)
3737

38+
metric(::RationalQuadraticKernel) = SqEuclidean()
3839

3940
"""
4041
`GammaRationalQuadraticKernel([ρ=1.0[,α=2.0[,γ=2.0]]])`
@@ -46,11 +47,11 @@ where `α` is a shape parameter of the Euclidean distance and `γ` is another sh
4647
"""
4748
struct GammaRationalQuadraticKernel{T,Tr,Tα<:Real,Tγ<:Real} <: Kernel{T,Tr}
4849
transform::Tr
49-
metric::SqEuclidean
5050
α::Tα
5151
γ::Tγ
52+
5253
function GammaRationalQuadraticKernel{T,Tr,Tα,Tγ}(t::Tr::Tα,γ::Tγ) where {T,Tr,Tα<:Real,Tγ<:Real}
53-
new{T,Tr,Tα,Tγ}(t,SqEuclidean(),α,γ)
54+
new{T,Tr,Tα,Tγ}(t,α,γ)
5455
end
5556
end
5657

@@ -76,3 +77,5 @@ params(k::GammaRationalQuadraticKernel) = (params(k.transform),k.α,k.γ)
7677
opt_params(k::GammaRationalQuadraticKernel) = (opt_params(k.transform),k.α,k.γ)
7778

7879
@inline kappa::GammaRationalQuadraticKernel, d²::T) where {T<:Real} = (one(T)+^κ.γ/κ.α)^(-κ.α)
80+
81+
metric(::GammaRationalQuadraticKernel) = SqEuclidean()

0 commit comments

Comments
 (0)