Skip to content

Commit 0121fac

Browse files
committed
Corrected docs and tests
1 parent 10c8e9a commit 0121fac

19 files changed

+178
-129
lines changed

docs/src/api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ LinearKernel
2828
PolynomialKernel
2929
RationalQuadraticKernel
3030
GammaRationalQuadraticKernel
31+
ZeroKernel
32+
ConstantKernel
33+
WhiteKernel
3134
```
3235

3336
## Kernel Combinations

docs/src/kernels.md

Lines changed: 75 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,93 @@
11
```@meta
2-
CurrentModule = KernelFunctions
2+
CurrentModule = KernelFunctions
33
```
44

55
## Exponential Kernels
66

7-
```@docs
8-
ExponentialKernel
9-
SqExponentialKernel
10-
GammaExponentialKernel
7+
### Exponential Kernel
8+
9+
The [Exponential Kernel](@ref ExponentialKernel) is defined as
10+
```math
11+
k(x,x') = \exp\left(-|x-x'|\right)
12+
```
13+
14+
### Square Exponential Kernel
15+
16+
The [Square Exponential Kernel](@ref KernelFunctions.SqExponentialKernel) is defined as
17+
```math
18+
k(x,x') = \exp\left(-\|x-x'\|^2\right)
19+
```
20+
21+
### Gamma Exponential Kernel
22+
23+
```math
24+
k(x,x';\gamma) = \exp\left(-\|x-x'\|^{2\gamma}\right)
1125
```
1226

1327
## Matern Kernels
1428

15-
```@docs
16-
MaternKernel
17-
Matern32Kernel
18-
Matern52Kernel
29+
### Matern Kernel
30+
31+
```math
32+
k(x,x';\nu) = \frac{2^{1-\nu}}{\Gamma(\nu)}\left(\sqrt{2\nu}|x-x'|\right)K_\nu\left(\sqrt{2\nu}|x-x'|\right)
33+
```
34+
35+
### Matern 3/2 Kernel
36+
37+
```math
38+
k(x,x') = \left(1+\sqrt{3}|x-x'|\right)\exp\left(\sqrt{3}|x-x'|\right)
39+
```
40+
41+
### Matern 5/2 Kernel
42+
43+
```math
44+
k(x,x') = \left(1+\sqrt{5}|x-x'|+\frac{5}{2}\|x-x'\|^2\right)\exp\left(\sqrt{5}|x-x'|\right)
45+
```
46+
47+
## Rational Quadratic
48+
49+
### Rational Quadratic Kernel
50+
51+
```math
52+
k(x,x';\alpha) = \left(1+\frac{\|x-x'\|^2}{\alpha}\right)^{-\alpha}
53+
```
54+
55+
### Gamma Rational Quadratic Kernel
56+
57+
```math
58+
k(x,x';\alpha,\gamma) = \left(1+\frac{\|x-x'\|^{2\gamma}}{\alpha}\right)^{-\alpha}
1959
```
2060

2161
## Polynomial Kernels
2262

23-
```@docs
24-
LinearKernel
25-
PolynomialKernel
63+
### LinearKernel
64+
65+
```math
66+
k(x,x';c) = \langle x,x'\rangle + c
67+
```
68+
69+
### PolynomialKernel
70+
71+
```math
72+
k(x,x';c,d) = \left(\langle x,x'\rangle + c\right)^d
2673
```
2774

2875
## Constant Kernels
2976

30-
```@docs
31-
ConstantKernel
32-
WhiteKernel
33-
ZeroKernel
77+
### ConstantKernel
78+
79+
```math
80+
k(x,x';c) = c
81+
```
82+
83+
### WhiteKernel
84+
85+
```math
86+
k(x,x') = \delta(x-x')
87+
```
88+
89+
### ZeroKernel
90+
91+
```math
92+
k(x,x') = 0
3493
```

docs/src/transform.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ You can also create a pipeline of `Transform` via `TransformChain`. For example
77
One apply a transformation on a matrix or a vector via `transform(t::Transform,v::AbstractVecOrMat)`
88

99
## Transforms :
10+
```@meta
11+
CurrentModule = KernelFunctions
12+
```
1013

1114
```@docs
1215
IdentityTransform

src/kernels/constant.jl

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""
2-
ZeroKernel([tr=IdentityTransform()])
3-
4-
Create a kernel that always return a zero kernel matrix
2+
ZeroKernel([tr=IdentityTransform()])
53
4+
Create a kernel always returning zero
65
"""
76
struct ZeroKernel{T,Tr} <: Kernel{T,Tr}
87
transform::Tr
@@ -19,12 +18,12 @@ end
1918
@inline kappa::ZeroKernel,d::T) where {T<:Real} = zero(T)
2019

2120
"""
22-
WhiteKernel([tr=IdentityTransform()])
21+
`WhiteKernel([tr=IdentityTransform()])`
2322
2423
```
2524
κ(x,y) = δ(x,y)
2625
```
27-
Kernel function working as an equivalent to add white noise.
26+
Kernel function working as an equivalent to add white noise.
2827
"""
2928
struct WhiteKernel{T,Tr} <: Kernel{T,Tr}
3029
transform::Tr
@@ -41,12 +40,11 @@ end
4140
@inline kappa::WhiteKernel,δₓₓ::Real) = δₓₓ
4241

4342
"""
44-
ConstantKernel([tr=IdentityTransform(),[c=1.0]])
45-
43+
`ConstantKernel([tr=IdentityTransform(),[c=1.0]])`
4644
```
4745
κ(x,y) = c
4846
```
49-
Kernel function always returning a constant value `c`
47+
Kernel function always returning a constant value `c`
5048
"""
5149
struct ConstantKernel{T,Tr,Tc<:Real} <: Kernel{T,Tr}
5250
transform::Tr

src/kernels/exponential.jl

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
"""
2-
SqExponentialKernel([ρ=1.0])
2+
`SqExponentialKernel([ρ=1.0])`
33
44
The squared exponential kernel is an isotropic Mercer kernel given by the formula:
5-
65
```
76
κ(x,y) = exp(-ρ²‖x-y‖²)
87
```
9-
108
See also [`ExponentialKernel`](@ref) for a
119
related form of the kernel or [`GammaExponentialKernel`](@ref) for a generalization.
1210
"""
@@ -26,14 +24,11 @@ const RBFKernel = SqExponentialKernel
2624
const GaussianKernel = SqExponentialKernel
2725

2826
"""
29-
ExponentialKernel([ρ=1.0])
30-
27+
`ExponentialKernel([ρ=1.0])`
3128
The exponential kernel is an isotropic Mercer kernel given by the formula:
32-
3329
```
3430
κ(x,y) = exp(-ρ‖x-y‖)
3531
```
36-
3732
"""
3833
struct ExponentialKernel{T,Tr} <: Kernel{T,Tr}
3934
transform::Tr
@@ -50,10 +45,8 @@ end
5045
const LaplacianKernel = ExponentialKernel
5146

5247
"""
53-
GammaExponentialKernel([ρ=1.0,[gamma=2.0]])
54-
48+
`GammaExponentialKernel([ρ=1.0,[gamma=2.0]])`
5549
The γ-exponential kernel is an isotropic Mercer kernel given by the formula:
56-
5750
```
5851
κ(x,y) = exp(-ρ^(2γ)‖x-y‖^(2γ))
5952
```
@@ -69,7 +62,7 @@ end
6962

7063
function GammaExponentialKernel::T₁=1.0,gamma::T₂=2.0) where {T₁<:Real,T₂<:Real}
7164
@check_args(GammaExponentialKernel, gamma, gamma >= zero(T₂), "gamma > 0")
72-
GammaExponentialKernel{T₁,ScaleTransform{T₁},T₂}(ScaleTransform(ρ),gamma)
65+
GammaExponentialKernel{T₁,ScaleTransform{Base.RefValue{T₁}},T₂}(ScaleTransform(ρ),gamma)
7366
end
7467

7568
function GammaExponentialKernel::A,gamma::T₁=2.0) where {A<:AbstractVector{<:Real},T₁<:Real}

src/kernels/exponentiated.jl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
"""
2-
ExponentiatedKernel([ρ=1])
3-
4-
The exponentiated kernel is a Mercer kernel given by:
5-
2+
`ExponentiatedKernel([ρ=1])`
3+
The exponentiated kernel is a Mercer kernel given by:
64
```
7-
κ(x,y) = exp(xᵀy)
5+
κ(x,y) = exp(ρ²xᵀy)
86
```
97
"""
108
struct ExponentiatedKernel{T,Tr} <: Kernel{T,Tr}

src/kernels/kernelproduct.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
"""
2-
KernelProduct(kernels::Array{Kernel})
2+
`KernelProduct(kernels::Array{Kernel})`
33
Create a multiplication of kernels.
44
One can also use the operator `*`
55
```
6-
kernelmatrix(SqExponentialKernel()*LinearKernel(),X) == kernelmatrix(SqExponentialKernel(),X).*kernelmatrix(LinearKernel(),X)
6+
k1 = SqExponentialKernel()
7+
k2 = LinearKernel()
8+
k = KernelProduct([k1,k2])
9+
kernelmatrix(k,X) == kernelmatrix(k1,X).*kernelmatrix(k2,X)
10+
kernelmatrix(k,X) == kernelmatrix(k1*k2,X)
711
```
812
"""
913
struct KernelProduct{T,Tr} <: Kernel{T,Tr}

src/kernels/kernelsum.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
"""
2-
KernelSum(kernels::Array{Kernel};weights::Array{Real}=ones(length(kernels)))
2+
`KernelSum(kernels::Array{Kernel};weights::Array{Real}=ones(length(kernels)))`
33
Create a positive weighted sum of kernels.
44
One can also use the operator `+`
55
```
6-
kernelmatrix(SqExponentialKernel()+LinearKernel(),X) == kernelmatrix(SqExponentialKernel(),X).+kernelmatrix(LinearKernel(),X)
6+
k1 = SqExponentialKernel()
7+
k2 = LinearKernel()
8+
k = KernelSum([k1,k2])
9+
kernelmatrix(k,X) == kernelmatrix(k1,X).+kernelmatrix(k2,X)
10+
kernelmatrix(k,X) == kernelmatrix(k1+k2,X)
11+
kweighted = 0.5*k1 + 2.0*k2
712
```
813
"""
914
struct KernelSum{T,Tr} <: Kernel{T,Tr}

src/kernels/matern.jl

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
"""
2-
MaternKernel([ρ=1.0,[ν=1.0]])
3-
2+
`MaternKernel([ρ=1.0,[ν=1.0]])`
43
The matern kernel is an isotropic Mercer kernel given by the formula:
5-
64
```
75
κ(x,y) = 2^{1-ν}/Γ(ν)*(√(2ν)‖x-y‖)^ν K_ν(√(2ν)‖x-y‖)
86
```
9-
10-
For `ν=n+1/2, n=0,1,2,...` it can be simplified and you should instead use `ExponentialKernel` for `n=0`, `Matern32Kernel`, for `n=1`, Matern52Kernel for `n=2` and `SqExponentialKernel` for `n=∞`.
11-
`ρ` is the lengthscale parameter(s) or the transform object.
12-
7+
For `ν=n+1/2, n=0,1,2,...` it can be simplified and you should instead use [`ExponentialKernel`](@ref) for `n=0`, [`Matern32Kernel`](@ref), for `n=1`, [`Matern52Kernel`](@ref) for `n=2` and [`SqExponentialKernel`](@ref) for `n=∞`.
138
"""
149
struct MaternKernel{T,Tr,Tν<:Real} <: Kernel{T,Tr}
1510
transform::Tr
@@ -22,7 +17,7 @@ end
2217

2318
function MaternKernel::T₁=1.0::T₂=1.5) where {T₁<:Real,T₂<:Real}
2419
@check_args(MaternKernel, ν, ν > zero(T₂), "ν > 0")
25-
MaternKernel{T₁,ScaleTransform{T₁},T₂}(ScaleTransform(ρ),ν)
20+
MaternKernel{T₁,ScaleTransform{Base.RefValue{T₁}},T₂}(ScaleTransform(ρ),ν)
2621
end
2722

2823
function MaternKernel::A::T=1.5) where {A<:AbstractVector{<:Real},T<:Real}
@@ -38,15 +33,11 @@ end
3833
@inline kappa::MaternKernel, d::Real) = iszero(d) ? one(d) : exp((1.0-κ.ν)*logtwo-lgamma.ν) + κ.ν*log(sqrt(2κ.ν)*d)+log(besselk.ν,sqrt(2κ.ν)*d)))
3934

4035
"""
41-
Matern32Kernel([ρ=1.0])
42-
36+
`Matern32Kernel([ρ=1.0])`
4337
The matern 3/2 kernel is an isotropic Mercer kernel given by the formula:
44-
4538
```
46-
κ(x,y) = (1+√(3)‖x-y‖)exp(√(3)‖x-y‖)
39+
κ(x,y) = (1+√(3)ρ‖x-y‖)exp(-√(3)ρ‖x-y‖)
4740
```
48-
49-
`ρ` is the lengthscale parameter(s) or a transform object.
5041
"""
5142
struct Matern32Kernel{T,Tr} <: Kernel{T,Tr}
5243
transform::Tr
@@ -59,16 +50,11 @@ end
5950
@inline kappa::Matern32Kernel, d::T) where {T<:Real} = (1+sqrt(3)*d)*exp(-sqrt(3)*d)
6051

6152
"""
62-
Matern52Kernel([ρ=1.0])
63-
53+
`Matern52Kernel([ρ=1.0])`
6454
The matern 5/2 kernel is an isotropic Mercer kernel given by the formula:
65-
6655
```
67-
κ(x,y) = (1+√(5)‖x-y‖ + 5‖x-y‖^2/3)exp(√(5)‖x-y‖)
56+
κ(x,y) = (1+√(5)ρ‖x-y‖ + 5ρ²‖x-y‖^2/3)exp(-√(5)ρ‖x-y‖)
6857
```
69-
70-
`ρ` is the lengthscale parameter(s) or a transform object.
71-
7258
"""
7359
struct Matern52Kernel{T,Tr} <: Kernel{T,Tr}
7460
transform::Tr

src/kernels/polynomial.jl

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
"""
2-
LinearKernel([ρ=1.0,[c=0.0]])
3-
4-
The linear kernel is a Mercer kernel given by
2+
`LinearKernel([ρ=1.0,[c=0.0]])`
3+
The linear kernel is a Mercer kernel given by
54
```
6-
κ(x,y) = xᵀy + c
5+
κ(x,y) = ρ²xᵀy + c
76
```
8-
Where `c` is a real number
7+
Where `c` is a real number
98
"""
109
struct LinearKernel{T,Tr,Tc<:Real} <: Kernel{T,Tr}
1110
transform::Tr
@@ -17,7 +16,7 @@ struct LinearKernel{T,Tr,Tc<:Real} <: Kernel{T,Tr}
1716
end
1817

1918
function LinearKernel::T₁=1.0,c::T₂=zero(T₁)) where {T₁<:Real,T₂<:Real}
20-
LinearKernel{T₁,ScaleTransform{T₁},T₂}(ScaleTransform(ρ),c)
19+
LinearKernel{T₁,ScaleTransform{Base.RefValue{T₁}},T₂}(ScaleTransform(ρ),c)
2120
end
2221

2322
function LinearKernel::A,c::T=zero(eltype(ρ))) where {A<:AbstractVector{<:Real},T<:Real}
@@ -31,13 +30,12 @@ end
3130
@inline kappa::LinearKernel, xᵀy::T) where {T<:Real} = xᵀy + κ.c
3231

3332
"""
34-
PolynomialKernel([ρ=1.0[,d=2.0[,c=0.0]]])
35-
36-
The polynomial kernel is a Mercer kernel given by
33+
`PolynomialKernel([ρ=1.0[,d=2.0[,c=0.0]]])`
34+
The polynomial kernel is a Mercer kernel given by
3735
```
38-
κ(x,y) = (xᵀy + c)^d
36+
κ(x,y) = (ρ²xᵀy + c)^d
3937
```
40-
Where `c` is a real number, and `d` is a shape parameter bigger than 1
38+
Where `c` is a real number, and `d` is a shape parameter bigger than 1
4139
"""
4240
struct PolynomialKernel{T,Tr,Tc<:Real,Td<:Real} <: Kernel{T,Tr}
4341
transform::Tr
@@ -51,7 +49,7 @@ end
5149

5250
function PolynomialKernel::T₁=1.0,d::T₂=2.0,c::T₃=zero(T₁)) where {T₁<:Real,T₂<:Real,T₃<:Real}
5351
@check_args(PolynomialKernel, d, d >= one(T₁), "d >= 1")
54-
PolynomialKernel{T₁,ScaleTransform{T₁},T₂,T₃}(ScaleTransform(ρ),c,d)
52+
PolynomialKernel{T₁,ScaleTransform{Base.RefValue{T₁}},T₂,T₃}(ScaleTransform(ρ),c,d)
5553
end
5654

5755
function PolynomialKernel::A,d::T₁=2.0,c::T₂=zero(eltype(ρ))) where {A<:AbstractVector{<:Real},T₁<:Real,T₂<:Real}

0 commit comments

Comments
 (0)