rp_tree_max_split.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_CORE_TREE_BINARY_SPACE_TREE_RP_TREE_MAX_SPLIT_HPP
14 #define MLPACK_CORE_TREE_BINARY_SPACE_TREE_RP_TREE_MAX_SPLIT_HPP
15 
16 #include <mlpack/prereqs.hpp>
18 
19 namespace mlpack {
20 namespace tree {
21 
31 template<typename BoundType, typename MatType = arma::mat>
33 {
34  public:
36  typedef typename MatType::elem_type ElemType;
38  struct SplitInfo
39  {
41  arma::Col<ElemType> direction;
43  ElemType splitVal;
44  };
45 
57  static bool SplitNode(const BoundType& /*bound*/,
58  MatType& data,
59  const size_t begin,
60  const size_t count,
61  SplitInfo& splitInfo);
62 
75  static size_t PerformSplit(MatType& data,
76  const size_t begin,
77  const size_t count,
78  const SplitInfo& splitInfo)
79  {
80  return split::PerformSplit<MatType, RPTreeMaxSplit>(data, begin, count,
81  splitInfo);
82  }
83 
99  static size_t PerformSplit(MatType& data,
100  const size_t begin,
101  const size_t count,
102  const SplitInfo& splitInfo,
103  std::vector<size_t>& oldFromNew)
104  {
105  return split::PerformSplit<MatType, RPTreeMaxSplit>(data, begin, count,
106  splitInfo, oldFromNew);
107  }
108 
115  template<typename VecType>
116  static bool AssignToLeftNode(const VecType& point, const SplitInfo& splitInfo)
117  {
118  return (arma::dot(point, splitInfo.direction) <= splitInfo.splitVal);
119  }
120 
121  private:
133  static bool GetSplitVal(const MatType& data,
134  const size_t begin,
135  const size_t count,
136  const arma::Col<ElemType>& direction,
137  ElemType& splitVal);
138 };
139 
140 } // namespace tree
141 } // namespace mlpack
142 
143 // Include implementation.
144 #include "rp_tree_max_split_impl.hpp"
145 
146 #endif // MLPACK_CORE_TREE_BINARY_SPACE_TREE_RP_TREE_MAX_SPLIT_HPP
static bool SplitNode(const BoundType &, MatType &data, const size_t begin, const size_t count, SplitInfo &splitInfo)
Split the node by a random hyperplane.
static bool AssignToLeftNode(const VecType &point, const SplitInfo &splitInfo)
Indicates that a point should be assigned to the left subtree.
Linear algebra utility functions, generally performed on matrices or vectors.
The core includes that mlpack expects; standard C++ includes and Armadillo.
This class splits a node by a random hyperplane.
ElemType splitVal
The value according to which the node is being split.
constexpr auto data(Container const &container) noexcept -> decltype(container.data())
Definition: iterator.hpp:79
MatType::elem_type ElemType
The element type held by the matrix type.
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
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.
An information about the partition.
arma::Col< ElemType > direction
The normal vector to the hyperplane that splits the node.