[mlpack-svn] r12619 - mlpack/trunk/src/mlpack/tests

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Thu May 3 20:15:10 EDT 2012


Author: rcurtin
Date: 2012-05-03 20:15:10 -0400 (Thu, 03 May 2012)
New Revision: 12619

Modified:
   mlpack/trunk/src/mlpack/tests/allknn_test.cpp
Log:
Fix some formatting and style issues, and then add a test for nearest-neighbors
cover tree.


Modified: mlpack/trunk/src/mlpack/tests/allknn_test.cpp
===================================================================
--- mlpack/trunk/src/mlpack/tests/allknn_test.cpp	2012-05-04 00:14:44 UTC (rev 12618)
+++ mlpack/trunk/src/mlpack/tests/allknn_test.cpp	2012-05-04 00:15:10 UTC (rev 12619)
@@ -1,10 +1,11 @@
 /**
- * @file allknn_test.cpp
+ * @file allknntest.cpp
  *
  * Test file for AllkNN class.
  */
 #include <mlpack/core.hpp>
 #include <mlpack/methods/neighbor_search/neighbor_search.hpp>
+#include <mlpack/core/tree/cover_tree.hpp>
 #include <boost/test/unit_test.hpp>
 #include "old_boost_test_definitions.hpp"
 
@@ -321,29 +322,29 @@
  */
 BOOST_AUTO_TEST_CASE(DualTreeVsNaive1)
 {
-  arma::mat dataForTree_;
+  arma::mat dataForTree;
 
   // Hard-coded filename: bad!
-  if (!data::Load("test_data_3_1000.csv", dataForTree_))
+  if (!data::Load("test_data_3_1000.csv", dataForTree))
     BOOST_FAIL("Cannot load test dataset test_data_3_1000.csv!");
 
   // Set up matrices to work with.
-  arma::mat dualQuery(dataForTree_);
-  arma::mat dual_references(dataForTree_);
-  arma::mat naiveQuery(dataForTree_);
-  arma::mat naive_references(dataForTree_);
+  arma::mat dualQuery(dataForTree);
+  arma::mat dualReferences(dataForTree);
+  arma::mat naiveQuery(dataForTree);
+  arma::mat naiveReferences(dataForTree);
 
-  AllkNN allknn_(dualQuery, dual_references);
+  AllkNN allknn(dualQuery, dualReferences);
 
-  AllkNN naive_(naiveQuery, naive_references, true);
+  AllkNN naive(naiveQuery, naiveReferences, true);
 
   arma::Mat<size_t> resultingNeighborsTree;
   arma::mat distancesTree;
-  allknn_.Search(15, resultingNeighborsTree, distancesTree);
+  allknn.Search(15, resultingNeighborsTree, distancesTree);
 
   arma::Mat<size_t> resultingNeighborsNaive;
   arma::mat distancesNaive;
-  naive_.Search(15, resultingNeighborsNaive, distancesNaive);
+  naive.Search(15, resultingNeighborsNaive, distancesNaive);
 
   for (size_t i = 0; i < resultingNeighborsTree.n_elem; i++)
   {
@@ -360,29 +361,29 @@
  */
 BOOST_AUTO_TEST_CASE(DualTreeVsNaive2)
 {
-  arma::mat dataForTree_;
+  arma::mat dataForTree;
 
   // Hard-coded filename: bad!
   // Code duplication: also bad!
-  if (!data::Load("test_data_3_1000.csv", dataForTree_))
+  if (!data::Load("test_data_3_1000.csv", dataForTree))
     BOOST_FAIL("Cannot load test dataset test_data_3_1000.csv!");
 
   // Set up matrices to work with (may not be necessary with no ALIAS_MATRIX?).
-  arma::mat dualQuery(dataForTree_);
-  arma::mat naiveQuery(dataForTree_);
+  arma::mat dualQuery(dataForTree);
+  arma::mat naiveQuery(dataForTree);
 
-  AllkNN allknn_(dualQuery);
+  AllkNN allknn(dualQuery);
 
   // Set naive mode.
-  AllkNN naive_(naiveQuery, true);
+  AllkNN naive(naiveQuery, true);
 
   arma::Mat<size_t> resultingNeighborsTree;
   arma::mat distancesTree;
-  allknn_.Search(15, resultingNeighborsTree, distancesTree);
+  allknn.Search(15, resultingNeighborsTree, distancesTree);
 
   arma::Mat<size_t> resultingNeighborsNaive;
   arma::mat distancesNaive;
-  naive_.Search(15, resultingNeighborsNaive, distancesNaive);
+  naive.Search(15, resultingNeighborsNaive, distancesNaive);
 
   for (size_t i = 0; i < resultingNeighborsTree.n_elem; i++)
   {
@@ -399,29 +400,29 @@
  */
 BOOST_AUTO_TEST_CASE(SingleTreeVsNaive)
 {
-  arma::mat dataForTree_;
+  arma::mat dataForTree;
 
   // Hard-coded filename: bad!
   // Code duplication: also bad!
-  if (!data::Load("test_data_3_1000.csv", dataForTree_))
+  if (!data::Load("test_data_3_1000.csv", dataForTree))
     BOOST_FAIL("Cannot load test dataset test_data_3_1000.csv!");
 
   // Set up matrices to work with (may not be necessary with no ALIAS_MATRIX?).
-  arma::mat singleQuery(dataForTree_);
-  arma::mat naiveQuery(dataForTree_);
+  arma::mat singleQuery(dataForTree);
+  arma::mat naiveQuery(dataForTree);
 
-  AllkNN allknn_(singleQuery, false, true);
+  AllkNN allknn(singleQuery, false, true);
 
   // Set up computation for naive mode.
-  AllkNN naive_(naiveQuery, true);
+  AllkNN naive(naiveQuery, true);
 
   arma::Mat<size_t> resultingNeighborsTree;
   arma::mat distancesTree;
-  allknn_.Search(15, resultingNeighborsTree, distancesTree);
+  allknn.Search(15, resultingNeighborsTree, distancesTree);
 
   arma::Mat<size_t> resultingNeighborsNaive;
   arma::mat distancesNaive;
-  naive_.Search(15, resultingNeighborsNaive, distancesNaive);
+  naive.Search(15, resultingNeighborsNaive, distancesNaive);
 
   for (size_t i = 0; i < resultingNeighborsTree.n_elem; i++)
   {
@@ -430,4 +431,44 @@
   }
 }
 
+/**
+ * Test the cover tree single-tree nearest-neighbors method against the naive
+ * method.  This uses only a random reference dataset.
+ *
+ * Errors are produced if the results are not identical.
+ */
+BOOST_AUTO_TEST_CASE(SingleCoverTreeTest)
+{
+  arma::mat data;
+  data.randu(75, 1000); // 75 dimensional, 1000 points.
+
+  arma::mat naiveQuery(data); // For naive AllkNN.
+
+  tree::CoverTree<metric::LMetric<2>, tree::FirstPointIsRoot,
+      QueryStat<NearestNeighborSort> > tree = tree::CoverTree<
+      metric::LMetric<2>, tree::FirstPointIsRoot,
+      QueryStat<NearestNeighborSort> >(data);
+
+  NeighborSearch<NearestNeighborSort, metric::LMetric<2>,
+      tree::CoverTree<metric::LMetric<2>, tree::FirstPointIsRoot,
+          QueryStat<NearestNeighborSort> > >
+      coverTreeSearch(&tree, data, true);
+
+  AllkNN naive(naiveQuery, true);
+
+  arma::Mat<size_t> coverTreeNeighbors;
+  arma::mat coverTreeDistances;
+  coverTreeSearch.Search(15, coverTreeNeighbors, coverTreeDistances);
+
+  arma::Mat<size_t> naiveNeighbors;
+  arma::mat naiveDistances;
+  naive.Search(15, naiveNeighbors, naiveDistances);
+
+  for (size_t i = 0; i < coverTreeNeighbors.n_elem; ++i)
+  {
+    BOOST_REQUIRE_EQUAL(coverTreeNeighbors[i], naiveNeighbors[i]);
+    BOOST_REQUIRE_CLOSE(coverTreeDistances[i], naiveDistances[i], 1e-5);
+  }
+}
+
 BOOST_AUTO_TEST_SUITE_END();




More information about the mlpack-svn mailing list