mlpack
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType > Class Template Reference

The NeighborSearchRules class is a template helper class used by NeighborSearch class when performing distance-based neighbor searches. More...

#include <neighbor_search_rules.hpp>

Classes

struct  CandidateCmp
 Compare two candidates based on the distance. More...
 

Public Types

typedef tree::TraversalInfo< TreeType > TraversalInfoType
 Convenience typedef.
 

Public Member Functions

 NeighborSearchRules (const typename TreeType::Mat &referenceSet, const typename TreeType::Mat &querySet, const size_t k, MetricType &metric, const double epsilon=0, const bool sameSet=false)
 Construct the NeighborSearchRules object. More...
 
void GetResults (arma::Mat< size_t > &neighbors, arma::mat &distances)
 Store the list of candidates for each query point in the given matrices. More...
 
double BaseCase (const size_t queryIndex, const size_t referenceIndex)
 Get the distance from the query point to the reference point. More...
 
double Score (const size_t queryIndex, TreeType &referenceNode)
 Get the score for recursion order. More...
 
size_t GetBestChild (const size_t queryIndex, TreeType &referenceNode)
 Get the child node with the best score. More...
 
size_t GetBestChild (const TreeType &queryNode, TreeType &referenceNode)
 Get the child node with the best score. More...
 
double Rescore (const size_t queryIndex, TreeType &referenceNode, const double oldScore) const
 Re-evaluate the score for recursion order. More...
 
double Score (TreeType &queryNode, TreeType &referenceNode)
 Get the score for recursion order. More...
 
double Rescore (TreeType &queryNode, TreeType &referenceNode, const double oldScore) const
 Re-evaluate the score for recursion order. More...
 
size_t BaseCases () const
 Get the number of base cases that have been performed.
 
size_t & BaseCases ()
 Modify the number of base cases that have been performed.
 
size_t Scores () const
 Get the number of scores that have been performed.
 
size_t & Scores ()
 Modify the number of scores that have been performed.
 
const TraversalInfoTypeTraversalInfo () const
 Get the traversal info.
 
TraversalInfoTypeTraversalInfo ()
 Modify the traversal info.
 
size_t MinimumBaseCases () const
 Get the minimum number of base cases we need to perform to have acceptable results. More...
 

Protected Types

typedef std::pair< double, size_t > Candidate
 Candidate represents a possible candidate neighbor (distance, index).
 
typedef std::priority_queue< Candidate, std::vector< Candidate >, CandidateCmpCandidateList
 Use a priority queue to represent the list of candidate neighbors.
 

Protected Member Functions

double CalculateBound (TreeType &queryNode) const
 Recalculate the bound for a given query node.
 
void InsertNeighbor (const size_t queryIndex, const size_t neighbor, const double distance)
 Helper function to insert a point into the list of candidate points. More...
 

Protected Attributes

const TreeType::Mat & referenceSet
 The reference set.
 
const TreeType::Mat & querySet
 The query set.
 
std::vector< CandidateListcandidates
 Set of candidate neighbors for each point.
 
const size_t k
 Number of neighbors to search for.
 
MetricType & metric
 The instantiated metric.
 
bool sameSet
 Denotes whether or not the reference and query sets are the same.
 
const double epsilon
 Relative error to be considered in approximate search.
 
size_t lastQueryIndex
 The last query point BaseCase() was called with.
 
size_t lastReferenceIndex
 The last reference point BaseCase() was called with.
 
double lastBaseCase
 The last base case result.
 
size_t baseCases
 The number of base cases that have been performed.
 
size_t scores
 The number of scores that have been performed.
 
TraversalInfoType traversalInfo
 Traversal info for the parent combination; this is updated by the traversal before each call to Score(). More...
 

Detailed Description

template<typename SortPolicy, typename MetricType, typename TreeType>
class mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >

The NeighborSearchRules class is a template helper class used by NeighborSearch class when performing distance-based neighbor searches.

For each point in the query dataset, it keeps track of the k neighbors in the reference dataset which have the 'best' distance according to a given sorting policy.

Template Parameters
SortPolicyThe sort policy for distances.
MetricTypeThe metric to use for computation.
TreeTypeThe tree type to use; must adhere to the TreeType API.

Constructor & Destructor Documentation

◆ NeighborSearchRules()

template<typename SortPolicy , typename MetricType , typename TreeType >
mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::NeighborSearchRules ( const typename TreeType::Mat &  referenceSet,
const typename TreeType::Mat &  querySet,
const size_t  k,
MetricType &  metric,
const double  epsilon = 0,
const bool  sameSet = false 
)

Construct the NeighborSearchRules object.

This is usually done from within the NeighborSearch class at search time.

Parameters
referenceSetSet of reference data.
querySetSet of query data.
kNumber of neighbors to search for.
metricInstantiated metric.
epsilonRelative approximate error.
sameSetIf true, the query and reference set are taken to be the same, and a query point will not return itself in the results.

Member Function Documentation

◆ BaseCase()

template<typename SortPolicy , typename MetricType , typename TreeType >
force_inline double mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::BaseCase ( const size_t  queryIndex,
const size_t  referenceIndex 
)
inline

Get the distance from the query point to the reference point.

This will update the list of candidates with the new point if appropriate and will track the number of base cases (number of points evaluated).

Parameters
queryIndexIndex of query point.
referenceIndexIndex of reference point.

◆ GetBestChild() [1/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
size_t mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::GetBestChild ( const size_t  queryIndex,
TreeType &  referenceNode 
)
inline

Get the child node with the best score.

Parameters
queryIndexIndex of query point.
referenceNodeCandidate node to be recursed into.

◆ GetBestChild() [2/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
size_t mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::GetBestChild ( const TreeType &  queryNode,
TreeType &  referenceNode 
)
inline

Get the child node with the best score.

Parameters
queryNodeNode to be considered.
referenceNodeCandidate node to be recursed into.

◆ GetResults()

template<typename SortPolicy , typename MetricType , typename TreeType >
void mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::GetResults ( arma::Mat< size_t > &  neighbors,
arma::mat &  distances 
)

Store the list of candidates for each query point in the given matrices.

Parameters
neighborsMatrix storing lists of neighbors for each query point.
distancesMatrix storing distances of neighbors for each query point.

◆ InsertNeighbor()

template<typename SortPolicy , typename MetricType , typename TreeType >
void mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::InsertNeighbor ( const size_t  queryIndex,
const size_t  neighbor,
const double  distance 
)
inlineprotected

Helper function to insert a point into the list of candidate points.

Parameters
queryIndexIndex of point whose neighbors we are inserting into.
neighborIndex of reference point which is being inserted.
distanceDistance from query point to reference point.

◆ MinimumBaseCases()

template<typename SortPolicy , typename MetricType , typename TreeType >
size_t mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::MinimumBaseCases ( ) const
inline

Get the minimum number of base cases we need to perform to have acceptable results.

This is only needed in defeatist search mode.

◆ Rescore() [1/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
double mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::Rescore ( const size_t  queryIndex,
TreeType &  referenceNode,
const double  oldScore 
) const
inline

Re-evaluate the score for recursion order.

A low score indicates priority for recursion, while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned). This is used when the score has already been calculated, but another recursion may have modified the bounds for pruning. So the old score is checked against the new pruning bound.

Parameters
queryIndexIndex of query point.
referenceNodeCandidate node to be recursed into.
oldScoreOld score produced by Score() (or Rescore()).

◆ Rescore() [2/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
double mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::Rescore ( TreeType &  queryNode,
TreeType &  referenceNode,
const double  oldScore 
) const
inline

Re-evaluate the score for recursion order.

A low score indicates priority for recursion, while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned). This is used when the score has already been calculated, but another recursion may have modified the bounds for pruning. So the old score is checked against the new pruning bound.

Parameters
queryNodeCandidate query node to recurse into.
referenceNodeCandidate reference node to recurse into.
oldScoreOld score produced by Socre() (or Rescore()).

◆ Score() [1/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
double mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::Score ( const size_t  queryIndex,
TreeType &  referenceNode 
)
inline

Get the score for recursion order.

A low score indicates priority for recursion, while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned).

Parameters
queryIndexIndex of query point.
referenceNodeCandidate node to be recursed into.

◆ Score() [2/2]

template<typename SortPolicy , typename MetricType , typename TreeType >
double mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::Score ( TreeType &  queryNode,
TreeType &  referenceNode 
)
inline

Get the score for recursion order.

A low score indicates priority for recursionm while DBL_MAX indicates that the node should not be recursed into at all (it should be pruned).

Parameters
queryNodeCandidate query node to recurse into.
referenceNodeCandidate reference node to recurse into.

Member Data Documentation

◆ traversalInfo

template<typename SortPolicy , typename MetricType , typename TreeType >
TraversalInfoType mlpack::neighbor::NeighborSearchRules< SortPolicy, MetricType, TreeType >::traversalInfo
protected

Traversal info for the parent combination; this is updated by the traversal before each call to Score().


The documentation for this class was generated from the following files: