Skip to content

Commit d99c1af

Browse files
committed
Add Mahalanobis distance-based kernel
1 parent 7fe2d04 commit d99c1af

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/KernelFunctions.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export ExponentiatedKernel
1414
export MaternKernel, Matern32Kernel, Matern52Kernel
1515
export LinearKernel, PolynomialKernel
1616
export RationalQuadraticKernel, GammaRationalQuadraticKernel
17+
export MahaKernel
1718
export KernelSum, KernelProduct
1819
export TransformedKernel, ScaledKernel
1920

@@ -44,7 +45,7 @@ include("distances/dotproduct.jl")
4445
include("distances/delta.jl")
4546
include("transform/transform.jl")
4647

47-
for k in ["exponential","matern","polynomial","constant","rationalquad","exponentiated"]
48+
for k in ["exponential","matern","polynomial","constant","rationalquad","exponentiated","maha"]
4849
include(joinpath("kernels",k*".jl"))
4950
end
5051
include("kernels/transformedkernel.jl")

src/kernels/maha.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
MahaKernel(; ell::Real=1.0, p::Real=1.0)
3+
4+
Mahalanobis distance-based kernel given by
5+
```math
6+
κ(x,y) = k(r^2), r^2 = maha(x,P,y) = (x-y)'*inv(P)*(x-y)
7+
```
8+
where the matrix P is the metric.
9+
10+
"""
11+
struct MahaKernel{T<:Real} <: BaseKernel
12+
P
13+
function MahaKernel(P::AbstractMatrix{T}) where {T<:Real}
14+
@assert size(P)[1] == size(P)[2], "P should be a square matrix"
15+
new{T}(P)
16+
end
17+
end
18+
19+
kappa::MahaKernel, d::T) where {T<:Real} = d
20+
21+
metric::MahaKernel) = Mahalanobis.P)

0 commit comments

Comments
 (0)