mean_split.hpp
Go to the documentation of this file.
1 
14 #ifndef MLPACK_CORE_TREE_BINARY_SPACE_TREE_MEAN_SPLIT_HPP
15 #define MLPACK_CORE_TREE_BINARY_SPACE_TREE_MEAN_SPLIT_HPP
16 
17 #include <mlpack/prereqs.hpp>
19 
20 namespace mlpack {
21 namespace tree {
22 
28 template<typename BoundType, typename MatType = arma::mat>
29 class MeanSplit
30 {
31  public:
33  struct SplitInfo
34  {
38  double splitVal;
39  };
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 
72  static size_t PerformSplit(MatType& data,
73  const size_t begin,
74  const size_t count,
75  const SplitInfo& splitInfo)
76  {
77  return split::PerformSplit<MatType, MeanSplit>(data, begin, count,
78  splitInfo);
79  }
80 
96  static size_t PerformSplit(MatType& data,
97  const size_t begin,
98  const size_t count,
99  const SplitInfo& splitInfo,
100  std::vector<size_t>& oldFromNew)
101  {
102  return split::PerformSplit<MatType, MeanSplit>(data, begin, count,
103  splitInfo, oldFromNew);
104  }
105 
112  template<typename VecType>
113  static bool AssignToLeftNode(const VecType& point,
114  const SplitInfo& splitInfo)
115  {
116  return point[splitInfo.splitDimension] < splitInfo.splitVal;
117  }
118 };
119 
120 } // namespace tree
121 } // namespace mlpack
122 
123 // Include implementation.
124 #include "mean_split_impl.hpp"
125 
126 #endif
Linear algebra utility functions, generally performed on matrices or vectors.
The core includes that mlpack expects; standard C++ includes and Armadillo.
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.
Definition: mean_split.hpp:72
constexpr auto data(Container const &container) noexcept -> decltype(container.data())
Definition: iterator.hpp:79
static bool SplitNode(const BoundType &bound, MatType &data, const size_t begin, const size_t count, SplitInfo &splitInfo)
Find the partition of the node.
An information about the partition.
Definition: mean_split.hpp:33
double splitVal
The split in dimension splitDimension is based on this value.
Definition: mean_split.hpp:38
A binary space partitioning tree node is split into its left and right child.
Definition: mean_split.hpp:29
static bool AssignToLeftNode(const VecType &point, const SplitInfo &splitInfo)
Indicates that a point should be assigned to the left subtree.
Definition: mean_split.hpp:113
auto count(Range &&rng, T const &value) -> enable_if_t< is_range< Range >::value, decltype(::std::count(::std::begin(::core::forward< Range >(rng)), ::std::end(::core::forward< Range >(rng)), value)) >
Definition: algorithm.hpp:225
size_t splitDimension
The dimension to split the node on.
Definition: mean_split.hpp:36
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...
Definition: mean_split.hpp:96