[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