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