[mlpack-git] master: Remove vestigial code. After all, this code isn't generated by genetic algorithms. (Maybe it should be?) (5a4b15c)

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


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

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

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

commit 5a4b15cf0b09e610c30cfe19ab8423e77aabfd4b
Author: Ryan Curtin <ryan at ratml.org>
Date:   Thu Jan 29 17:20:45 2015 -0500

    Remove vestigial code. After all, this code isn't generated by genetic algorithms. (Maybe it should be?)


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

5a4b15cf0b09e610c30cfe19ab8423e77aabfd4b
 .../methods/kmeans/dual_tree_kmeans_impl.hpp       |  8 --
 .../methods/kmeans/dual_tree_kmeans_rules.hpp      | 45 -----------
 .../methods/kmeans/dual_tree_kmeans_rules_impl.hpp | 90 ----------------------
 3 files changed, 143 deletions(-)

diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
index 27d2fd0..9d31609 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_impl.hpp
@@ -71,9 +71,6 @@ double DualTreeKMeans<MetricType, MatType, TreeType>::Iterate(
   std::vector<size_t> oldFromNewCentroids;
   TreeType* centroidTree = BuildTree<TreeType>(
       const_cast<typename TreeType::Mat&>(centroids), oldFromNewCentroids);
-  for (size_t i = 0; i < oldFromNewCentroids.size(); ++i)
-    Log::Warn << oldFromNewCentroids[i] << " ";
-  Log::Warn << "\n";
 
   // Now calculate distances between centroids.
   neighbor::NeighborSearch<neighbor::NearestNeighborSort, MetricType, TreeType>
@@ -328,11 +325,6 @@ closest << "!  It's part of node r" << node->Begin() << "c" << node->Count() <<
     {
       if (node->Parent() != NULL && node->Parent()->Stat().HamerlyPruned())
       {
-//        Log::Warn << "Extra prune via parent: r" << node->Begin() << "c" <<
-//node->Count() << ".\n";
-        if (node->Stat().Owner() != node->Parent()->Stat().Owner())
-          Log::Fatal << "Holy shit!\n";
-
         node->Stat().HamerlyPruned() = true;
         node->Stat().MinQueryNodeDistance() = DBL_MAX;
       }
diff --git a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules.hpp b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules.hpp
index 8cf4ef5..43d88d8 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules.hpp
@@ -71,51 +71,6 @@ class DualTreeKMeansRules
 
   bool IsDescendantOf(const TreeType& potentialParent, const TreeType&
       potentialChild) const;
-
-  /**
-   * See if a Hamerly-type prune can be performed.  This means that the previous
-   * iteration owner _must_ be the owner during this iteration.
-   *
-   * This is not a function of the query node, so it does not need to be passed.
-   */
-  double HamerlyTypeScore(TreeType& referenceNode);
-
-  /**
-   * See if an Elkan-type prune can be performed.  If so, return DBL_MAX;
-   * otherwise, return a score.  The Elkan-type prune can occur when the minimum
-   * distance between the query node and the current best query node for the
-   * reference node (referenceNode.Stat().ClosestQueryNode()) is greater than
-   * two times the maximum distance between the reference node and the current
-   * best query node (again, referenceNode.Stat().ClosestQueryNode()).
-   *
-   * @param queryNode Query node.
-   * @param referenceNode Reference node.
-   */
-  double ElkanTypeScore(TreeType& queryNode, TreeType& referenceNode);
-
-  /**
-   * See if an Elkan-type prune can be performed.  If so, return DBL_MAX;
-   * otherwise, return a score.  The Elkan-type prune can occur when the minimum
-   * distance between the query node and the current best query node for the
-   * reference node (referenceNode.Stat().ClosestQueryNode()) is greater than
-   * two times the maximum distance between the reference node and the current
-   * best query node (again, referenceNode.Stat().ClosestQueryNode()).
-   *
-   * This particular overload is for when the minimum distance between the query
-   * noed and the current best query node has already been calculated.
-   *
-   * @param queryNode Query node.
-   * @param referenceNode Reference node.
-   * @param minQueryDistance Minimum distance between query node and current
-   *      best query node for the reference node.
-   */
-  double ElkanTypeScore(TreeType& queryNode,
-                        TreeType& referenceNode,
-                        const double minQueryDistance) const;
-
-  double PellegMooreScore(TreeType& /* queryNode */,
-                          TreeType& referenceNode,
-                          const double minDistance) const;
 };
 
 } // namespace kmeans
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 7857d88..04b82ae 100644
--- a/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
+++ b/src/mlpack/methods/kmeans/dual_tree_kmeans_rules_impl.hpp
@@ -216,96 +216,6 @@ bool DualTreeKMeansRules<MetricType, TreeType>::IsDescendantOf(
     return IsDescendantOf(potentialParent, *potentialChild.Parent());
 }
 
-template<typename MetricType, typename TreeType>
-double DualTreeKMeansRules<MetricType, TreeType>::HamerlyTypeScore(
-    TreeType& referenceNode)
-{
-  if (referenceNode.Stat().HamerlyPruned())
-  {
-//    if (referenceNode.Begin() == 26038)
-//      Log::Warn << "Hamerly prune! r" << referenceNode.Begin() << "c" <<
-//referenceNode.Count() << ".\n";
-    return DBL_MAX;
-  }
-
-  return 0.0;
-}
-
-template<typename MetricType, typename TreeType>
-double DualTreeKMeansRules<MetricType, TreeType>::ElkanTypeScore(
-    TreeType& queryNode,
-    TreeType& referenceNode)
-{
-  // 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.
-  if (queryNode.NumDescendants() > 1)
-  {
-    const double minQueryDistance = queryNode.Stat().FirstBound();
-    const double score = ElkanTypeScore(queryNode, referenceNode,
-        minQueryDistance);
-    return score;
-  }
-  else
-  {
-    const double score = ElkanTypeScore(queryNode, referenceNode,
-        interclusterDistances[queryNode.Descendant(0)]);
-    return score;
-  }
-}
-
-template<typename MetricType, typename TreeType>
-double DualTreeKMeansRules<MetricType, TreeType>::ElkanTypeScore(
-    TreeType& queryNode,
-    TreeType& referenceNode,
-    const double minQueryDistance) const
-{
-  // See if we can do an Elkan-type prune on between-centroid distances.
-
-  const double maxDistance = referenceNode.Stat().MaxQueryNodeDistance();
-  if (maxDistance == DBL_MAX)
-    return minQueryDistance;
-
-  if ((minQueryDistance > 2.0 * maxDistance) &&
-      !(IsDescendantOf(*(TreeType*) referenceNode.Stat().ClosestQueryNode(),
-          queryNode)) &&
-      (&queryNode != (TreeType*) referenceNode.Stat().ClosestQueryNode()))
-  {
-    if (referenceNode.Begin() == 26038)
-      Log::Warn << "Elkan prune r26038c" << referenceNode.Count() << ", q" <<
-queryNode.Begin() << "c" << queryNode.Count() << "!\n";
-    // Then we can conclude d_max(best(N_r), N_r) <= d_min(N_q, N_r) which
-    // means that N_q cannot possibly hold any clusters that own any points in
-    // N_r.
-    return DBL_MAX;
-  }
-
-  return minQueryDistance;
-}
-
-template<typename MetricType, typename TreeType>
-double DualTreeKMeansRules<MetricType, TreeType>::PellegMooreScore(
-    TreeType& /* queryNode */,
-    TreeType& referenceNode,
-    const double minDistance) const
-{
-  // If the minimum distance to the node is greater than the bound, then every
-  // cluster in the query node cannot possibly be the nearest neighbor of any of
-  // the points in the reference node.
-//  if (referenceNode.Begin() == 26038)
-//      Log::Warn << "Pelleg-Moore prune attempt r26038c" << referenceNode.Count() << ", "
-//          << "q" << queryNode.Begin() << "c" << queryNode.Count() << "; "
-//          << "minDistance " << minDistance << ", MQND " <<
-//referenceNode.Stat().MaxQueryNodeDistance() << ".\n";
-  if (minDistance > referenceNode.Stat().MaxQueryNodeDistance())
-  {
-//    if (referenceNode.Begin() == 26038)
-//      Log::Warn << "Attempt successful!\n";
-    return DBL_MAX;
-  }
-
-  return minDistance;
-}
-
 } // namespace kmeans
 } // namespace mlpack
 



More information about the mlpack-git mailing list