ra_search_rules.hpp

Go to the documentation of this file.
00001 
00024 #ifndef __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP
00025 #define __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP
00026 
00027 namespace mlpack {
00028 namespace neighbor {
00029 
00030 template<typename SortPolicy, typename MetricType, typename TreeType>
00031 class RASearchRules
00032 {
00033  public:
00034   RASearchRules(const arma::mat& referenceSet,
00035                 const arma::mat& querySet,
00036                 arma::Mat<size_t>& neighbors,
00037                 arma::mat& distances,
00038                 MetricType& metric,
00039                 const double tau = 5,
00040                 const double alpha = 0.95,
00041                 const bool naive = false,
00042                 const bool sampleAtLeaves = false,
00043                 const bool firstLeafExact = false,
00044                 const size_t singleSampleLimit = 20);
00045 
00046 
00047 
00048   double BaseCase(const size_t queryIndex, const size_t referenceIndex);
00049 
00061   double Prescore(TreeType& queryNode,
00062                   TreeType& referenceNode,
00063                   TreeType& referenceChildNode,
00064                   const double baseCaseResult) const;
00065   double PrescoreQ(TreeType& queryNode,
00066                    TreeType& queryChildNode,
00067                    TreeType& referenceNode,
00068                    const double baseCaseResult) const;
00069 
00070 
00071 
00094   double Score(const size_t queryIndex, TreeType& referenceNode);
00095 
00119   double Score(const size_t queryIndex,
00120                TreeType& referenceNode,
00121                const double baseCaseResult);
00122 
00140   double Rescore(const size_t queryIndex,
00141                  TreeType& referenceNode,
00142                  const double oldScore);
00143 
00162   double Score(TreeType& queryNode, TreeType& referenceNode);
00163 
00184   double Score(TreeType& queryNode,
00185                TreeType& referenceNode,
00186                const double baseCaseResult);
00187 
00210   double Rescore(TreeType& queryNode,
00211                  TreeType& referenceNode,
00212                  const double oldScore);
00213 
00214 
00215   size_t NumDistComputations() { return numDistComputations; }
00216   size_t NumEffectiveSamples()
00217   {
00218     if (numSamplesMade.n_elem == 0)
00219       return 0;
00220     else
00221       return arma::sum(numSamplesMade);
00222   }
00223 
00224  private:
00226   const arma::mat& referenceSet;
00227 
00229   const arma::mat& querySet;
00230 
00232   arma::Mat<size_t>& neighbors;
00233 
00235   arma::mat& distances;
00236 
00238   MetricType& metric;
00239 
00241   bool sampleAtLeaves;
00242 
00244   bool firstLeafExact;
00245 
00247   size_t singleSampleLimit;
00248 
00250   size_t numSamplesReqd;
00251 
00253   arma::Col<size_t> numSamplesMade;
00254 
00256   double samplingRatio;
00257 
00258   // TO REMOVE: just for testing
00259   size_t numDistComputations;
00260 
00270   void InsertNeighbor(const size_t queryIndex,
00271                       const size_t pos,
00272                       const size_t neighbor,
00273                       const double distance);
00274 
00284   size_t MinimumSamplesReqd(const size_t n,
00285                             const size_t k,
00286                             const double tau,
00287                             const double alpha) const;
00288 
00298   double SuccessProbability(const size_t n,
00299                             const size_t k,
00300                             const size_t m,
00301                             const size_t t) const;
00302 
00312   void ObtainDistinctSamples(const size_t numSamples,
00313                              const size_t rangeUpperBound,
00314                              arma::uvec& distinctSamples) const;
00315 
00319   double Score(const size_t queryIndex,
00320                TreeType& referenceNode,
00321                const double distance,
00322                const double bestDistance);
00323 
00327   double Score(TreeType& queryNode,
00328                TreeType& referenceNode,
00329                const double distance,
00330                const double bestDistance);
00331 
00332 }; // class RASearchRules
00333 
00334 }; // namespace neighbor
00335 }; // namespace mlpack
00336 
00337 // Include implementation.
00338 #include "ra_search_rules_impl.hpp"
00339 
00340 #endif // __MLPACK_METHODS_RANN_RA_SEARCH_RULES_HPP

Generated on 13 Aug 2014 for MLPACK by  doxygen 1.6.1