[mlpack-git] master: Don't accidentally take results before finished. We have to wait until all clusters are pruned, not all except one. (581a4a0)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Thu Mar 12 16:01:45 EDT 2015


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

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/eddd7167d69b6c88b271ef2e51d1c20e13f1acd8...70342dd8e5c17e0c164cfb8189748671e9c0dd44

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

commit 581a4a0deeac979549407fe5e3807ae1c7ea1403
Author: Ryan Curtin <ryan at ratml.org>
Date:   Tue Jan 13 15:52:44 2015 -0500

    Don't accidentally take results before finished. We have to wait until all clusters are pruned, not all except one.


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

581a4a0deeac979549407fe5e3807ae1c7ea1403
 .../methods/kmeans/dual_tree_kmeans_rules_impl.hpp   | 20 ++------------------
 1 file changed, 2 insertions(+), 18 deletions(-)

diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
index 34df556..3208737 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
@@ -131,9 +131,6 @@ double DualTreeKMeansRules<MetricType, TreeType>::Score(
         referenceNode.Parent()->Stat().MaxQueryNodeDistance(),
         referenceNode.Stat().MaxQueryNodeDistance());
   }
-  else if (referenceNode.Parent() != NULL &&
-           referenceNode.Parent()->Stat().ClosestQueryNode() == NULL)
-    Log::Fatal << "wtf\n";
 
   if (maxDistance < referenceNode.Stat().MaxQueryNodeDistance() ||
       referenceNode.Stat().ClosestQueryNode() == NULL)
@@ -155,20 +152,7 @@ double DualTreeKMeansRules<MetricType, TreeType>::Score(
     referenceNode.Stat().ClustersPruned() += queryNode.NumDescendants();
 
     // Have we pruned everything?
-    if (referenceNode.Stat().ClustersPruned() == centroids.n_cols - 1)
-    {
-      // Then the best query node must contain just one point.
-      const TreeType* bestQueryNode = (TreeType*)
-          referenceNode.Stat().ClosestQueryNode();
-      const size_t cluster = mappings[bestQueryNode->Descendant(0)];
-
-      referenceNode.Stat().Owner() = cluster;
-      newCentroids.col(cluster) += referenceNode.NumDescendants() *
-          referenceNode.Stat().Centroid();
-      counts(cluster) += referenceNode.NumDescendants();
-      referenceNode.Stat().ClustersPruned()++;
-    }
-    else if (referenceNode.Stat().ClustersPruned() +
+    if (referenceNode.Stat().ClustersPruned() +
         visited[referenceNode.Descendant(0)] == centroids.n_cols)
     {
       for (size_t i = 0; i < referenceNode.NumDescendants(); ++i)
@@ -221,7 +205,7 @@ double DualTreeKMeansRules<MetricType, TreeType>::ElkanTypeScore(
 {
   // We have to calculate the minimum distance between the query node and the
   // reference node's best query node.  First, try to use the cached distance.
-  const double minQueryDistance = queryNode.Stat().FirstBound();
+//  const double minQueryDistance = queryNode.Stat().FirstBound();
   if (queryNode.NumDescendants() == 1)
   {
     const double score = ElkanTypeScore(queryNode, referenceNode,



More information about the mlpack-git mailing list