fastmks.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_METHODS_FASTMKS_FASTMKS_HPP
14 #define MLPACK_METHODS_FASTMKS_FASTMKS_HPP
15 
16 #include <mlpack/prereqs.hpp>
18 #include "fastmks_stat.hpp"
20 #include <queue>
21 
22 namespace mlpack {
23 namespace fastmks {
24 
56 template<
57  typename KernelType,
58  typename MatType = arma::mat,
59  template<typename TreeMetricType,
60  typename TreeStatType,
61  typename TreeMatType> class TreeType = tree::StandardCoverTree
62 >
63 class FastMKS
64 {
65  public:
67  typedef TreeType<metric::IPMetric<KernelType>, FastMKSStat, MatType> Tree;
68 
76  FastMKS(const bool singleMode = false, const bool naive = false);
77 
87  FastMKS(const MatType& referenceSet,
88  const bool singleMode = false,
89  const bool naive = false);
90 
102  FastMKS(const MatType& referenceSet,
103  KernelType& kernel,
104  const bool singleMode = false,
105  const bool naive = false);
106 
118  FastMKS(Tree* referenceTree,
119  const bool singleMode = false);
120 
124  FastMKS(const FastMKS& other);
125 
129  FastMKS(FastMKS&& other);
130 
134  FastMKS& operator=(const FastMKS& other);
135 
137  ~FastMKS();
138 
145  void Train(const MatType& referenceSet);
146 
155  void Train(const MatType& referenceSet, KernelType& kernel);
156 
164  void Train(Tree* referenceTree);
165 
186  void Search(const MatType& querySet,
187  const size_t k,
188  arma::Mat<size_t>& indices,
189  arma::mat& kernels);
190 
213  void Search(Tree* querySet,
214  const size_t k,
215  arma::Mat<size_t>& indices,
216  arma::mat& kernels);
217 
232  void Search(const size_t k,
233  arma::Mat<size_t>& indices,
234  arma::mat& products);
235 
237  const metric::IPMetric<KernelType>& Metric() const { return metric; }
239  metric::IPMetric<KernelType>& Metric() { return metric; }
240 
242  bool SingleMode() const { return singleMode; }
244  bool& SingleMode() { return singleMode; }
245 
247  bool Naive() const { return naive; }
249  bool& Naive() { return naive; }
250 
252  template<typename Archive>
253  void serialize(Archive& ar, const unsigned int /* version */);
254 
255  private:
258  const MatType* referenceSet;
260  Tree* referenceTree;
262  bool treeOwner;
264  bool setOwner;
265 
267  bool singleMode;
269  bool naive;
270 
273 
275  typedef std::pair<double, size_t> Candidate;
276 
278  struct CandidateCmp {
279  bool operator()(const Candidate& c1, const Candidate& c2)
280  {
281  return c1.first > c2.first;
282  };
283  };
284 
286  typedef std::priority_queue<Candidate, std::vector<Candidate>,
287  CandidateCmp> CandidateList;
288 };
289 
290 } // namespace fastmks
291 } // namespace mlpack
292 
293 // Include implementation.
294 #include "fastmks_impl.hpp"
295 
296 #endif
bool SingleMode() const
Get whether or not single-tree search is used.
Definition: fastmks.hpp:242
const metric::IPMetric< KernelType > & Metric() const
Get the inner-product metric induced by the given kernel.
Definition: fastmks.hpp:237
.hpp
Definition: add_to_po.hpp:21
The core includes that mlpack expects; standard C++ includes and Armadillo.
bool & Naive()
Modify whether or not brute-force (naive) search is used.
Definition: fastmks.hpp:249
The inner product metric, IPMetric, takes a given Mercer kernel (KernelType), and when Evaluate() is ...
Definition: ip_metric.hpp:32
FastMKS(const bool singleMode=false, const bool naive=false)
Create the FastMKS object with an empty reference set and default kernel.
~FastMKS()
Destructor for the FastMKS object.
metric::IPMetric< KernelType > & Metric()
Modify the inner-product metric induced by the given kernel.
Definition: fastmks.hpp:239
bool & SingleMode()
Modify whether or not single-tree search is used.
Definition: fastmks.hpp:244
bool Naive() const
Get whether or not brute-force (naive) search is used.
Definition: fastmks.hpp:247
TreeType< metric::IPMetric< KernelType >, FastMKSStat, MatType > Tree
Convenience typedef.
Definition: fastmks.hpp:67
void Search(const MatType &querySet, const size_t k, arma::Mat< size_t > &indices, arma::mat &kernels)
Search for the points in the reference set with maximum kernel evaluation to each point in the given ...
The statistic used in trees with FastMKS.
void Train(const MatType &referenceSet)
"Train" the FastMKS model on the given reference set (this will just build a tree, if the current search mode is not naive mode).
FastMKS & operator=(const FastMKS &other)
Assign this model to be a copy of the given model.
An implementation of fast exact max-kernel search.
Definition: fastmks.hpp:63
A cover tree is a tree specifically designed to speed up nearest-neighbor computation in high-dimensi...
Definition: cover_tree.hpp:99
void serialize(Archive &ar, const unsigned int)
Serialize the model.