[mlpack-git] master: Refactor to apply mappings earlier. (670a56a)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Thu Mar 12 16:05:10 EDT 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/eddd7167d69b6c88b271ef2e51d1c20e13f1acd8...70342dd8e5c17e0c164cfb8189748671e9c0dd44
>---------------------------------------------------------------
commit 670a56a58f050eb2a34a91028198b4e282a4fc6e
Author: Ryan Curtin <ryan at ratml.org>
Date: Tue Feb 17 14:52:32 2015 -0500
Refactor to apply mappings earlier.
>---------------------------------------------------------------
670a56a58f050eb2a34a91028198b4e282a4fc6e
src/mlpack/methods/kmeans/dtnn_kmeans_impl.hpp | 13 +++----------
src/mlpack/methods/kmeans/dtnn_rules_impl.hpp | 7 +++++--
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/src/mlpack/methods/kmeans/dtnn_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dtnn_kmeans_impl.hpp
index dd6665b..08482f8 100644
--- a/src/mlpack/methods/kmeans/dtnn_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dtnn_kmeans_impl.hpp
@@ -181,9 +181,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::UpdateTree(
if ((node.Stat().Pruned() == clusterDistances.n_elem - 1) &&
(node.Stat().Owner() < clusterDistances.n_elem - 1))
{
- const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
- oldFromNewCentroids[node.Stat().Owner()] :
- node.Stat().Owner();
+ const size_t owner = node.Stat().Owner();
node.Stat().LastUpperBound() = node.Stat().UpperBound() +
clusterDistances[owner];
@@ -211,7 +209,6 @@ void DTNNKMeans<MetricType, MatType, TreeType>::UpdateTree(
}
node.Stat().Pruned() = size_t(-1);
node.Stat().Owner() = size_t(-1);
- node.Stat().LowerBound() = DBL_MAX;
for (size_t i = 0; i < node.NumChildren(); ++i)
UpdateTree(node.Child(i), clusterDistances, oldFromNewCentroids);
@@ -227,9 +224,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::ExtractCentroids(
// Does this node own points?
if (node.Stat().Pruned() == newCentroids.n_cols)
{
- const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
- oldFromNewCentroids[node.Stat().Owner()] :
- node.Stat().Owner();
+ const size_t owner = node.Stat().Owner();
newCentroids.col(owner) += node.Stat().Centroid() * node.NumDescendants();
newCounts[owner] += node.NumDescendants();
}
@@ -241,9 +236,7 @@ void DTNNKMeans<MetricType, MatType, TreeType>::ExtractCentroids(
{
for (size_t i = 0; i < node.NumPoints(); ++i)
{
- const size_t owner = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
- oldFromNewCentroids[assignments[node.Point(i)]] :
- assignments[node.Point(i)];
+ const size_t owner = assignments[node.Point(i)];
newCentroids.col(owner) += dataset.col(node.Point(i));
++newCounts[owner];
}
diff --git a/src/mlpack/methods/kmeans/dtnn_rules_impl.hpp b/src/mlpack/methods/kmeans/dtnn_rules_impl.hpp
index 6a57273..d5268f4 100644
--- a/src/mlpack/methods/kmeans/dtnn_rules_impl.hpp
+++ b/src/mlpack/methods/kmeans/dtnn_rules_impl.hpp
@@ -58,7 +58,8 @@ inline force_inline double DTNNKMeansRules<MetricType, TreeType>::BaseCase(
{
lowerBounds[queryIndex] = upperBounds[queryIndex];
upperBounds[queryIndex] = distance;
- assignments[queryIndex] = referenceIndex;
+ assignments[queryIndex] = (tree::TreeTraits<TreeType>::RearrangesDataset) ?
+ oldFromNewCentroids[referenceIndex] : referenceIndex;
}
else if (distance < lowerBounds[queryIndex])
{
@@ -121,7 +122,9 @@ inline double DTNNKMeansRules<MetricType, TreeType>::Score(
queryNode.Stat().UpperBound() = distances.Hi();
// If this node has only one descendant, then it may be the owner.
if (referenceNode.NumDescendants() == 1)
- queryNode.Stat().Owner() = referenceNode.Descendant(0);
+ queryNode.Stat().Owner() = (tree::TreeTraits<TreeType>::RearrangesDataset)
+ ? oldFromNewCentroids[referenceNode.Descendant(0)]
+ : referenceNode.Descendant(0);
}
// Is everything pruned?
More information about the mlpack-git
mailing list