[mlpack-git] master: Refactor for non-modifying TreeTypes. (90c67e8)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Wed Jul 29 16:42:03 EDT 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/f8ceffae0613b350f4d6bdd46c6c8633a40b4897...6ee21879488fe98612a4619b17f8b51e8da5215b

>---------------------------------------------------------------

commit 90c67e88bcecc83b558972ff3579448d2c1768e6
Author: ryan <ryan at ratml.org>
Date:   Mon Jul 27 15:05:52 2015 -0400

    Refactor for non-modifying TreeTypes.


>---------------------------------------------------------------

90c67e88bcecc83b558972ff3579448d2c1768e6
 src/mlpack/methods/kmeans/dual_tree_kmeans.hpp        |  7 ++-----
 src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp   | 19 ++++---------------
 src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp     |  7 ++-----
 .../methods/kmeans/pelleg_moore_kmeans_impl.hpp       | 15 +++------------
 4 files changed, 11 insertions(+), 37 deletions(-)

diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans.hpp
index 4da3f08..ac69228 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans.hpp
@@ -71,16 +71,13 @@ class DualTreeKMeans
  private:
   //! The original dataset reference.
   const MatType& datasetOrig; // Maybe not necessary.
+  //! The tree built on the points.
+  Tree* tree;
   //! The dataset we are using.
   const MatType& dataset;
-  //! A copy of the dataset, if necessary.
-  MatType datasetCopy;
   //! The metric.
   MetricType metric;
 
-  //! The tree built on the points.
-  Tree* tree;
-
   //! Track distance calculations.
   size_t distanceCalculations;
   //! Track iteration number.
diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
index 3cee7d3..5e4fbf1 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
@@ -52,8 +52,8 @@ DualTreeKMeans<MetricType, MatType, TreeType>::DualTreeKMeans(
     const MatType& dataset,
     MetricType& metric) :
     datasetOrig(dataset),
-    dataset(tree::TreeTraits<Tree>::RearrangesDataset ? datasetCopy :
-        datasetOrig),
+    tree(new Tree(const_cast<MatType&>(dataset))),
+    dataset(tree->Dataset()),
     metric(metric),
     distanceCalculations(0),
     iteration(0),
@@ -63,17 +63,6 @@ DualTreeKMeans<MetricType, MatType, TreeType>::DualTreeKMeans(
     assignments(dataset.n_cols),
     visited(dataset.n_cols, false) // Fill with false.
 {
-  Timer::Start("tree_building");
-
-  // Copy the dataset, if necessary.
-  if (tree::TreeTraits<Tree>::RearrangesDataset)
-    datasetCopy = datasetOrig;
-
-  // Now build the tree.  We don't need any mappings.
-  tree = new Tree(const_cast<MatType&>(this->dataset));
-
-  Timer::Stop("tree_building");
-
   for (size_t i = 0; i < dataset.n_cols; ++i)
   {
     prunedPoints[i] = false;
@@ -157,8 +146,8 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
   // We won't use the AllkNN class here because we have our own set of rules.
   lastIterationCentroids = oldCentroids;
   typedef DualTreeKMeansRules<MetricType, Tree> RuleType;
-  RuleType rules(centroids, dataset, assignments, upperBounds, lowerBounds,
-      metric, prunedPoints, oldFromNewCentroids, visited);
+  RuleType rules(centroidTree->Dataset(), dataset, assignments, upperBounds,
+      lowerBounds, metric, prunedPoints, oldFromNewCentroids, visited);
 
   typename Tree::template BreadthFirstDualTreeTraverser<RuleType>
       traverser(rules);
diff --git a/src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp b/src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp
index c7ac3f9..a3a155b 100644
--- a/src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp
+++ b/src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp
@@ -71,16 +71,13 @@ class PellegMooreKMeans
  private:
   //! The original dataset reference.
   const MatType& datasetOrig; // Maybe not necessary.
+  //! The tree built on the points.
+  TreeType* tree;
   //! The dataset we are using.
   const MatType& dataset;
-  //! A copy of the dataset, if necessary.
-  MatType datasetCopy;
   //! The metric.
   MetricType& metric;
 
-  //! The tree built on the points.
-  TreeType* tree;
-
   //! Track distance calculations.
   size_t distanceCalculations;
 };
diff --git a/src/mlpack/methods/kmeans/pelleg_moore_kmeans_impl.hpp b/src/mlpack/methods/kmeans/pelleg_moore_kmeans_impl.hpp
index 4309f01..8c61d00 100644
--- a/src/mlpack/methods/kmeans/pelleg_moore_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/pelleg_moore_kmeans_impl.hpp
@@ -19,21 +19,12 @@ PellegMooreKMeans<MetricType, MatType>::PellegMooreKMeans(
     const MatType& dataset,
     MetricType& metric) :
     datasetOrig(dataset),
-    dataset(tree::TreeTraits<TreeType>::RearrangesDataset ? datasetCopy :
-        datasetOrig),
+    tree(new TreeType(const_cast<MatType&>(datasetOrig))),
+    dataset(tree->Dataset()),
     metric(metric),
     distanceCalculations(0)
 {
-  Timer::Start("tree_building");
-
-  // Copy the dataset, if necessary.
-  if (tree::TreeTraits<TreeType>::RearrangesDataset)
-    datasetCopy = datasetOrig;
-
-  // Now build the tree.  We don't need any mappings.
-  tree = new TreeType(const_cast<typename TreeType::Mat&>(this->dataset));
-
-  Timer::Stop("tree_building");
+  // Nothing to do.
 }
 
 template<typename MetricType, typename MatType>



More information about the mlpack-git mailing list