1
1
"""
2
- LinearKernel(; c = 0.0)
2
+ LinearKernel(; c::Real= 0.0)
3
3
4
- The linear kernel is a Mercer kernel given by
5
- ```
6
- κ(x,y) = xᵀy + c
4
+ Linear kernel with constant offset `c`.
5
+
6
+ # Definition
7
+
8
+ For inputs ``x, x' \\ in \\ mathbb{R}^d``, the linear kernel with constant offset
9
+ ``c \\ geq 0`` is defined as
10
+ ```math
11
+ k(x, x'; c) = x^\\ top x' + c.
7
12
```
8
- Where `c` is a real number
13
+
14
+ See also: [`PolynomialKernel`](@ref)
9
15
"""
10
16
struct LinearKernel{Tc<: Real } <: SimpleKernel
11
17
c:: Vector{Tc}
12
- function LinearKernel (; c:: T = 0.0 ) where {T}
13
- return new {T} ([c])
18
+
19
+ function LinearKernel (; c:: Real = 0.0 )
20
+ @check_args (LinearKernel, c, c >= zero (c), " c ≥ 0" )
21
+ return new {typeof(c)} ([c])
14
22
end
15
23
end
16
24
@@ -23,29 +31,53 @@ metric(::LinearKernel) = DotProduct()
23
31
Base. show (io:: IO , κ:: LinearKernel ) = print (io, " Linear Kernel (c = " , first (κ. c), " )" )
24
32
25
33
"""
26
- PolynomialKernel(; d = 2.0 , c = 0.0)
34
+ PolynomialKernel(; degree::Int=2 , c::Real= 0.0)
27
35
28
- The polynomial kernel is a Mercer kernel given by
29
- ```
30
- κ(x,y) = (xᵀy + c)^d
36
+ Polynomial kernel of degree `degree` with constant offset `c`.
37
+
38
+ # Definition
39
+
40
+ For inputs ``x, x' \\ in \\ mathbb{R}^d``, the polynomial kernel of degree
41
+ ``\\ nu \\ in \\ mathbb{N}`` with constant offset ``c \\ geq 0`` is defined as
42
+ ```math
43
+ k(x, x'; c, \\ nu) = (x^\\ top x' + c)^\\ nu.
31
44
```
32
- Where `c` is a real number, and `d` is a shape parameter bigger than 1. For `d = 1` see [`LinearKernel`](@ref)
45
+
46
+ See also: [`LinearKernel`](@ref)
33
47
"""
34
- struct PolynomialKernel{Td <: Real , Tc<: Real } <: SimpleKernel
35
- d :: Vector{Td}
48
+ struct PolynomialKernel{Tc<: Real } <: SimpleKernel
49
+ degree :: Int
36
50
c:: Vector{Tc}
37
- function PolynomialKernel (; d:: Td = 2.0 , c:: Tc = 0.0 ) where {Td<: Real ,Tc<: Real }
38
- @check_args (PolynomialKernel, d, d >= one (Td), " d >= 1" )
39
- return new {Td,Tc} ([d], [c])
51
+
52
+ function PolynomialKernel {Tc} (degree:: Int , c:: Vector{Tc} ) where {Tc}
53
+ @check_args (PolynomialKernel, degree, degree >= one (degree), " degree ≥ 1" )
54
+ @check_args (PolynomialKernel, c, first (c) >= zero (Tc), " c ≥ 0" )
55
+ return new {Tc} (degree, c)
40
56
end
41
57
end
42
58
43
- @functor PolynomialKernel
59
+ function PolynomialKernel (; d:: Real = - 1 , degree:: Int = 2 , c:: Real = 0.0 )
60
+ if d != - 1
61
+ Base. depwarn (
62
+ " keyword argument `d` is deprecated, use `degree` instead" ,
63
+ :PiecewisePolynomialKernel ,
64
+ )
65
+ isinteger (d) || error (" polynomial degree has to be an integer" )
66
+ degree:: Int = convert (Int, d)
67
+ end
68
+ return PolynomialKernel {typeof(c)} (degree, [c])
69
+ end
70
+
71
+ # The degree of the polynomial kernel is a fixed discrete parameter
72
+ function Functors. functor (:: Type{<:PolynomialKernel} , x)
73
+ reconstruct_polynomialkernel (xs) = PolynomialKernel {typeof(xs.c)} (x. degree, xs. c)
74
+ return (c= x. c,), reconstruct_polynomialkernel
75
+ end
44
76
45
- kappa (κ:: PolynomialKernel , xᵀy:: Real ) = (xᵀy + first (κ. c))^ ( first (κ . d))
77
+ kappa (κ:: PolynomialKernel , xᵀy:: Real ) = (xᵀy + first (κ. c))^ κ . degree
46
78
47
79
metric (:: PolynomialKernel ) = DotProduct ()
48
80
49
81
function Base. show (io:: IO , κ:: PolynomialKernel )
50
- return print (io, " Polynomial Kernel (c = " , first (κ. c), " , d = " , first (κ . d) , " )" )
82
+ return print (io, " Polynomial Kernel (c = " , first (κ. c), " , degree = " , κ . degree , " )" )
51
83
end
0 commit comments