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