11"""
2- KernelTensorSum
2+ KernelIndependentSum
33
4- Tensor sum of kernels.
4+ Independent sum of kernels.
55
66# Definition
77
@@ -13,42 +13,42 @@ k(x, x'; k_1, \\ldots, k_n) = \\sum_{i=1}^n k_i(x_i, x'_i).
1313
1414# Construction
1515
16- The simplest way to specify a `KernelTensorSum ` is to use the `⊕` operator (can be typed by `\\ oplus<tab>`).
17- ```jldoctest tensorproduct
16+ The simplest way to specify a `KernelIndependentSum ` is to use the `⊕` operator (can be typed by `\\ oplus<tab>`).
17+ ```jldoctest independentsum
1818julia> k1 = SqExponentialKernel(); k2 = LinearKernel(); X = rand(5, 2);
1919
2020julia> kernelmatrix(k1 ⊕ k2, RowVecs(X)) == kernelmatrix(k1, X[:, 1]) + kernelmatrix(k2, X[:, 2])
2121true
2222```
2323
24- You can also specify a `KernelTensorSum ` by providing kernels as individual arguments
24+ You can also specify a `KernelIndependentSum ` by providing kernels as individual arguments
2525or as an iterable data structure such as a `Tuple` or a `Vector`. Using a tuple or
26- individual arguments guarantees that `KernelTensorSum ` is concretely typed but might
26+ individual arguments guarantees that `KernelIndependentSum ` is concretely typed but might
2727lead to large compilation times if the number of kernels is large.
28- ```jldoctest tensorproduct
29- julia> KernelTensorSum (k1, k2) == k1 ⊕ k2
28+ ```jldoctest independentsum
29+ julia> KernelIndependentSum (k1, k2) == k1 ⊕ k2
3030true
3131
32- julia> KernelTensorSum ((k1, k2)) == k1 ⊕ k2
32+ julia> KernelIndependentSum ((k1, k2)) == k1 ⊕ k2
3333true
3434
35- julia> KernelTensorSum ([k1, k2]) == k1 ⊕ k2
35+ julia> KernelIndependentSum ([k1, k2]) == k1 ⊕ k2
3636true
3737```
3838"""
39- struct KernelTensorSum {K} <: Kernel
39+ struct KernelIndependentSum {K} <: Kernel
4040 kernels:: K
4141end
4242
43- function KernelTensorSum (kernel:: Kernel , kernels:: Kernel... )
44- return KernelTensorSum ((kernel, kernels... ))
43+ function KernelIndependentSum (kernel:: Kernel , kernels:: Kernel... )
44+ return KernelIndependentSum ((kernel, kernels... ))
4545end
4646
47- @functor KernelTensorSum
47+ @functor KernelIndependentSum
4848
49- Base. length (kernel:: KernelTensorSum ) = length (kernel. kernels)
49+ Base. length (kernel:: KernelIndependentSum ) = length (kernel. kernels)
5050
51- function (kernel:: KernelTensorSum )(x, y)
51+ function (kernel:: KernelIndependentSum )(x, y)
5252 if ! ((nx = length (x)) == (ny = length (y)) == (nkernels = length (kernel)))
5353 throw (
5454 DimensionMismatch (
@@ -59,46 +59,46 @@ function (kernel::KernelTensorSum)(x, y)
5959 return sum (k (xi, yi) for (k, xi, yi) in zip (kernel. kernels, x, y))
6060end
6161
62- function validate_domain (k:: KernelTensorSum , x:: AbstractVector , y:: AbstractVector )
62+ function validate_domain (k:: KernelIndependentSum , x:: AbstractVector , y:: AbstractVector )
6363 return (dx = dim (x)) == (dy = dim (y)) == (nkernels = length (k)) || error (
6464 " number of kernels ($nkernels ) and group of features (x=$dx ), y=$dy ) are not consistent" ,
6565 )
6666end
6767
68- function validate_domain (k:: KernelTensorSum , x:: AbstractVector )
68+ function validate_domain (k:: KernelIndependentSum , x:: AbstractVector )
6969 return validate_domain (k, x, x)
7070end
7171
72- function kernelmatrix (k:: KernelTensorSum , x:: AbstractVector )
72+ function kernelmatrix (k:: KernelIndependentSum , x:: AbstractVector )
7373 validate_domain (k, x)
7474 return mapreduce (kernelmatrix, + , k. kernels, slices (x))
7575end
7676
77- function kernelmatrix (k:: KernelTensorSum , x:: AbstractVector , y:: AbstractVector )
77+ function kernelmatrix (k:: KernelIndependentSum , x:: AbstractVector , y:: AbstractVector )
7878 validate_domain (k, x, y)
7979 return mapreduce (kernelmatrix, + , k. kernels, slices (x), slices (y))
8080end
8181
82- function kernelmatrix_diag (k:: KernelTensorSum , x:: AbstractVector )
82+ function kernelmatrix_diag (k:: KernelIndependentSum , x:: AbstractVector )
8383 validate_domain (k, x)
8484 return mapreduce (kernelmatrix_diag, + , k. kernels, slices (x))
8585end
8686
87- function kernelmatrix_diag (k:: KernelTensorSum , x:: AbstractVector , y:: AbstractVector )
87+ function kernelmatrix_diag (k:: KernelIndependentSum , x:: AbstractVector , y:: AbstractVector )
8888 validate_domain (k, x, y)
8989 return mapreduce (kernelmatrix_diag, + , k. kernels, slices (x), slices (y))
9090end
9191
92- function Base.:(== )(x:: KernelTensorSum , y:: KernelTensorSum )
92+ function Base.:(== )(x:: KernelIndependentSum , y:: KernelIndependentSum )
9393 return (
9494 length (x. kernels) == length (y. kernels) &&
9595 all (kx == ky for (kx, ky) in zip (x. kernels, y. kernels))
9696 )
9797end
9898
99- Base. show (io:: IO , kernel:: KernelTensorSum ) = printshifted (io, kernel, 0 )
99+ Base. show (io:: IO , kernel:: KernelIndependentSum ) = printshifted (io, kernel, 0 )
100100
101- function printshifted (io:: IO , kernel:: KernelTensorSum , shift:: Int )
101+ function printshifted (io:: IO , kernel:: KernelIndependentSum , shift:: Int )
102102 print (io, " Tensor sum of " , length (kernel), " kernels:" )
103103 for k in kernel. kernels
104104 print (io, " \n " )
0 commit comments