multiple_random_dimension_select.hpp
Go to the documentation of this file.
1 
12 #ifndef MLPACK_METHODS_DECISION_TREE_MULTIPLE_RANDOM_DIMENSION_SPLIT_HPP
13 #define MLPACK_METHODS_DECISION_TREE_MULTIPLE_RANDOM_DIMENSION_SPLIT_HPP
14 
15 namespace mlpack {
16 namespace tree {
17 
25 template<size_t NumDimensions = 3>
27 {
28  public:
32  MultipleRandomDimensionSelect(const size_t dimensions)
33  {
34  for (size_t i = 0; i < NumDimensions; ++i)
35  {
36  // Generate random different numbers.
37  bool unique = false;
38  size_t value;
39  while (!unique)
40  {
41  value = math::RandInt(dimensions);
42 
43  // Check if we already have the value.
44  unique = true;
45  for (size_t j = 0; j < i; ++j)
46  {
47  if (values[j] == value)
48  {
49  unique = false;
50  break;
51  }
52  }
53  }
54 
55  values[i] = value;
56  }
57 
58  values[NumDimensions] = std::numeric_limits<size_t>::max();
59  }
60 
64  size_t Begin()
65  {
66  i = 0;
67  return values[0];
68  }
69 
73  size_t End() const { return size_t(-1); }
74 
78  size_t Next()
79  {
80  return values[++i];
81  }
82 
83  private:
85  size_t values[NumDimensions + 1];
87  size_t i;
88 };
89 
90 } // namespace tree
91 } // namespace mlpack
92 
93 #endif
.hpp
Definition: add_to_po.hpp:21
This dimension selection policy allows the selection from a few random dimensions.
MultipleRandomDimensionSelect(const size_t dimensions)
Instantiate the MultipleRandomDimensionSelect object.
int RandInt(const int hiExclusive)
Generates a uniform random integer.
Definition: random.hpp:87