[mlpack-svn] r13978 - mlpack/trunk/src/mlpack/core/tree/cover_tree
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Dec 5 10:22:38 EST 2012
Author: rcurtin
Date: 2012-12-05 10:22:38 -0500 (Wed, 05 Dec 2012)
New Revision: 13978
Modified:
mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp
mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
Log:
Try to prune when copying reference maps.
Modified: mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp 2012-12-05 04:39:42 UTC (rev 13977)
+++ mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser.hpp 2012-12-05 15:22:38 UTC (rev 13978)
@@ -56,7 +56,8 @@
size_t numPrunes;
//! Prepare map for recursion.
- void PruneMap(CoverTree& candidateQueryNode,
+ void PruneMap(CoverTree& queryNode,
+ CoverTree& candidateQueryNode,
std::map<int, std::vector<DualCoverTreeMapEntry<
MetricType, RootPointPolicy, StatisticType> > >&
referenceMap,
Modified: mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp 2012-12-05 04:39:42 UTC (rev 13977)
+++ mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp 2012-12-05 15:22:38 UTC (rev 13978)
@@ -103,7 +103,7 @@
for (size_t i = 1; i < queryNode.NumChildren(); ++i)
{
std::map<int, std::vector<MapEntryType> > childMap;
- PruneMap(queryNode.Child(i), referenceMap, childMap);
+ PruneMap(queryNode, queryNode.Child(i), referenceMap, childMap);
// Log::Debug << "Recurse into query child " << i << ": " <<
// queryNode.Child(i).Point() << " scale " << queryNode.Child(i).Scale()
@@ -176,6 +176,7 @@
template<typename RuleType>
void CoverTree<MetricType, RootPointPolicy, StatisticType>::
DualTreeTraverser<RuleType>::PruneMap(
+ CoverTree& queryNode,
CoverTree& candidateQueryNode,
std::map<int, std::vector<DualCoverTreeMapEntry<MetricType,
RootPointPolicy, StatisticType> > >& referenceMap,
@@ -209,12 +210,23 @@
frame.referenceNode;
const double oldScore = frame.score;
+ // Try to prune based on shell(). This is hackish and will need to be
+ // refined or cleaned at some point.
+ double score = rule.PrescoreQ(queryNode, candidateQueryNode, *refNode,
+ frame.baseCase);
+
+ if (score == DBL_MAX)
+ {
+ ++numPrunes;
+ continue;
+ }
+
// Log::Debug << "Recheck reference node " << refNode->Point() <<
// " scale " << refNode->Scale() << " which has old score " <<
// oldScore << " with old reference index " << frame.referenceIndex
// << " and old query index " << frame.queryIndex << std::endl;
- double score = rule.Rescore(candidateQueryNode, *refNode, oldScore);
+ score = rule.Rescore(candidateQueryNode, *refNode, oldScore);
// Log::Debug << "Rescored as " << score << std::endl;
More information about the mlpack-svn
mailing list