[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