MLPACK
1.0.8
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
src
mlpack
core
kernels
gaussian_kernel.hpp
Go to the documentation of this file.
1
24
#ifndef __MLPACK_CORE_KERNELS_GAUSSIAN_KERNEL_HPP
25
#define __MLPACK_CORE_KERNELS_GAUSSIAN_KERNEL_HPP
26
27
#include <
mlpack/core.hpp
>
28
#include <
mlpack/core/metrics/lmetric.hpp
>
29
30
namespace
mlpack {
31
namespace
kernel {
32
43
class
GaussianKernel
44
{
45
public
:
49
GaussianKernel
() :
bandwidth
(1.0),
gamma
(-0.5)
50
{ }
51
57
GaussianKernel
(
double
bandwidth
) :
58
bandwidth(bandwidth),
59
gamma
(-0.5 * pow(bandwidth, -2.0))
60
{ }
61
73
template
<
typename
VecType>
74
double
Evaluate
(
const
VecType& a,
const
VecType& b)
const
75
{
76
// The precalculation of gamma saves us a little computation time.
77
return
exp(
gamma
*
metric::SquaredEuclideanDistance::Evaluate
(a, b));
78
}
79
87
double
Evaluate
(
double
t)
const
88
{
89
// The precalculation of gamma saves us a little computation time.
90
return
exp(
gamma
* std::pow(t, 2.0));
91
}
92
99
double
Normalizer
(
size_t
dimension)
100
{
101
return
pow(sqrt(2.0 *
M_PI
) *
bandwidth
, (
double
) dimension);
102
}
103
111
template
<
typename
VecType>
112
double
ConvolutionIntegral
(
const
VecType& a,
const
VecType& b)
113
{
114
return
Evaluate
(sqrt(
metric::SquaredEuclideanDistance::Evaluate
(a, b) / 2.0)) /
115
(
Normalizer
(a.n_rows) * pow(2.0, (
double
) a.n_rows / 2.0));
116
}
117
118
120
double
Bandwidth
()
const
{
return
bandwidth
; }
121
124
void
Bandwidth
(
const
double
bandwidth
)
125
{
126
this->bandwidth =
bandwidth
;
127
this->
gamma
= -0.5 * pow(bandwidth, -2.0);
128
}
129
131
double
Gamma
()
const
{
return
gamma
; }
132
133
private
:
135
double
bandwidth
;
136
139
double
gamma
;
140
};
141
143
template
<>
144
class
KernelTraits
<
GaussianKernel
>
145
{
146
public
:
148
static
const
bool
IsNormalized
=
true
;
149
};
150
151
};
// namespace kernel
152
};
// namespace mlpack
153
154
#endif
Generated by
1.8.3.1