kde.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_METHODS_KDE_KDE_HPP
14 #define MLPACK_METHODS_KDE_KDE_HPP
15 
16 #include <mlpack/prereqs.hpp>
18 
19 #include "kde_stat.hpp"
20 
21 namespace mlpack {
22 namespace kde {
23 
25 enum KDEMode
26 {
29 };
30 
45 template<typename KernelType = kernel::GaussianKernel,
46  typename MetricType = mlpack::metric::EuclideanDistance,
47  typename MatType = arma::mat,
48  template<typename TreeMetricType,
49  typename TreeStatType,
50  typename TreeMatType> class TreeType = tree::KDTree,
51  template<typename RuleType> class DualTreeTraversalType =
52  TreeType<MetricType,
54  MatType>::template DualTreeTraverser,
55  template<typename RuleType> class SingleTreeTraversalType =
56  TreeType<MetricType,
57  kde::KDEStat,
58  MatType>::template SingleTreeTraverser>
59 class KDE
60 {
61  public:
63  typedef TreeType<MetricType, kde::KDEStat, MatType> Tree;
64 
74  KDE(const double relError = 0.05,
75  const double absError = 0,
76  KernelType kernel = KernelType(),
77  const KDEMode mode = DUAL_TREE_MODE,
78  MetricType metric = MetricType());
79 
86  KDE(const KDE& other);
87 
93  KDE(KDE&& other);
94 
102  KDE& operator=(KDE other);
103 
108  ~KDE();
109 
117  void Train(MatType referenceSet);
118 
129  void Train(Tree* referenceTree, std::vector<size_t>* oldFromNewReferences);
130 
145  void Evaluate(MatType querySet, arma::vec& estimations);
146 
162  void Evaluate(Tree* queryTree,
163  const std::vector<size_t>& oldFromNewQueries,
164  arma::vec& estimations);
165 
176  void Evaluate(arma::vec& estimations);
177 
179  const KernelType& Kernel() const { return kernel; }
180 
182  KernelType& Kernel() { return kernel; }
183 
185  const MetricType& Metric() const { return metric; }
186 
188  MetricType& Metric() { return metric; }
189 
191  Tree* ReferenceTree() { return referenceTree; }
192 
194  double RelativeError() const { return relError; }
195 
197  void RelativeError(const double newError);
198 
200  double AbsoluteError() const { return absError; }
201 
203  void AbsoluteError(const double newError);
204 
206  bool OwnsReferenceTree() const { return ownsReferenceTree; }
207 
209  bool IsTrained() const { return trained; }
210 
212  KDEMode Mode() const { return mode; }
213 
215  KDEMode& Mode() { return mode; }
216 
218  template<typename Archive>
219  void serialize(Archive& ar, const unsigned int /* version */);
220 
221  private:
223  KernelType kernel;
224 
226  MetricType metric;
227 
229  Tree* referenceTree;
230 
232  std::vector<size_t>* oldFromNewReferences;
233 
235  double relError;
236 
238  double absError;
239 
241  bool ownsReferenceTree;
242 
244  bool trained;
245 
247  KDEMode mode;
248 
250  static void CheckErrorValues(const double relError, const double absError);
251 
253  static void RearrangeEstimations(const std::vector<size_t>& oldFromNew,
254  arma::vec& estimations);
255 };
256 
257 } // namespace kde
258 } // namespace mlpack
259 
260 // Include implementation.
261 #include "kde_impl.hpp"
262 
263 #endif // MLPACK_METHODS_KDE_KDE_HPP
KernelType & Kernel()
Modify the kernel.
Definition: kde.hpp:182
.hpp
Definition: add_to_po.hpp:21
KDEMode
KDEMode represents the ways in which KDE algorithm can be executed.
Definition: kde.hpp:25
bool IsTrained() const
Check whether KDE model is trained or not.
Definition: kde.hpp:209
const KernelType & Kernel() const
Get the kernel.
Definition: kde.hpp:179
The core includes that mlpack expects; standard C++ includes and Armadillo.
const MetricType & Metric() const
Get the metric.
Definition: kde.hpp:185
KDE & operator=(KDE other)
Copy a KDE model.
KDE(const double relError=0.05, const double absError=0, KernelType kernel=KernelType(), const KDEMode mode=DUAL_TREE_MODE, MetricType metric=MetricType())
Initialize KDE object using custom instantiated Metric and Kernel objects.
Extra data for each node in the tree for the task of kernel density estimation.
Definition: kde_stat.hpp:24
KDEMode & Mode()
Modify the mode of KDE.
Definition: kde.hpp:215
KDEMode Mode() const
Get the mode of KDE.
Definition: kde.hpp:212
TreeType< MetricType, kde::KDEStat, MatType > Tree
Convenience typedef.
Definition: kde.hpp:63
void Train(MatType referenceSet)
Trains the KDE model.
void serialize(Archive &ar, const unsigned int)
Serialize the model.
MetricType & Metric()
Modify the metric.
Definition: kde.hpp:188
void Evaluate(MatType querySet, arma::vec &estimations)
Estimate density of each point in the query set given the data of the reference set.
double RelativeError() const
Get relative error tolerance.
Definition: kde.hpp:194
The KDE class is a template class for performing Kernel Density Estimations.
Definition: kde.hpp:59
~KDE()
Destroy the KDE object.
The standard Gaussian kernel.
BinarySpaceTree< MetricType, StatisticType, MatType, bound::HRectBound, MidpointSplit > KDTree
The standard midpoint-split kd-tree.
Definition: typedef.hpp:63
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
Definition: lmetric.hpp:112
Tree * ReferenceTree()
Get the reference tree.
Definition: kde.hpp:191
bool OwnsReferenceTree() const
Check whether reference tree is owned by the KDE model.
Definition: kde.hpp:206
double AbsoluteError() const
Get absolute error tolerance.
Definition: kde.hpp:200