[mlpack-git] master: Add GreedySingleTreeTraverser. (dfa99cc)

gitdub at mlpack.org gitdub at mlpack.org
Sat Aug 20 14:56:06 EDT 2016


Repository : https://github.com/mlpack/mlpack
On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/3274b05fcc545c3b36f783316fea2e22f79c3d03...1c77230c7d3b9c45fb102cd3c632d9c7248e085e

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

commit dfa99cc9793c5ff8b9cd6671b290aa18a25d0df3
Author: MarcosPividori <marcos.pividori at gmail.com>
Date:   Tue Aug 16 00:54:41 2016 -0300

    Add GreedySingleTreeTraverser.


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

dfa99cc9793c5ff8b9cd6671b290aa18a25d0df3
 .../core/tree/greedy_single_tree_traverser.hpp     | 52 ++++++++++++++++++++++
 .../tree/greedy_single_tree_traverser_impl.hpp     | 49 ++++++++++++++++++++
 2 files changed, 101 insertions(+)

diff --git a/src/mlpack/core/tree/greedy_single_tree_traverser.hpp b/src/mlpack/core/tree/greedy_single_tree_traverser.hpp
new file mode 100644
index 0000000..29bc697
--- /dev/null
+++ b/src/mlpack/core/tree/greedy_single_tree_traverser.hpp
@@ -0,0 +1,52 @@
+/**
+ * @file greedy_single_tree_traverser_impl.hpp
+ * @author Marcos Pividori
+ *
+ * A simple greedy traverser which always chooses the child with the best score
+ * and doesn't do backtracking.  The RuleType class must implement the method
+ * 'GetBestChild()'.
+ */
+#ifndef MLPACK_CORE_TREE_GREEDY_SINGLE_TREE_TRAVERSER_HPP
+#define MLPACK_CORE_TREE_GREEDY_SINGLE_TREE_TRAVERSER_HPP
+
+#include <mlpack/core.hpp>
+
+namespace mlpack {
+namespace tree {
+
+template<typename TreeType, typename RuleType>
+class GreedySingleTreeTraverser
+{
+ public:
+  /**
+   * Instantiate the greedy single tree traverser with the given rule set.
+   */
+  GreedySingleTreeTraverser(RuleType& rule);
+
+  /**
+   * Traverse the tree with the given point.
+   *
+   * @param queryIndex The index of the point in the query set which is being
+   *     used as the query point.
+   * @param referenceNode The tree node to be traversed.
+   */
+  void Traverse(const size_t queryIndex, TreeType& referenceNode);
+
+  //! Get the number of prunes.
+  size_t NumPrunes() const { return numPrunes; }
+
+ private:
+  //! Reference to the rules with which the tree will be traversed.
+  RuleType& rule;
+
+  //! The number of nodes which have been pruned during traversal.
+  size_t numPrunes;
+};
+
+} // namespace tree
+} // namespace mlpack
+
+// Include implementation.
+#include "greedy_single_tree_traverser_impl.hpp"
+
+#endif
diff --git a/src/mlpack/core/tree/greedy_single_tree_traverser_impl.hpp b/src/mlpack/core/tree/greedy_single_tree_traverser_impl.hpp
new file mode 100644
index 0000000..723efb5
--- /dev/null
+++ b/src/mlpack/core/tree/greedy_single_tree_traverser_impl.hpp
@@ -0,0 +1,49 @@
+/**
+ * @file greedy_single_tree_traverser_impl.hpp
+ * @author Marcos Pividori
+ *
+ * A simple greedy traverser which always chooses the child with the best score
+ * and doesn't do backtracking.  The RuleType class must implement the method
+ * 'GetBestChild()'.
+ */
+#ifndef MLPACK_CORE_TREE_GREEDY_SINGLE_TREE_TRAVERSER_IMPL_HPP
+#define MLPACK_CORE_TREE_GREEDY_SINGLE_TREE_TRAVERSER_IMPL_HPP
+
+// In case it hasn't been included yet.
+#include "greedy_single_tree_traverser.hpp"
+
+namespace mlpack {
+namespace tree {
+
+template<typename TreeType, typename RuleType>
+GreedySingleTreeTraverser<TreeType, RuleType>::GreedySingleTreeTraverser(
+    RuleType& rule) :
+    rule(rule),
+    numPrunes(0)
+{ /* Nothing to do. */ }
+
+template<typename TreeType, typename RuleType>
+GreedySingleTreeTraverser<TreeType, RuleType>::Traverse(
+    const size_t queryIndex,
+    TreeType& referenceNode)
+{
+  // If we have reached a leaf node, run the base case as necessary.
+  if (referenceNode.IsLeaf())
+  {
+    for (size_t i = 0; i < referenceNode.NumPoints(); ++i)
+      rule.BaseCase(queryIndex, referenceNode.Point(i));
+  }
+  else
+  {
+    // We are prunning all but one child.
+    numPrunes += referenceNode.NumChildren() - 1;
+    // Recurse the best child.
+    TreeTyp& bestChild = rule.GetBestChild(queryIndex, referenceNode);
+    Traverse(queryIndex, bestChild);
+  }
+}
+
+} // namespace tree
+} // namespace mlpack
+
+#endif




More information about the mlpack-git mailing list