triangular_kernel.hpp
Go to the documentation of this file.
1 
12 #ifndef MLPACK_CORE_KERNELS_TRIANGULAR_KERNEL_HPP
13 #define MLPACK_CORE_KERNELS_TRIANGULAR_KERNEL_HPP
14 
15 #include <mlpack/prereqs.hpp>
17 
18 namespace mlpack {
19 namespace kernel {
20 
31 {
32  public:
38  TriangularKernel(const double bandwidth = 1.0) : bandwidth(bandwidth) { }
39 
48  template<typename VecTypeA, typename VecTypeB>
49  double Evaluate(const VecTypeA& a, const VecTypeB& b) const
50  {
51  return std::max(0.0, (1 - metric::EuclideanDistance::Evaluate(a, b) /
52  bandwidth));
53  }
54 
61  double Evaluate(const double distance) const
62  {
63  return std::max(0.0, (1 - distance) / bandwidth);
64  }
65 
73  double Gradient(const double distance) const
74  {
75  if (distance < 1)
76  {
77  return -1.0 / bandwidth;
78  }
79  else if (distance > 1)
80  {
81  return 0;
82  }
83  else
84  {
85  return arma::datum::nan;
86  }
87  }
88 
90  double Bandwidth() const { return bandwidth; }
92  double& Bandwidth() { return bandwidth; }
93 
95  template<typename Archive>
96  void serialize(Archive& ar, const uint32_t /* version */)
97  {
98  ar(CEREAL_NVP(bandwidth));
99  }
100 
101  private:
103  double bandwidth;
104 };
105 
107 template<>
109 {
110  public:
112  static const bool IsNormalized = true;
114  static const bool UsesSquaredDistance = false;
115 };
116 
117 } // namespace kernel
118 } // namespace mlpack
119 
120 #endif
This is a template class that can provide information about various kernels.
Linear algebra utility functions, generally performed on matrices or vectors.
double & Bandwidth()
Modify the bandwidth of the kernel.
void serialize(Archive &ar, const uint32_t)
Serialize the kernel.
The trivially simple triangular kernel, defined by.
The core includes that mlpack expects; standard C++ includes and Armadillo.
double Evaluate(const double distance) const
Evaluate the triangular kernel given that the distance between the two points is known.
static VecTypeA::elem_type Evaluate(const VecTypeA &a, const VecTypeB &b)
Computes the distance between two points.
double Bandwidth() const
Get the bandwidth of the kernel.
double Evaluate(const VecTypeA &a, const VecTypeB &b) const
Evaluate the triangular kernel for the two given vectors.
TriangularKernel(const double bandwidth=1.0)
Initialize the triangular kernel with the given bandwidth (default 1.0).
double Gradient(const double distance) const
Evaluate the gradient of triangular kernel given that the distance between the two points is known...