[mlpack-git] master: Added the vantage point tree to RSModel and NSModel. (dbdf3ca)
gitdub at mlpack.org
gitdub at mlpack.org
Mon Aug 8 14:31:12 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/acd81e11579f69e75aa8406b2982328c88cf1fde...1e9f0f39ea4443f0d595c395871ea8c6b27443af
>---------------------------------------------------------------
commit dbdf3ca4ebb753616dbfc1db832aa48bce4099b3
Author: Mikhail Lozhnikov <lozhnikovma at gmail.com>
Date: Sat Jul 16 19:32:14 2016 +0300
Added the vantage point tree to RSModel and NSModel.
>---------------------------------------------------------------
dbdf3ca4ebb753616dbfc1db832aa48bce4099b3
src/mlpack/methods/neighbor_search/kfn_main.cpp | 12 +++++++-----
src/mlpack/methods/neighbor_search/knn_main.cpp | 12 +++++++-----
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 +++++++-----
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/tests/aknn_test.cpp | 16 ++++++++++++----
src/mlpack/tests/knn_test.cpp | 12 ++++++++----
src/mlpack/tests/range_search_test.cpp | 12 ++++++++----
11 files changed, 99 insertions(+), 31 deletions(-)
diff --git a/src/mlpack/methods/neighbor_search/kfn_main.cpp b/src/mlpack/methods/neighbor_search/kfn_main.cpp
index 6adbc56..08cd95f 100644
--- a/src/mlpack/methods/neighbor_search/kfn_main.cpp
+++ b/src/mlpack/methods/neighbor_search/kfn_main.cpp
@@ -62,10 +62,10 @@ PARAM_INT("k", "Number of furthest neighbors to find.", "k", 0);
// The user may specify the type of tree to use, and a few pararmeters for tree
// building.
PARAM_STRING("tree_type", "Type of tree to use: 'kd', 'cover', 'r', 'r-star', "
- "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus'.", "t", "kd");
-PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, R "
- "trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ trees).", "l",
- 20);
+ "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus', 'vp'.", "t", "kd");
+PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, vp "
+ "trees, R trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ "
+ "trees).", "l", 20);
PARAM_FLAG("random_basis", "Before tree-building, project the data onto a "
"random orthogonal basis.", "R");
PARAM_INT("seed", "Random seed (if 0, std::time(NULL) is used).", "s", 0);
@@ -194,10 +194,12 @@ int main(int argc, char *argv[])
tree = KFNModel::R_PLUS_TREE;
else if (treeType == "r-plus-plus")
tree = KFNModel::R_PLUS_PLUS_TREE;
+ else if (treeType == "vp")
+ tree = KFNModel::VP_TREE;
else
Log::Fatal << "Unknown tree type '" << treeType << "'; valid choices are "
<< "'kd', 'cover', 'r', 'r-star', 'x', 'ball', 'hilbert-r', "
- << "'r-plus' and 'r-plus-plus'." << endl;
+ << "'r-plus', 'r-plus-plus' and 'vp'." << endl;
kfn.TreeType() = tree;
kfn.RandomBasis() = randomBasis;
diff --git a/src/mlpack/methods/neighbor_search/knn_main.cpp b/src/mlpack/methods/neighbor_search/knn_main.cpp
index 87bdb32..62fff18 100644
--- a/src/mlpack/methods/neighbor_search/knn_main.cpp
+++ b/src/mlpack/methods/neighbor_search/knn_main.cpp
@@ -63,10 +63,10 @@ PARAM_INT("k", "Number of nearest neighbors to find.", "k", 0);
// The user may specify the type of tree to use, and a few parameters for tree
// building.
PARAM_STRING("tree_type", "Type of tree to use: 'kd', 'cover', 'r', 'r-star', "
- "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus'.", "t", "kd");
-PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, R "
- "trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ trees).", "l",
- 20);
+ "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus', 'vp'.", "t", "kd");
+PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, vp "
+ "trees, R trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ "
+ "trees).", "l", 20);
PARAM_FLAG("random_basis", "Before tree-building, project the data onto a "
"random orthogonal basis.", "R");
PARAM_INT("seed", "Random seed (if 0, std::time(NULL) is used).", "s", 0);
@@ -179,10 +179,12 @@ int main(int argc, char *argv[])
tree = KNNModel::R_PLUS_TREE;
else if (treeType == "r-plus-plus")
tree = KNNModel::R_PLUS_PLUS_TREE;
+ else if (treeType == "vp")
+ tree = KNNModel::VP_TREE;
else
Log::Fatal << "Unknown tree type '" << treeType << "'; valid choices are "
<< "'kd', 'cover', 'r', 'r-star', 'x', 'ball', 'hilbert-r', "
- << "'r-plus' and 'r-plus-plus'." << endl;
+ << "'r-plus', 'r-plus-plus' and 'vp'." << endl;
knn.TreeType() = tree;
knn.RandomBasis() = randomBasis;
diff --git a/src/mlpack/methods/neighbor_search/ns_model.hpp b/src/mlpack/methods/neighbor_search/ns_model.hpp
index 38e4748..fc782fe 100644
--- a/src/mlpack/methods/neighbor_search/ns_model.hpp
+++ b/src/mlpack/methods/neighbor_search/ns_model.hpp
@@ -13,6 +13,7 @@
#include <mlpack/core/tree/binary_space_tree.hpp>
#include <mlpack/core/tree/cover_tree.hpp>
#include <mlpack/core/tree/rectangle_tree.hpp>
+#include <mlpack/core/tree/vantage_point_tree.hpp>
#include <boost/variant.hpp>
#include "neighbor_search.hpp"
@@ -256,7 +257,8 @@ class NSModel
X_TREE,
HILBERT_R_TREE,
R_PLUS_TREE,
- R_PLUS_PLUS_TREE
+ R_PLUS_PLUS_TREE,
+ VP_TREE
};
private:
@@ -284,7 +286,8 @@ class NSModel
NSType<SortPolicy, tree::XTree>*,
NSType<SortPolicy, tree::HilbertRTree>*,
NSType<SortPolicy, tree::RPlusTree>*,
- NSType<SortPolicy, tree::RPlusPlusTree>*> nSearch;
+ NSType<SortPolicy, tree::RPlusPlusTree>*,
+ NSType<SortPolicy, tree::VPTree>*> nSearch;
public:
/**
diff --git a/src/mlpack/methods/neighbor_search/ns_model_impl.hpp b/src/mlpack/methods/neighbor_search/ns_model_impl.hpp
index acbed6c..2ca8be5 100644
--- a/src/mlpack/methods/neighbor_search/ns_model_impl.hpp
+++ b/src/mlpack/methods/neighbor_search/ns_model_impl.hpp
@@ -394,6 +394,10 @@ void NSModel<SortPolicy>::BuildModel(arma::mat&& referenceSet,
nSearch = new NSType<SortPolicy, tree::RPlusPlusTree>(naive, singleMode,
epsilon);
break;
+ case VP_TREE:
+ nSearch = new NSType<SortPolicy, tree::VPTree>(naive, singleMode,
+ epsilon);
+ break;
}
TrainVisitor<SortPolicy> tn(std::move(referenceSet), leafSize);
@@ -478,6 +482,8 @@ std::string NSModel<SortPolicy>::TreeName() const
return "R+ tree";
case R_PLUS_PLUS_TREE:
return "R++ tree";
+ case VP_TREE:
+ return "Vantage point tree";
default:
return "unknown tree";
}
diff --git a/src/mlpack/methods/range_search/range_search_main.cpp b/src/mlpack/methods/range_search/range_search_main.cpp
index c8ea2a5..4db62f7 100644
--- a/src/mlpack/methods/range_search/range_search_main.cpp
+++ b/src/mlpack/methods/range_search/range_search_main.cpp
@@ -70,10 +70,10 @@ PARAM_DOUBLE("min", "Lower bound in range.", "L", 0.0);
// The user may specify the type of tree to use, and a few parameters for tree
// building.
PARAM_STRING("tree_type", "Type of tree to use: 'kd', 'cover', 'r', 'r-star', "
- "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus'.", "t", "kd");
-PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, R "
- "trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ trees).", "l",
- 20);
+ "'x', 'ball', 'hilbert-r', 'r-plus', 'r-plus-plus', 'vp'.", "t", "kd");
+PARAM_INT("leaf_size", "Leaf size for tree building (used for kd-trees, vp "
+ "trees, R trees, R* trees, X trees, Hilbert R trees, R+ trees and R++ "
+ "trees).", "l", 20);
PARAM_FLAG("random_basis", "Before tree-building, project the data onto a "
"random orthogonal basis.", "R");
PARAM_INT("seed", "Random seed (if 0, std::time(NULL) is used).", "s", 0);
@@ -181,10 +181,12 @@ int main(int argc, char *argv[])
tree = RSModel::R_PLUS_TREE;
else if (treeType == "r-plus-plus")
tree = RSModel::R_PLUS_PLUS_TREE;
+ else if (treeType == "vp")
+ tree = RSModel::VP_TREE;
else
Log::Fatal << "Unknown tree type '" << treeType << "; valid choices are "
<< "'kd', 'cover', 'r', 'r-star', 'x', 'ball', 'hilbert-r', "
- << "'r-plus' and 'r-plus-plus'." << endl;
+ << "'r-plus', 'r-plus-plus' and 'vp'." << endl;
rs.TreeType() = tree;
rs.RandomBasis() = randomBasis;
diff --git a/src/mlpack/methods/range_search/rs_model.cpp b/src/mlpack/methods/range_search/rs_model.cpp
index 1cf3938..10514c6 100644
--- a/src/mlpack/methods/range_search/rs_model.cpp
+++ b/src/mlpack/methods/range_search/rs_model.cpp
@@ -25,7 +25,8 @@ RSModel::RSModel(TreeTypes treeType, bool randomBasis) :
xTreeRS(NULL),
hilbertRTreeRS(NULL),
rPlusTreeRS(NULL),
- rPlusPlusTreeRS(NULL)
+ rPlusPlusTreeRS(NULL),
+ vpTreeRS(NULL)
{
// Nothing to do.
}
@@ -140,6 +141,11 @@ void RSModel::BuildModel(arma::mat&& referenceSet,
rPlusPlusTreeRS = new RSType<tree::RPlusPlusTree>(move(referenceSet), naive,
singleMode);
break;
+
+ case VP_TREE:
+ vpTreeRS = new RSType<tree::VPTree>(move(referenceSet), naive,
+ singleMode);
+ break;
}
if (!naive)
@@ -261,6 +267,10 @@ void RSModel::Search(arma::mat&& querySet,
case R_PLUS_PLUS_TREE:
rPlusPlusTreeRS->Search(querySet, range, neighbors, distances);
break;
+
+ case VP_TREE:
+ vpTreeRS->Search(querySet, range, neighbors, distances);
+ break;
}
}
@@ -315,6 +325,10 @@ void RSModel::Search(const math::Range& range,
case R_PLUS_PLUS_TREE:
rPlusPlusTreeRS->Search(range, neighbors, distances);
break;
+
+ case VP_TREE:
+ vpTreeRS->Search(range, neighbors, distances);
+ break;
}
}
@@ -341,6 +355,8 @@ std::string RSModel::TreeName() const
return "R+ tree";
case R_PLUS_PLUS_TREE:
return "R++ tree";
+ case VP_TREE:
+ return "Vantage point tree";
default:
return "unknown tree";
}
@@ -367,6 +383,8 @@ void RSModel::CleanMemory()
delete rPlusTreeRS;
if (rPlusPlusTreeRS)
delete rPlusPlusTreeRS;
+ if (vpTreeRS)
+ delete vpTreeRS;
kdTreeRS = NULL;
coverTreeRS = NULL;
@@ -377,4 +395,5 @@ void RSModel::CleanMemory()
hilbertRTreeRS = NULL;
rPlusTreeRS = NULL;
rPlusPlusTreeRS = NULL;
+ vpTreeRS = NULL;
}
diff --git a/src/mlpack/methods/range_search/rs_model.hpp b/src/mlpack/methods/range_search/rs_model.hpp
index 7903d37..8c7af3b 100644
--- a/src/mlpack/methods/range_search/rs_model.hpp
+++ b/src/mlpack/methods/range_search/rs_model.hpp
@@ -13,6 +13,7 @@
#include <mlpack/core/tree/binary_space_tree.hpp>
#include <mlpack/core/tree/cover_tree.hpp>
#include <mlpack/core/tree/rectangle_tree.hpp>
+#include <mlpack/core/tree/vantage_point_tree.hpp>
#include "range_search.hpp"
@@ -32,7 +33,8 @@ class RSModel
X_TREE,
HILBERT_R_TREE,
R_PLUS_TREE,
- R_PLUS_PLUS_TREE
+ R_PLUS_PLUS_TREE,
+ VP_TREE
};
private:
@@ -69,6 +71,8 @@ class RSModel
RSType<tree::RPlusTree>* rPlusTreeRS;
//! R++ tree based range search object (NULL if not in use).
RSType<tree::RPlusPlusTree>* rPlusPlusTreeRS;
+ //! VP tree based range search object (NULL if not in use).
+ RSType<tree::VPTree>* vpTreeRS;
public:
/**
diff --git a/src/mlpack/methods/range_search/rs_model_impl.hpp b/src/mlpack/methods/range_search/rs_model_impl.hpp
index 98fa7a8..fbc6580 100644
--- a/src/mlpack/methods/range_search/rs_model_impl.hpp
+++ b/src/mlpack/methods/range_search/rs_model_impl.hpp
@@ -65,6 +65,10 @@ void RSModel::Serialize(Archive& ar, const unsigned int /* version */)
case R_PLUS_PLUS_TREE:
ar & CreateNVP(rPlusPlusTreeRS, "range_search_model");
break;
+
+ case VP_TREE:
+ ar & CreateNVP(vpTreeRS, "range_search_model");
+ break;
}
}
@@ -88,6 +92,8 @@ inline const arma::mat& RSModel::Dataset() const
return rPlusTreeRS->ReferenceSet();
else if (rPlusPlusTreeRS)
return rPlusPlusTreeRS->ReferenceSet();
+ else if (vpTreeRS)
+ return vpTreeRS->ReferenceSet();
throw std::runtime_error("no range search model initialized");
}
@@ -112,6 +118,8 @@ inline bool RSModel::SingleMode() const
return rPlusTreeRS->SingleMode();
else if (rPlusPlusTreeRS)
return rPlusPlusTreeRS->SingleMode();
+ else if (vpTreeRS)
+ return vpTreeRS->SingleMode();
throw std::runtime_error("no range search model initialized");
}
@@ -136,6 +144,8 @@ inline bool& RSModel::SingleMode()
return rPlusTreeRS->SingleMode();
else if (rPlusPlusTreeRS)
return rPlusPlusTreeRS->SingleMode();
+ else if (vpTreeRS)
+ return vpTreeRS->SingleMode();
throw std::runtime_error("no range search model initialized");
}
@@ -160,6 +170,8 @@ inline bool RSModel::Naive() const
return rPlusTreeRS->Naive();
else if (rPlusPlusTreeRS)
return rPlusPlusTreeRS->Naive();
+ else if (vpTreeRS)
+ return vpTreeRS->Naive();
throw std::runtime_error("no range search model initialized");
}
@@ -184,6 +196,8 @@ inline bool& RSModel::Naive()
return rPlusTreeRS->Naive();
else if (rPlusPlusTreeRS)
return rPlusPlusTreeRS->Naive();
+ else if (vpTreeRS)
+ return vpTreeRS->Naive();
throw std::runtime_error("no range search model initialized");
}
diff --git a/src/mlpack/tests/aknn_test.cpp b/src/mlpack/tests/aknn_test.cpp
index f38978d..98466b4 100644
--- a/src/mlpack/tests/aknn_test.cpp
+++ b/src/mlpack/tests/aknn_test.cpp
@@ -287,7 +287,7 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- KNNModel models[14];
+ KNNModel models[20];
models[0] = KNNModel(KNNModel::TreeTypes::KD_TREE, true);
models[1] = KNNModel(KNNModel::TreeTypes::KD_TREE, false);
models[2] = KNNModel(KNNModel::TreeTypes::COVER_TREE, true);
@@ -302,6 +302,12 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
models[11] = KNNModel(KNNModel::TreeTypes::BALL_TREE, false);
models[12] = KNNModel(KNNModel::TreeTypes::HILBERT_R_TREE, true);
models[13] = KNNModel(KNNModel::TreeTypes::HILBERT_R_TREE, false);
+ models[14] = KNNModel(KNNModel::TreeTypes::R_PLUS_TREE, true);
+ models[15] = KNNModel(KNNModel::TreeTypes::R_PLUS_TREE, false);
+ models[16] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, true);
+ models[17] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = KNNModel(KNNModel::TreeTypes::VP_TREE, true);
+ models[19] = KNNModel(KNNModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 3; ++j)
{
@@ -311,7 +317,7 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
arma::mat distancesExact;
aknn.Search(queryData, 3, neighborsExact, distancesExact);
- for (size_t i = 0; i < 14; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have std::move() constructors so make a copy of our data.
arma::mat referenceCopy(referenceData);
@@ -352,7 +358,7 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- KNNModel models[18];
+ KNNModel models[20];
models[0] = KNNModel(KNNModel::TreeTypes::KD_TREE, true);
models[1] = KNNModel(KNNModel::TreeTypes::KD_TREE, false);
models[2] = KNNModel(KNNModel::TreeTypes::COVER_TREE, true);
@@ -371,6 +377,8 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
models[15] = KNNModel(KNNModel::TreeTypes::R_PLUS_TREE, false);
models[16] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, true);
models[17] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = KNNModel(KNNModel::TreeTypes::VP_TREE, true);
+ models[19] = KNNModel(KNNModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 2; ++j)
{
@@ -380,7 +388,7 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
arma::mat distancesExact;
exact.Search(3, neighborsExact, distancesExact);
- for (size_t i = 0; i < 18; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have a std::move() constructor... so copy the data.
arma::mat referenceCopy(referenceData);
diff --git a/src/mlpack/tests/knn_test.cpp b/src/mlpack/tests/knn_test.cpp
index 0de22b8..ffb6412 100644
--- a/src/mlpack/tests/knn_test.cpp
+++ b/src/mlpack/tests/knn_test.cpp
@@ -977,7 +977,7 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- KNNModel models[18];
+ KNNModel models[20];
models[0] = KNNModel(KNNModel::TreeTypes::KD_TREE, true);
models[1] = KNNModel(KNNModel::TreeTypes::KD_TREE, false);
models[2] = KNNModel(KNNModel::TreeTypes::COVER_TREE, true);
@@ -996,6 +996,8 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
models[15] = KNNModel(KNNModel::TreeTypes::R_PLUS_TREE, false);
models[16] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, true);
models[17] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = KNNModel(KNNModel::TreeTypes::VP_TREE, true);
+ models[19] = KNNModel(KNNModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 2; ++j)
{
@@ -1005,7 +1007,7 @@ BOOST_AUTO_TEST_CASE(KNNModelTest)
arma::mat baselineDistances;
knn.Search(queryData, 3, baselineNeighbors, baselineDistances);
- for (size_t i = 0; i < 18; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have std::move() constructors so make a copy of our data.
arma::mat referenceCopy(referenceData);
@@ -1049,7 +1051,7 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- KNNModel models[18];
+ KNNModel models[20];
models[0] = KNNModel(KNNModel::TreeTypes::KD_TREE, true);
models[1] = KNNModel(KNNModel::TreeTypes::KD_TREE, false);
models[2] = KNNModel(KNNModel::TreeTypes::COVER_TREE, true);
@@ -1068,6 +1070,8 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
models[15] = KNNModel(KNNModel::TreeTypes::R_PLUS_TREE, false);
models[16] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, true);
models[17] = KNNModel(KNNModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = KNNModel(KNNModel::TreeTypes::VP_TREE, true);
+ models[19] = KNNModel(KNNModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 2; ++j)
{
@@ -1077,7 +1081,7 @@ BOOST_AUTO_TEST_CASE(KNNModelMonochromaticTest)
arma::mat baselineDistances;
knn.Search(3, baselineNeighbors, baselineDistances);
- for (size_t i = 0; i < 18; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have a std::move() constructor... so copy the data.
arma::mat referenceCopy(referenceData);
diff --git a/src/mlpack/tests/range_search_test.cpp b/src/mlpack/tests/range_search_test.cpp
index 7f28f2e..037f593 100644
--- a/src/mlpack/tests/range_search_test.cpp
+++ b/src/mlpack/tests/range_search_test.cpp
@@ -1249,7 +1249,7 @@ BOOST_AUTO_TEST_CASE(RSModelTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- RSModel models[18];
+ RSModel models[20];
models[0] = RSModel(RSModel::TreeTypes::KD_TREE, true);
models[1] = RSModel(RSModel::TreeTypes::KD_TREE, false);
models[2] = RSModel(RSModel::TreeTypes::COVER_TREE, true);
@@ -1268,6 +1268,8 @@ BOOST_AUTO_TEST_CASE(RSModelTest)
models[15] = RSModel(RSModel::TreeTypes::R_PLUS_TREE, false);
models[16] = RSModel(RSModel::TreeTypes::R_PLUS_PLUS_TREE, true);
models[17] = RSModel(RSModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = RSModel(RSModel::TreeTypes::VP_TREE, true);
+ models[19] = RSModel(RSModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 2; ++j)
{
@@ -1281,7 +1283,7 @@ BOOST_AUTO_TEST_CASE(RSModelTest)
vector<vector<pair<double, size_t>>> baselineSorted;
SortResults(baselineNeighbors, baselineDistances, baselineSorted);
- for (size_t i = 0; i < 18; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have std::move() constructors, so make a copy of our data.
arma::mat referenceCopy(referenceData);
@@ -1325,7 +1327,7 @@ BOOST_AUTO_TEST_CASE(RSModelMonochromaticTest)
arma::mat referenceData = arma::randu<arma::mat>(10, 200);
// Build all the possible models.
- RSModel models[18];
+ RSModel models[20];
models[0] = RSModel(RSModel::TreeTypes::KD_TREE, true);
models[1] = RSModel(RSModel::TreeTypes::KD_TREE, false);
models[2] = RSModel(RSModel::TreeTypes::COVER_TREE, true);
@@ -1344,6 +1346,8 @@ BOOST_AUTO_TEST_CASE(RSModelMonochromaticTest)
models[15] = RSModel(RSModel::TreeTypes::R_PLUS_TREE, false);
models[16] = RSModel(RSModel::TreeTypes::R_PLUS_PLUS_TREE, true);
models[17] = RSModel(RSModel::TreeTypes::R_PLUS_PLUS_TREE, false);
+ models[18] = RSModel(RSModel::TreeTypes::VP_TREE, true);
+ models[19] = RSModel(RSModel::TreeTypes::VP_TREE, false);
for (size_t j = 0; j < 2; ++j)
{
@@ -1356,7 +1360,7 @@ BOOST_AUTO_TEST_CASE(RSModelMonochromaticTest)
vector<vector<pair<double, size_t>>> baselineSorted;
SortResults(baselineNeighbors, baselineDistances, baselineSorted);
- for (size_t i = 0; i < 18; ++i)
+ for (size_t i = 0; i < 20; ++i)
{
// We only have std::move() cosntructors, so make a copy of our data.
arma::mat referenceCopy(referenceData);
More information about the mlpack-git
mailing list