[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