[mlpack-git] master: Slightly tighter prune. (bce6482)

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


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

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

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

commit bce6482563336fe3111e79ecb166f39e1fcc0d7d
Author: Ryan Curtin <ryan at ratml.org>
Date:   Thu Jan 29 19:35:12 2015 -0500

    Slightly tighter prune.


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

bce6482563336fe3111e79ecb166f39e1fcc0d7d
 src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp      |  6 +++---
 .../methods/kmeans/dual_tree_kmeans_rules_impl.hpp       | 16 ++++++++++++----
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
index dbefdc9..a2c91b5 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
@@ -42,7 +42,7 @@ DualTreeKMeans<MetricType, MatType, TreeType>::DualTreeKMeans(
     datasetCopy = datasetOrig;
 
   // Now build the tree.  We don't need any mappings.
-  tree = new TreeType(const_cast<typename TreeType::Mat&>(this->dataset), 1);
+  tree = new TreeType(const_cast<typename TreeType::Mat&>(this->dataset), 10);
 
   Timer::Stop("tree_building");
 }
@@ -312,8 +312,8 @@ closest << "!  It's part of node r" << node->Begin() << "c" << node->Count() <<
       else if (node->Stat().MaxQueryNodeDistance() < 0.5 *
           interclusterDistances(0, owner))
       {
-        Log::Warn << "Secondary Elkan prune! r" << node->Begin() << "c" <<
-node->Count() << ".\n";
+//        Log::Warn << "Secondary Elkan prune! r" << node->Begin() << "c" <<
+//node->Count() << ".\n";
         node->Stat().HamerlyPruned() = true;
         if (!node->Parent()->Stat().HamerlyPruned())
           hamerlyPruned += node->NumDescendants();
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 21d526d..403ed69 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
@@ -148,10 +148,18 @@ double DualTreeKMeansRules<MetricType, TreeType>::Score(
   if (distances.Lo() < referenceNode.Stat().MinQueryNodeDistance())
   {
     // This is the new closest node.
-    referenceNode.Stat().SecondMinQueryNodeDistance() =
-        referenceNode.Stat().MinQueryNodeDistance();
-    referenceNode.Stat().SecondMaxQueryNodeDistance() =
-        referenceNode.Stat().MaxQueryNodeDistance();
+    if (queryNode.NumDescendants() >= 2)
+    {
+      referenceNode.Stat().SecondMinQueryNodeDistance() = distances.Lo();
+      referenceNode.Stat().SecondMaxQueryNodeDistance() = distances.Hi();
+    }
+    else
+    {
+      referenceNode.Stat().SecondMinQueryNodeDistance() =
+          referenceNode.Stat().MinQueryNodeDistance();
+      referenceNode.Stat().SecondMaxQueryNodeDistance() =
+          referenceNode.Stat().MaxQueryNodeDistance();
+    }
     referenceNode.Stat().MinQueryNodeDistance() = distances.Lo();
     referenceNode.Stat().MaxQueryNodeDistance() = distances.Hi();
   }



More information about the mlpack-git mailing list