[mlpack-git] master: Add approximate knn search tests for hybrid spill trees. (7bd4416)
gitdub at mlpack.org
gitdub at mlpack.org
Thu Aug 18 13:39:19 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/0f4b25acd6aaa14294c044874ba6cc0751712baa...0a19d07bd39e6223991976474bc79671ba8aa0f0
>---------------------------------------------------------------
commit 7bd4416d466904e907bcba2ecc97e7c9f5d04760
Author: MarcosPividori <marcos.pividori at gmail.com>
Date: Sat Jul 16 12:51:21 2016 -0300
Add approximate knn search tests for hybrid spill trees.
>---------------------------------------------------------------
7bd4416d466904e907bcba2ecc97e7c9f5d04760
src/mlpack/tests/aknn_test.cpp | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/src/mlpack/tests/aknn_test.cpp b/src/mlpack/tests/aknn_test.cpp
index f38978d..b8db91f 100644
--- a/src/mlpack/tests/aknn_test.cpp
+++ b/src/mlpack/tests/aknn_test.cpp
@@ -242,6 +242,47 @@ BOOST_AUTO_TEST_CASE(DualBallTreeTest)
}
/**
+ * Test the spill tree hybrid sp-tree search (defeatist search on overlapping
+ * nodes, and backtracking in non-overlapping nodes) against the naive method.
+ * This uses only a random reference dataset.
+ *
+ * Errors are produced if the results are not according to relative error.
+ */
+BOOST_AUTO_TEST_CASE(SingleSpillTreeTest)
+{
+ arma::mat dataset;
+ dataset.randu(50, 300); // 50 dimensional, 300 points.
+
+ const size_t k = 3;
+
+ KNN exact(dataset);
+ arma::Mat<size_t> neighborsExact;
+ arma::mat distancesExact;
+ exact.Search(dataset, k, neighborsExact, distancesExact);
+
+ double max_dist = 0;
+ for (size_t i = 0; i < neighborsExact.n_cols; ++i)
+ if (distancesExact(k - 1, i) > max_dist)
+ max_dist = distancesExact(k - 1, i);
+
+ // If we are sure that tau is a valid upper bound of the kth nearest neighbor
+ // of the query points, then we can be sure that we will satisfy the
+ // requirements on the relative error.
+ SPTree<EuclideanDistance, NeighborSearchStat<NearestNeighborSort>, arma::mat>
+ referenceTree(dataset, max_dist * 1.01 /* tau parameter */);
+
+ NeighborSearch<NearestNeighborSort, EuclideanDistance, arma::mat, SPTree>
+ spTreeSearch(&referenceTree, true, 0.05);
+
+ arma::Mat<size_t> neighborsSPTree;
+ arma::mat distancesSPTree;
+ spTreeSearch.Search(dataset, k, neighborsSPTree, distancesSPTree);
+
+ for (size_t i = 0; i < neighborsSPTree.n_elem; ++i)
+ REQUIRE_RELATIVE_ERR(distancesSPTree(i), distancesExact(i), 0.05);
+}
+
+/**
* Make sure sparse nearest neighbors works with kd trees.
*/
BOOST_AUTO_TEST_CASE(SparseKNNKDTreeTest)
More information about the mlpack-git
mailing list