MLPACK  1.0.8
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>
29 
30 namespace mlpack {
31 namespace kernel {
32 
44 {
45  public:
49  GaussianKernel() : bandwidth(1.0), gamma(-0.5)
50  { }
51 
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.
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<>
145 {
146  public:
148  static const bool IsNormalized = true;
149 };
150 
151 }; // namespace kernel
152 }; // namespace mlpack
153 
154 #endif
GaussianKernel(double bandwidth)
Construct the Gaussian kernel with a custom bandwidth.
GaussianKernel()
Default constructor; sets bandwidth to 1.0.
This is a template class that can provide information about various kernels.
double Evaluate(double t) const
Evaluation of the Gaussian kernel given the distance between two points.
void Bandwidth(const double bandwidth)
Modify the bandwidth.
double gamma
Precalculated constant depending on the bandwidth; .
double ConvolutionIntegral(const VecType &a, const VecType &b)
Obtain a convolution integral of the Gaussian kernel.
#define M_PI
Definition: core.hpp:171
static double Evaluate(const VecType1 &a, const VecType2 &b)
Computes the distance between two points.
double Bandwidth() const
Get the bandwidth.
double Evaluate(const VecType &a, const VecType &b) const
Evaluation of the Gaussian kernel.
The standard Gaussian kernel.
static const bool IsNormalized
If true, then the kernel is normalized: K(x, x) = K(y, y) = 1 for all x.
double Gamma() const
Get the precalculated constant.
double bandwidth
Kernel bandwidth.
double Normalizer(size_t dimension)
Obtain the normalization constant of the Gaussian kernel.