12 #ifndef MLPACK_METHODS_KDE_MODEL_HPP
13 #define MLPACK_METHODS_KDE_MODEL_HPP
25 #include <boost/variant.hpp>
32 template<
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>*,
470 KDEModel(
const double bandwidth = 1.0,
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);
507 void Bandwidth(
const double newBandwidth);
590 void Evaluate(arma::mat&& querySet, arma::vec& estimations);
600 void Evaluate(arma::vec& estimations);
614 #include "kde_model_impl.hpp"
KDE< KernelType, metric::EuclideanDistance, arma::mat, TreeType, TreeType< metric::EuclideanDistance, kde::KDEStat, arma::mat >::template DualTreeTraverser, TreeType< metric::EuclideanDistance, kde::KDEStat, arma::mat >::template SingleTreeTraverser > KDEType
Alias template.
#define BOOST_TEMPLATE_CLASS_VERSION(SIGNATURE, T, N)
Use this like BOOST_CLASS_VERSION(), but for templated classes.
static constexpr double relError
Relative error tolerance.
KDEMode Mode() const
Get the mode of the model.
RelErrorVisitor(const double relError)
RelErrorVisitor constructor.
void operator()(KDEType *kde) const
Delete KDEType instance.
AbsErrorVisitor modifies absolute error tolerance for a KDEType.
MCBreakCoefVisitor(const double breakCoef)
MCBreakCoefVisitor constructor.
KDEMode
KDEMode represents the ways in which KDE algorithm can be executed.
BandwidthVisitor modifies the bandwidth of a KDEType kernel.
DualBiKDE computes a Kernel Density Estimation on the given KDEType.
static constexpr double mcBreakCoef
Monte Carlo break coefficient.
MonteCarloVisitor(const bool monteCarlo)
MonteCarloVisitor constructor.
double AbsoluteError() const
Get the absolute error tolerance.
double MCProbability() const
Get Monte Carlo probability of error being bounded by relative error.
MCProbabilityVisitor(const double probability)
MCProbabilityVisitor constructor.
MCEntryCoefVisitor(const double entryCoef)
MCEntryCoefVisitor constructor.
double MCEntryCoefficient() const
Get Monte Carlo entry coefficient.
~KDEModel()
Destroy the KDEModel object.
KernelTypes & KernelType()
Modify the kernel type 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.
static constexpr KDEMode mode
KDE algorithm mode.
BandwidthVisitor(const double bandwidth)
BandwidthVisitor constructor.
bool MonteCarlo() const
Get whether the model is using Monte Carlo estimations or not.
static constexpr double absError
Absolute error tolerance.
ModeVisitor exposes the Mode() method of the KDEType.
void serialize(Archive &ar, const unsigned int version)
Serialize the KDE model.
void BuildModel(arma::mat &&referenceSet)
Build the KDE model with the given parameters and then trains it with the given reference data...
KDEMode & operator()(KDEType *kde) const
Return mode of KDEType instance.
double Bandwidth() const
Get the bandwidth of the kernel.
The KDE class is a template class for performing Kernel Density Estimations.
MCSampleSizeVisitor sets the Monte Carlo intial sample size for a given KDEType.
double RelativeError() const
Get the relative error tolerance.
Include all of the base components required to write mlpack methods, and the main mlpack Doxygen docu...
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.
DualMonoKDE(arma::vec &estimations)
DualMonoKDE constructor.
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.
MCBreakCoefVisitor sets the Monte Carlo break coefficient.
KernelTypes KernelType() const
Get the kernel type of the model.
static constexpr size_t initialSampleSize
Initial sample size for Monte Carlo estimations.
static constexpr double mcEntryCoef
Monte Carlo entry coefficient.
TreeTypes & TreeType()
Modify the tree type of the model.
KDEModel & operator=(KDEModel other)
Copy the given model.
MCProbabilityVisitor sets the Monte Carlo probability for a given KDEType.
DualMonoKDE computes a Kernel Density Estimation on the given KDEType.
static constexpr double mcProb
Probability of a Monte Carlo estimation to be bounded by the relative error tolerance.
MonteCarloVisitor activates or deactivates Monte Carlo for a given KDEType.
TrainVisitor trains a given KDEType using a reference set.
MCSampleSizeVisitor(const size_t sampleSize)
MCSampleSizeVisitor constructor.
size_t MCInitialSampleSize() const
Get the initial sample size for Monte Carlo estimations.
AbsErrorVisitor(const double absError)
AbsErrorVisitor constructor.
KernelNormalizer holds a set of methods to normalize estimations applying in each case the appropiate...
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
MCEntryCoefVisitor sets the Monte Carlo entry coefficient.
DualBiKDE(arma::mat &&querySet, arma::vec &estimations)
DualBiKDE constructor. Takes ownership of the given querySet.
double MCBreakCoefficient() const
Get Monte Carlo break coefficient.
TreeTypes TreeType() const
Get the tree type of the model.
void Evaluate(arma::mat &&querySet, arma::vec &estimations)
Perform kernel density estimation on the given query set.
RelErrorVisitor modifies relative error tolerance for a KDEType.
TrainVisitor(arma::mat &&referenceSet)
TrainVisitor constructor. Takes ownership of the given referenceSet.