mlpack  master
midpoint_split.hpp
Go to the documentation of this file.
1 
15 #ifndef MLPACK_CORE_TREE_BINARY_SPACE_TREE_MIDPOINT_SPLIT_HPP
16 #define MLPACK_CORE_TREE_BINARY_SPACE_TREE_MIDPOINT_SPLIT_HPP
17 
18 #include <mlpack/prereqs.hpp>
20 
21 namespace mlpack {
22 namespace tree {
23 
29 template<typename BoundType, typename MatType = arma::mat>
31 {
32  public:
34  struct SplitInfo
35  {
39  double splitVal;
40  };
54  static bool SplitNode(const BoundType& bound,
55  MatType& data,
56  const size_t begin,
57  const size_t count,
58  SplitInfo& splitInfo);
59 
73  static size_t PerformSplit(MatType& data,
74  const size_t begin,
75  const size_t count,
76  const SplitInfo& splitInfo)
77  {
78  return split::PerformSplit<MatType, MidpointSplit>(data, begin, count,
79  splitInfo);
80  }
81 
98  static size_t PerformSplit(MatType& data,
99  const size_t begin,
100  const size_t count,
101  const SplitInfo& splitInfo,
102  std::vector<size_t>& oldFromNew)
103  {
104  return split::PerformSplit<MatType, MidpointSplit>(data, begin, count,
105  splitInfo, oldFromNew);
106  }
107 
114  template<typename VecType>
115  static bool AssignToLeftNode(const VecType& point,
116  const SplitInfo& splitInfo)
117  {
118  return point[splitInfo.splitDimension] < splitInfo.splitVal;
119  }
120 };
121 
122 } // namespace tree
123 } // namespace mlpack
124 
125 // Include implementation.
126 #include "midpoint_split_impl.hpp"
127 
128 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
static bool SplitNode(const BoundType &bound, MatType &data, const size_t begin, const size_t count, SplitInfo &splitInfo)
Find the partition of the node.
static size_t PerformSplit(MatType &data, const size_t begin, const size_t count, const SplitInfo &splitInfo, std::vector< size_t > &oldFromNew)
Perform the split process according to the information about the split and return the list of changed...
static size_t PerformSplit(MatType &data, const size_t begin, const size_t count, const SplitInfo &splitInfo)
Perform the split process according to the information about the split.
The core includes that mlpack expects; standard C++ includes and Armadillo.
static bool AssignToLeftNode(const VecType &point, const SplitInfo &splitInfo)
Indicates that a point should be assigned to the left subtree.
A binary space partitioning tree node is split into its left and right child.
double splitVal
The split in dimension splitDimension is based on this value.
A struct that contains an information about the split.
size_t splitDimension
The dimension to split the node on.