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>
351 KDEMode& operator()(KDEType* kde)
const;
358 template<
typename KDEType>
359 void operator()(KDEType* kde)
const;
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);
513 void RelativeError(
const double newRelError);
519 void AbsoluteError(
const double newAbsError);
537 void MonteCarlo(
const bool newMonteCarlo);
543 void MCProbability(
const double newMCProb);
549 void MCInitialSampleSize(
const size_t newSampleSize);
555 void MCEntryCoefficient(
const double newEntryCoef);
561 void MCBreakCoefficient(
const double newBreakCoef);
577 void BuildModel(arma::mat&& referenceSet);
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.
double Bandwidth() const
Get the bandwidth of the kernel.
static constexpr double relError
Relative error tolerance.
BOOST_TEMPLATE_CLASS_VERSION(template<>, mlpack::kde::KDEModel, 1)
Set the serialization version of the KDEModel class.
double RelativeError() const
Get the relative error tolerance.
AbsErrorVisitor modifies absolute error tolerance for a KDEType.
KDEMode
KDEMode represents the ways in which KDE algorithm can be executed.
BandwidthVisitor modifies the bandwidth of a KDEType kernel.
double MCEntryCoefficient() const
Get Monte Carlo entry coefficient.
DualBiKDE computes a Kernel Density Estimation on the given KDEType.
static constexpr double mcBreakCoef
Monte Carlo break coefficient.
KernelTypes & KernelType()
Modify the kernel type of the model.
TreeTypes TreeType() const
Get the tree type of the model.
static constexpr KDEMode mode
KDE algorithm mode.
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 CleanMemory()
Delete any unique pointers that are held by the CLI object.
The KDE class is a template class for performing Kernel Density Estimations.
double MCBreakCoefficient() const
Get Monte Carlo break coefficient.
MCSampleSizeVisitor sets the Monte Carlo intial sample size for a given KDEType.
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.
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.
double AbsoluteError() const
Get the absolute error tolerance.
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.
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.
KernelNormalizer holds a set of methods to normalize estimations applying in each case the appropiate...
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
KernelTypes KernelType() const
Get the kernel type of the model.
MCEntryCoefVisitor sets the Monte Carlo entry coefficient.
double MCProbability() const
Get Monte Carlo probability of error being bounded by relative error.
size_t MCInitialSampleSize() const
Get the initial sample size for Monte Carlo estimations.
RelErrorVisitor modifies relative error tolerance for a KDEType.