fastmks_rules.hpp
Go to the documentation of this file.00001
00022 #ifndef __MLPACK_METHODS_FASTMKS_FASTMKS_RULES_HPP
00023 #define __MLPACK_METHODS_FASTMKS_FASTMKS_RULES_HPP
00024
00025 #include <mlpack/core.hpp>
00026 #include <mlpack/core/tree/cover_tree/cover_tree.hpp>
00027
00028 namespace mlpack {
00029 namespace fastmks {
00030
00034 template<typename KernelType, typename TreeType>
00035 class FastMKSRules
00036 {
00037 public:
00038 FastMKSRules(const arma::mat& referenceSet,
00039 const arma::mat& querySet,
00040 arma::Mat<size_t>& indices,
00041 arma::mat& products,
00042 KernelType& kernel);
00043
00045 double BaseCase(const size_t queryIndex, const size_t referenceIndex);
00046
00055 double Score(const size_t queryIndex, TreeType& referenceNode);
00056
00065 double Score(TreeType& queryNode, TreeType& referenceNode);
00066
00078 double Rescore(const size_t queryIndex,
00079 TreeType& referenceNode,
00080 const double oldScore) const;
00081
00093 double Rescore(TreeType& queryNode,
00094 TreeType& referenceNode,
00095 const double oldScore) const;
00096
00098 size_t BaseCases() const { return baseCases; }
00100 size_t& BaseCases() { return baseCases; }
00101
00103 size_t Scores() const { return scores; }
00105 size_t& Scores() { return scores; }
00106
00107 private:
00109 const arma::mat& referenceSet;
00111 const arma::mat& querySet;
00112
00114 arma::Mat<size_t>& indices;
00116 arma::mat& products;
00117
00119 arma::vec queryKernels;
00121 arma::vec referenceKernels;
00122
00124 KernelType& kernel;
00125
00127 size_t lastQueryIndex;
00129 size_t lastReferenceIndex;
00131 double lastKernel;
00132
00134 double CalculateBound(TreeType& queryNode) const;
00135
00137 void InsertNeighbor(const size_t queryIndex,
00138 const size_t pos,
00139 const size_t neighbor,
00140 const double distance);
00141
00143 size_t baseCases;
00145 size_t scores;
00146 };
00147
00148 };
00149 };
00150
00151
00152 #include "fastmks_rules_impl.hpp"
00153
00154 #endif