MLPACK  1.0.8
ra_search_rules.hpp
Go to the documentation of this file.
1 
24 #ifndef __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP
25 #define __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP
26 
27 namespace mlpack {
28 namespace neighbor {
29 
30 template<typename SortPolicy, typename MetricType, typename TreeType>
32 {
33  public:
34  RASearchRules(const arma::mat& referenceSet,
35  const arma::mat& querySet,
36  arma::Mat<size_t>& neighbors,
37  arma::mat& distances,
38  MetricType& metric,
39  const double tau = 5,
40  const double alpha = 0.95,
41  const bool naive = false,
42  const bool sampleAtLeaves = false,
43  const bool firstLeafExact = false,
44  const size_t singleSampleLimit = 20);
45 
46 
47 
48  double BaseCase(const size_t queryIndex, const size_t referenceIndex);
49 
61  double Prescore(TreeType& queryNode,
62  TreeType& referenceNode,
63  TreeType& referenceChildNode,
64  const double baseCaseResult) const;
65  double PrescoreQ(TreeType& queryNode,
66  TreeType& queryChildNode,
67  TreeType& referenceNode,
68  const double baseCaseResult) const;
69 
70 
71 
94  double Score(const size_t queryIndex, TreeType& referenceNode);
95 
119  double Score(const size_t queryIndex,
120  TreeType& referenceNode,
121  const double baseCaseResult);
122 
140  double Rescore(const size_t queryIndex,
141  TreeType& referenceNode,
142  const double oldScore);
143 
162  double Score(TreeType& queryNode, TreeType& referenceNode);
163 
184  double Score(TreeType& queryNode,
185  TreeType& referenceNode,
186  const double baseCaseResult);
187 
210  double Rescore(TreeType& queryNode,
211  TreeType& referenceNode,
212  const double oldScore);
213 
214 
217  {
218  if (numSamplesMade.n_elem == 0)
219  return 0;
220  else
221  return arma::sum(numSamplesMade);
222  }
223 
224  private:
226  const arma::mat& referenceSet;
227 
229  const arma::mat& querySet;
230 
232  arma::Mat<size_t>& neighbors;
233 
235  arma::mat& distances;
236 
238  MetricType& metric;
239 
242 
245 
248 
251 
253  arma::Col<size_t> numSamplesMade;
254 
257 
258  // TO REMOVE: just for testing
260 
270  void InsertNeighbor(const size_t queryIndex,
271  const size_t pos,
272  const size_t neighbor,
273  const double distance);
274 
284  size_t MinimumSamplesReqd(const size_t n,
285  const size_t k,
286  const double tau,
287  const double alpha) const;
288 
298  double SuccessProbability(const size_t n,
299  const size_t k,
300  const size_t m,
301  const size_t t) const;
302 
312  void ObtainDistinctSamples(const size_t numSamples,
313  const size_t rangeUpperBound,
314  arma::uvec& distinctSamples) const;
315 
319  double Score(const size_t queryIndex,
320  TreeType& referenceNode,
321  const double distance,
322  const double bestDistance);
323 
327  double Score(TreeType& queryNode,
328  TreeType& referenceNode,
329  const double distance,
330  const double bestDistance);
331 
332 }; // class RASearchRules
333 
334 }; // namespace neighbor
335 }; // namespace mlpack
336 
337 // Include implementation.
338 #include "ra_search_rules_impl.hpp"
339 
340 #endif // __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP
bool firstLeafExact
Whether to do exact computation on the first leaf before any sampling.
double samplingRatio
The sampling ratio.
size_t numSamplesReqd
The minimum number of samples required per query.
MetricType & metric
The instantiated metric.
double Rescore(const size_t queryIndex, TreeType &referenceNode, const double oldScore)
Re-evaluate the score for recursion order.
arma::mat & distances
The matrix the resultant neighbor distances should be stored in.
double Score(const size_t queryIndex, TreeType &referenceNode)
Get the score for recursion order.
arma::Col< size_t > numSamplesMade
The number of samples made for every query.
const arma::mat & querySet
The query set.
double Prescore(TreeType &queryNode, TreeType &referenceNode, TreeType &referenceChildNode, const double baseCaseResult) const
TOFIX: This function is specified for the cover tree (usually) so I need to think about it more algor...
double PrescoreQ(TreeType &queryNode, TreeType &queryChildNode, TreeType &referenceNode, const double baseCaseResult) const
bool sampleAtLeaves
Whether to sample at leaves or just use all of it.
RASearchRules(const arma::mat &referenceSet, const arma::mat &querySet, arma::Mat< size_t > &neighbors, arma::mat &distances, MetricType &metric, const double tau=5, const double alpha=0.95, const bool naive=false, const bool sampleAtLeaves=false, const bool firstLeafExact=false, const size_t singleSampleLimit=20)
size_t MinimumSamplesReqd(const size_t n, const size_t k, const double tau, const double alpha) const
Compute the minimum number of samples required to guarantee the given rank-approximation and success ...
const arma::mat & referenceSet
The reference set.
void InsertNeighbor(const size_t queryIndex, const size_t pos, const size_t neighbor, const double distance)
Insert a point into the neighbors and distances matrices; this is a helper function.
see subsection cli_alt_reg_tut Alternate DET regularization The usual regularized error f $R_ alpha(t)\f $of a node\f $t\f $is given by
Definition: det.txt:367
void ObtainDistinctSamples(const size_t numSamples, const size_t rangeUpperBound, arma::uvec &distinctSamples) const
Pick up desired number of samples (with replacement) from a given range of integers so that only the ...
double SuccessProbability(const size_t n, const size_t k, const size_t m, const size_t t) const
Compute the success probability of obtaining 'k'-neighbors from a set of size 'n' within the top 't' ...
size_t singleSampleLimit
The limit on the largest node that can be approximated by sampling.
double BaseCase(const size_t queryIndex, const size_t referenceIndex)
arma::Mat< size_t > & neighbors
The matrix the resultant neighbor indices should be stored in.