[mlpack-git] master: Merge pull request #708 from lozhnikov/vptrees (1e9f0f3)
gitdub at mlpack.org
gitdub at mlpack.org
Mon Aug 8 14:27:29 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/acd81e11579f69e75aa8406b2982328c88cf1fde...1e9f0f39ea4443f0d595c395871ea8c6b27443af
>---------------------------------------------------------------
commit 1e9f0f39ea4443f0d595c395871ea8c6b27443af
Merge: acd81e1 add74d0
Author: Ryan Curtin <ryan at ratml.org>
Date: Mon Aug 8 14:27:29 2016 -0400
Merge pull request #708 from lozhnikov/vptrees
Vantage point tree
>---------------------------------------------------------------
1e9f0f39ea4443f0d595c395871ea8c6b27443af
src/mlpack/core/math/random.hpp | 38 ++
src/mlpack/core/tree/CMakeLists.txt | 13 +
src/mlpack/core/tree/ballbound_impl.hpp | 2 -
src/mlpack/core/tree/binary_space_tree/traits.hpp | 7 +
src/mlpack/core/tree/bounds.hpp | 1 +
src/mlpack/core/tree/cover_tree/traits.hpp | 6 +
.../tree/{ballbound.hpp => hollow_ball_bound.hpp} | 125 +++---
src/mlpack/core/tree/hollow_ball_bound_impl.hpp | 380 ++++++++++++++++
src/mlpack/core/tree/hrectbound_impl.hpp | 2 -
src/mlpack/core/tree/rectangle_tree/traits.hpp | 12 +
src/mlpack/core/tree/tree_traits.hpp | 8 +-
src/mlpack/core/tree/vantage_point_tree.hpp | 21 +
.../dual_tree_traverser.hpp | 34 +-
.../dual_tree_traverser_impl.hpp | 237 ++++++++++
.../single_tree_traverser.hpp | 18 +-
.../single_tree_traverser_impl.hpp | 113 +++++
src/mlpack/core/tree/vantage_point_tree/traits.hpp | 66 +++
.../core/tree/vantage_point_tree/typedef.hpp | 76 ++++
.../vantage_point_tree/vantage_point_split.hpp | 145 ++++++
.../vantage_point_split_impl.hpp | 233 ++++++++++
.../vantage_point_tree.hpp} | 217 ++++-----
.../vantage_point_tree_impl.hpp} | 490 ++++++++++++---------
src/mlpack/methods/neighbor_search/kfn_main.cpp | 12 +-
src/mlpack/methods/neighbor_search/knn_main.cpp | 12 +-
.../neighbor_search/neighbor_search_rules_impl.hpp | 53 ++-
src/mlpack/methods/neighbor_search/ns_model.hpp | 7 +-
.../methods/neighbor_search/ns_model_impl.hpp | 6 +
.../methods/range_search/range_search_main.cpp | 12 +-
.../range_search/range_search_rules_impl.hpp | 42 +-
src/mlpack/methods/range_search/rs_model.cpp | 21 +-
src/mlpack/methods/range_search/rs_model.hpp | 6 +-
src/mlpack/methods/range_search/rs_model_impl.hpp | 14 +
src/mlpack/methods/rann/ra_search_impl.hpp | 4 +-
src/mlpack/methods/rann/ra_search_rules_impl.hpp | 46 +-
src/mlpack/methods/rann/ra_util.cpp | 16 -
src/mlpack/tests/CMakeLists.txt | 1 +
src/mlpack/tests/aknn_test.cpp | 16 +-
src/mlpack/tests/knn_test.cpp | 12 +-
src/mlpack/tests/range_search_test.cpp | 12 +-
src/mlpack/tests/vantage_point_tree_test.cpp | 337 ++++++++++++++
40 files changed, 2401 insertions(+), 472 deletions(-)
diff --cc src/mlpack/methods/rann/ra_search_rules_impl.hpp
index 9a886db,2273940..ae13d5b
--- a/src/mlpack/methods/rann/ra_search_rules_impl.hpp
+++ b/src/mlpack/methods/rann/ra_search_rules_impl.hpp
@@@ -65,27 -68,13 +65,27 @@@ RASearchRules(const arma::mat& referenc
Log::Info << "Minimum samples required per query: " << numSamplesReqd <<
", sampling ratio: " << samplingRatio << std::endl;
- if (naive) // No tree traversal; just do naive sampling here.
+ // Let's build the list of candidate neighbors for each query point.
+ // It will be initialized with k candidates: (WorstDistance, size_t() - 1)
+ // The list of candidates will be updated when visiting new points with the
+ // BaseCase() method.
+ const Candidate def = std::make_pair(SortPolicy::WorstDistance(),
+ size_t() - 1);
+
+ std::vector<Candidate> vect(k, def);
+ CandidateList pqueue(CandidateCmp(), std::move(vect));
+
+ candidates.reserve(querySet.n_cols);
+ for (size_t i = 0; i < querySet.n_cols; i++)
+ candidates.push_back(pqueue);
+
+ if (naive)// No tree traversal; just do naive sampling here.
{
// Sample enough points.
+ arma::uvec distinctSamples;
for (size_t i = 0; i < querySet.n_cols; ++i)
{
- arma::uvec distinctSamples;
- RAUtil::ObtainDistinctSamples(numSamplesReqd, n, distinctSamples);
+ math::ObtainDistinctSamples(0, n, numSamplesReqd, distinctSamples);
for (size_t j = 0; j < distinctSamples.n_elem; j++)
BaseCase(i, (size_t) distinctSamples[j]);
}
More information about the mlpack-git
mailing list