116 lines
4.8 KiB
C++
116 lines
4.8 KiB
C++
// Copyright (C) 2009 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#undef DLIB_SVm_KERNEL_MATRIX_ABSTRACT_
|
|
#ifdef DLIB_SVm_KERNEL_MATRIX_ABSTRACT_
|
|
|
|
#include <vector>
|
|
#include "kernel_abstract.h"
|
|
#include "../matrix/matrix_abstract.h"
|
|
#include "../algs.h"
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename kernel_type,
|
|
typename V
|
|
>
|
|
const matrix_exp kernel_matrix (
|
|
const kernel_type& kernel,
|
|
const V& v
|
|
);
|
|
/*!
|
|
requires
|
|
- kernel == a kernel function object as defined by the file dlib/svm/kernel_abstract.h.
|
|
This kernel must also be capable of operating on the contents of v.
|
|
- V == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector,
|
|
dlib::linearly_independent_subset_finder, or kernel_type::sample_type.
|
|
- if (V is a dlib::matrix) then
|
|
- is_vector(v) == true
|
|
ensures
|
|
- if (V is of type kernel_type::sample_type) then
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R.size() == 1
|
|
- R(0,0) == kernel(v,v)
|
|
- else
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R is a square matrix of v.size() rows by v.size() columns
|
|
- for all valid r and c:
|
|
- R(r,c) == kernel(v(r), v(c))
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
template <
|
|
typename kernel_type,
|
|
typename V1,
|
|
typename V2
|
|
>
|
|
const matrix_exp kernel_matrix (
|
|
const kernel_type& kernel,
|
|
const V1& v1,
|
|
const V2& v2
|
|
);
|
|
/*!
|
|
requires
|
|
- kernel == a kernel function object as defined by the file dlib/svm/kernel_abstract.h
|
|
This kernel must also be capable of operating on the contents of v1 and v2.
|
|
- V1 == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector,
|
|
dlib::linearly_independent_subset_finder, or kernel_type::sample_type.
|
|
- V2 == dlib::matrix, std::vector, dlib::std_vector_c, dlib::random_subset_selector,
|
|
dlib::linearly_independent_subset_finder, or kernel_type::sample_type.
|
|
- if (V1 is a dlib::matrix) then
|
|
- is_vector(v1) == true
|
|
- if (V2 is a dlib::matrix) then
|
|
- is_vector(v2) == true
|
|
ensures
|
|
- if (V1 and V2 are of type kernel_type::sample_type) then
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R.size() == 1
|
|
- R(0,0) == kernel(v1,v2)
|
|
- else if (V1 is of type kernel_type::sample_type) then
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R.nr() == 1
|
|
- R.nc() == v2.size()
|
|
- for all valid c:
|
|
- R(0,c) == kernel(v1, v2(c))
|
|
- else if (V2 is of type kernel_type::sample_type) then
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R.nr() == v1.size()
|
|
- R.nc() == 1
|
|
- for all valid r:
|
|
- R(r,0) == kernel(v1(r), v2)
|
|
- else
|
|
- returns a matrix R such that:
|
|
- R::type == kernel_type::scalar_type
|
|
- R.nr() == v1.size()
|
|
- R.nc() == v2.size()
|
|
- for all valid r and c:
|
|
- R(r,c) == kernel(v1(r), v2(c))
|
|
|
|
|
|
A note about aliasing (see the examples/matrix_expressions_ex.cpp example program
|
|
for a discussion of what aliasing is in the context of the dlib::matrix):
|
|
kernel_matrix() expressions can detect aliasing of an argument if that
|
|
argument is of type kernel_type::sample_type. However, it can't detect
|
|
aliasing though std::vectors or other "list of sample type" container class
|
|
arguments. This means that it is safe to assign a kernel_matrix() expression
|
|
to a sample_type if V1 or V2 are of sample_type but not safe otherwise. However,
|
|
since the latter case results in a general n by m matrix rather than a column
|
|
or row vector you shouldn't ever be doing it anyway.
|
|
!*/
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#endif // DLIB_SVm_KERNEL_MATRIX_ABSTRACT_
|
|
|