12#ifndef MLPACK_METHODS_KDE_MODEL_HPP
13#define MLPACK_METHODS_KDE_MODEL_HPP
25#include <boost/variant.hpp>
32template<
typename KernelType,
33 template<
typename TreeMetricType,
34 typename TreeStatType,
35 typename TreeMatType>
class TreeType>
42 arma::mat>::template DualTreeTraverser,
45 arma::mat>::template SingleTreeTraverser>;
55 HAS_MEM_FUNC(Normalizer, HasNormalizer);
59 template<
typename KernelType>
64 const typename std::enable_if<
65 !HasNormalizer<KernelType,
double(KernelType::*)(
size_t)>::value>::
70 template<
typename KernelType>
73 const size_t dimension,
74 arma::vec& estimations,
75 const typename std::enable_if<
76 HasNormalizer<KernelType,
double(KernelType::*)(
size_t)>::value>::
79 estimations /= kernel.Normalizer(dimension);
91 arma::vec& estimations;
95 template<
typename KernelType,
96 template<
typename TreeMetricType,
97 typename TreeStatType,
98 typename TreeMatType>
class TreeType>
102 template<
typename KernelType,
103 template<
typename TreeMetricType,
104 typename TreeStatType,
105 typename TreeMatType>
class TreeType>
106 void operator()(
KDETypeT<KernelType, TreeType>* kde)
const;
122 const size_t dimension;
125 const arma::mat& querySet;
128 arma::vec& estimations;
132 template<
typename KernelType,
133 template<
typename TreeMetricType,
134 typename TreeStatType,
135 typename TreeMatType>
class TreeType>
139 template<
typename KernelType,
140 template<
typename TreeMetricType,
141 typename TreeStatType,
142 typename TreeMatType>
class TreeType>
143 void operator()(
KDETypeT<KernelType, TreeType>* kde)
const;
148 DualBiKDE(arma::mat&& querySet, arma::vec& estimations);
158 arma::mat&& referenceSet;
162 template<
typename KernelType,
163 template<
typename TreeMetricType,
164 typename TreeStatType,
165 typename TreeMatType>
class TreeType>
166 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
181 const double bandwidth;
185 template<
typename KernelType,
186 template<
typename TreeMetricType,
187 typename TreeStatType,
188 typename TreeMatType>
class TreeType>
189 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
202 const double relError;
206 template<
typename KernelType,
207 template<
typename TreeMetricType,
208 typename TreeStatType,
209 typename TreeMatType>
class TreeType>
210 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
223 const double absError;
227 template<
typename KernelType,
228 template<
typename TreeMetricType,
229 typename TreeStatType,
230 typename TreeMatType>
class TreeType>
231 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
244 const bool monteCarlo;
248 template<
typename KernelType,
249 template<
typename TreeMetricType,
250 typename TreeStatType,
251 typename TreeMatType>
class TreeType>
252 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
265 const double probability;
269 template<
typename KernelType,
270 template<
typename TreeMetricType,
271 typename TreeStatType,
272 typename TreeMatType>
class TreeType>
273 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
287 const size_t sampleSize;
291 template<
typename KernelType,
292 template<
typename TreeMetricType,
293 typename TreeStatType,
294 typename TreeMatType>
class TreeType>
295 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
308 const double entryCoef;
312 template<
typename KernelType,
313 template<
typename TreeMetricType,
314 typename TreeStatType,
315 typename TreeMatType>
class TreeType>
316 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
329 const double breakCoef;
333 template<
typename KernelType,
334 template<
typename TreeMetricType,
335 typename TreeStatType,
336 typename TreeMatType>
class TreeType>
337 void operator()(
KDEType<KernelType, TreeType>* kde)
const;
350 template<
typename KDEType>
358 template<
typename KDEType>
407 size_t initialSampleSize;
419 boost::variant<KDEType<kernel::GaussianKernel, tree::KDTree>*,
473 const KernelTypes kernelType = KernelTypes::GAUSSIAN_KERNEL,
474 const TreeTypes treeType = TreeTypes::KD_TREE,
500 template<
typename Archive>
501 void serialize(Archive& ar,
const unsigned int version);
590 void Evaluate(arma::mat&& querySet, arma::vec& estimations);
614#include "kde_model_impl.hpp"
AbsErrorVisitor modifies absolute error tolerance for a KDEType.
AbsErrorVisitor(const double absError)
AbsErrorVisitor constructor.
BandwidthVisitor modifies the bandwidth of a KDEType kernel.
BandwidthVisitor(const double bandwidth)
BandwidthVisitor constructor.
void operator()(KDEType *kde) const
Delete KDEType instance.
DualBiKDE computes a Kernel Density Estimation on the given KDEType.
DualBiKDE(arma::mat &&querySet, arma::vec &estimations)
DualBiKDE constructor. Takes ownership of the given querySet.
DualMonoKDE computes a Kernel Density Estimation on the given KDEType.
DualMonoKDE(arma::vec &estimations)
DualMonoKDE constructor.
double MCEntryCoefficient() const
Get Monte Carlo entry coefficient.
KernelTypes KernelType() const
Get the kernel type of the model.
KDEModel & operator=(KDEModel other)
Copy the given model.
KDEMode & Mode()
Modify the mode of the model.
KDEModel(const double bandwidth=1.0, const double relError=KDEDefaultParams::relError, const double absError=KDEDefaultParams::absError, const KernelTypes kernelType=KernelTypes::GAUSSIAN_KERNEL, const TreeTypes treeType=TreeTypes::KD_TREE, const bool monteCarlo=KDEDefaultParams::mode, const double mcProb=KDEDefaultParams::mcProb, const size_t initialSampleSize=KDEDefaultParams::initialSampleSize, const double mcEntryCoef=KDEDefaultParams::mcEntryCoef, const double mcBreakCoef=KDEDefaultParams::mcBreakCoef)
Initialize KDEModel.
void RelativeError(const double newRelError)
Modify the relative error tolerance.
double RelativeError() const
Get the relative error tolerance.
void MonteCarlo(const bool newMonteCarlo)
Modify whether the model is using Monte Carlo estimations or not.
void MCBreakCoefficient(const double newBreakCoef)
Modify Monte Carlo break coefficient.
void AbsoluteError(const double newAbsError)
Modify the absolute error tolerance.
KernelTypes & KernelType()
Modify the kernel type of the model.
double MCProbability() const
Get Monte Carlo probability of error being bounded by relative error.
TreeTypes & TreeType()
Modify the tree type of the model.
void serialize(Archive &ar, const unsigned int version)
Serialize the KDE model.
KDEMode Mode() const
Get the mode of the model.
void BuildModel(arma::mat &&referenceSet)
Build the KDE model with the given parameters and then trains it with the given reference data.
void Bandwidth(const double newBandwidth)
Modify the bandwidth of the kernel.
void MCEntryCoefficient(const double newEntryCoef)
Modify Monte Carlo entry coefficient.
void Evaluate(arma::vec &estimations)
Perform kernel density estimation on the reference set.
size_t MCInitialSampleSize() const
Get the initial sample size for Monte Carlo estimations.
double MCBreakCoefficient() const
Get Monte Carlo break coefficient.
bool MonteCarlo() const
Get whether the model is using Monte Carlo estimations or not.
double AbsoluteError() const
Get the absolute error tolerance.
~KDEModel()
Destroy the KDEModel object.
TreeTypes TreeType() const
Get the tree type of the model.
KDEModel(const KDEModel &other)
Copy constructor of the given model.
KDEModel(KDEModel &&other)
Move constructor of the given model. Takes ownership of the model.
void MCProbability(const double newMCProb)
Modify Monte Carlo probability of error being bounded by relative error.
double Bandwidth() const
Get the bandwidth of the kernel.
void MCInitialSampleSize(const size_t newSampleSize)
Modify the initial sample size for Monte Carlo estimations.
void Evaluate(arma::mat &&querySet, arma::vec &estimations)
Perform kernel density estimation on the given query set.
Extra data for each node in the tree for the task of kernel density estimation.
The KDE class is a template class for performing Kernel Density Estimations.
KernelNormalizer holds a set of methods to normalize estimations applying in each case the appropiate...
static void ApplyNormalizer(KernelType &, const size_t, arma::vec &, const typename std::enable_if< !HasNormalizer< KernelType, double(KernelType::*)(size_t)>::value >::type *=0)
Normalization not needed.
static void ApplyNormalizer(KernelType &kernel, const size_t dimension, arma::vec &estimations, const typename std::enable_if< HasNormalizer< KernelType, double(KernelType::*)(size_t)>::value >::type *=0)
Normalize kernels that have normalizer.
MCBreakCoefVisitor sets the Monte Carlo break coefficient.
MCBreakCoefVisitor(const double breakCoef)
MCBreakCoefVisitor constructor.
MCEntryCoefVisitor sets the Monte Carlo entry coefficient.
MCEntryCoefVisitor(const double entryCoef)
MCEntryCoefVisitor constructor.
MCProbabilityVisitor sets the Monte Carlo probability for a given KDEType.
MCProbabilityVisitor(const double probability)
MCProbabilityVisitor constructor.
MCSampleSizeVisitor sets the Monte Carlo intial sample size for a given KDEType.
MCSampleSizeVisitor(const size_t sampleSize)
MCSampleSizeVisitor constructor.
ModeVisitor exposes the Mode() method of the KDEType.
KDEMode & operator()(KDEType *kde) const
Return mode of KDEType instance.
MonteCarloVisitor activates or deactivates Monte Carlo for a given KDEType.
MonteCarloVisitor(const bool monteCarlo)
MonteCarloVisitor constructor.
RelErrorVisitor modifies relative error tolerance for a KDEType.
RelErrorVisitor(const double relError)
RelErrorVisitor constructor.
TrainVisitor trains a given KDEType using a reference set.
TrainVisitor(arma::mat &&referenceSet)
TrainVisitor constructor. Takes ownership of the given referenceSet.
Include all of the base components required to write mlpack methods, and the main mlpack Doxygen docu...
BOOST_TEMPLATE_CLASS_VERSION(template<>, mlpack::kde::KDEModel, 1)
Set the serialization version of the KDEModel class.
KDEMode
KDEMode represents the ways in which KDE algorithm can be executed.
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
Linear algebra utility functions, generally performed on matrices or vectors.
static constexpr KDEMode mode
KDE algorithm mode.
static constexpr double absError
Absolute error tolerance.
static constexpr double mcProb
Probability of a Monte Carlo estimation to be bounded by the relative error tolerance.
static constexpr double mcBreakCoef
Monte Carlo break coefficient.
static constexpr double mcEntryCoef
Monte Carlo entry coefficient.
static constexpr size_t initialSampleSize
Initial sample size for Monte Carlo estimations.
static constexpr double relError
Relative error tolerance.