13 #ifndef MLPACK_METHODS_NEIGHBOR_SEARCH_NEIGHBOR_SEARCH_HPP 14 #define MLPACK_METHODS_NEIGHBOR_SEARCH_NEIGHBOR_SEARCH_HPP 34 template<
typename SortPolicy>
71 typename MatType = arma::mat,
72 template<
typename TreeMetricType,
73 typename TreeStatType,
75 template<
typename RuleType>
class DualTreeTraversalType =
78 MatType>::template DualTreeTraverser,
79 template<
typename RuleType>
class SingleTreeTraversalType =
81 NeighborSearchStat<SortPolicy>,
82 MatType>::template SingleTreeTraverser>
87 typedef TreeType<MetricType, NeighborSearchStat<SortPolicy>, MatType>
Tree;
109 const MetricType
metric = MetricType());
131 const MetricType
metric = MetricType());
160 const MetricType
metric = MetricType());
187 Tree&& referenceTree,
190 const MetricType
metric = MetricType());
203 const MetricType
metric = MetricType());
249 void Train(
const MatType& referenceSet);
259 void Train(MatType&& referenceSet);
269 void Train(
const Tree& referenceTree);
278 void Train(Tree&& referenceTree);
297 void Search(
const MatType& querySet,
299 arma::Mat<size_t>& neighbors,
300 arma::mat& distances);
322 void Search(Tree& queryTree,
324 arma::Mat<size_t>& neighbors,
325 arma::mat& distances,
326 bool sameSet =
false);
342 void Search(
const size_t k,
343 arma::Mat<size_t>& neighbors,
344 arma::mat& distances);
362 arma::mat& realDistances);
375 static double Recall(arma::Mat<size_t>& foundNeighbors,
376 arma::Mat<size_t>& realNeighbors);
404 template<
typename Archive>
405 void Serialize(Archive& ar,
const unsigned int );
438 template<
typename SortPol>
446 #include "neighbor_search_impl.hpp"
BinarySpaceTree< MetricType, StatisticType, MatType, bound::HRectBound, MidpointSplit > KDTree
The standard midpoint-split kd-tree.
NeighborSearch(const MatType &referenceSet, const NeighborSearchMode mode=DUAL_TREE_MODE, const double epsilon=0, const MetricType metric=MetricType())
Initialize the NeighborSearch object, passing a reference dataset (this is the dataset which is searc...
double Epsilon() const
Access the relative error to be considered in approximate search.
double & Epsilon()
Modify the relative error to be considered in approximate search.
NeighborSearchMode
NeighborSearchMode represents the different neighbor search modes available.
Linear algebra utility functions, generally performed on matrices or vectors.
~NeighborSearch()
Delete the NeighborSearch object.
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
const MatType * referenceSet
Reference dataset. In some situations we may be the owner of this.
size_t scores
The total number of scores (applicable for non-naive search).
std::vector< size_t > oldFromNewReferences
Permutations of reference points during tree building.
MetricType metric
Instantiation of metric.
Extra data for each node in the tree.
The core includes that mlpack expects; standard C++ includes and Armadillo.
The NeighborSearch class is a template class for performing distance-based neighbor searches...
static double Recall(arma::Mat< size_t > &foundNeighbors, arma::Mat< size_t > &realNeighbors)
Calculate the recall (% of neighbors found) given the list of found neighbors and the true set of nei...
Tree * referenceTree
Pointer to the root of the reference tree.
This class implements the necessary methods for the SortPolicy template parameter of the NeighborSear...
double epsilon
Indicates the relative error to be considered in approximate search.
size_t Scores() const
Return the number of node combination scores during the last search.
size_t BaseCases() const
Return the total number of base case evaluations performed during the last search.
const MatType & ReferenceSet() const
Access the reference dataset.
NeighborSearchMode searchMode
Indicates the neighbor search mode.
bool treeOwner
If true, this object created the trees and is responsible for them.
TrainVisitor sets the reference set to a new reference set on the given NSType.
size_t baseCases
The total number of base cases.
Tree & ReferenceTree()
Modify the reference tree.
static double EffectiveError(arma::mat &foundDistances, arma::mat &realDistances)
Calculate the average relative error (effective error) between the distances calculated and the true ...
TreeType< MetricType, NeighborSearchStat< SortPolicy >, MatType > Tree
Convenience typedef.
NeighborSearch & operator=(const NeighborSearch &other)
Copy the given NeighborSearch object.
NeighborSearchMode & SearchMode()
Modify the search mode.
bool setOwner
If true, we own the reference set.
void Search(const MatType &querySet, const size_t k, arma::Mat< size_t > &neighbors, arma::mat &distances)
For each point in the query set, compute the nearest neighbors and store the output in the given matr...
bool treeNeedsReset
If this is true, the reference tree bounds need to be reset on a call to Search() without a query set...
void Serialize(Archive &ar, const unsigned int)
Serialize the NeighborSearch model.
NeighborSearchMode SearchMode() const
Access the search mode.
const Tree & ReferenceTree() const
Access the reference tree.
void Train(const MatType &referenceSet)
Set the reference set to a new reference set, and build a tree if necessary.