GestureRecognitionToolkit  Version: 1.0 Revision: 04-03-15
The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, c++ machine learning library for real-time gesture recognition.
DecisionTreeNode.h
Go to the documentation of this file.
1 
31 #ifndef GRT_DECISION_TREE_NODE_HEADER
32 #define GRT_DECISION_TREE_NODE_HEADER
33 
34 #include "../../CoreAlgorithms/Tree/Node.h"
35 #include "../../CoreAlgorithms/Tree/Tree.h"
36 #include "../../DataStructures/ClassificationData.h"
37 
38 namespace GRT{
39 
40 class DecisionTreeNode : public Node{
41 public:
46 
50  virtual ~DecisionTreeNode();
51 
65  virtual bool predict(const VectorDouble &x,VectorDouble &classLikelihoods);
66 
81  virtual bool computeBestSpilt( const UINT &trainingMode, const UINT &numSplittingSteps,const ClassificationData &trainingData, const vector< UINT > &features, const vector< UINT > &classLabels, UINT &featureIndex, double &minError );
82 
89  virtual bool clear();
90 
98  virtual bool getModel(ostream &stream) const;
99 
106  virtual Node* deepCopyNode() const;
107 
114  DecisionTreeNode* deepCopy() const;
115 
121  UINT getNodeSize() const;
122 
128  UINT getNumClasses() const;
129 
135  VectorDouble getClassProbabilities() const;
136 
144  bool setLeafNode( const UINT nodeSize, const VectorDouble &classProbabilities );
145 
152  bool setNodeSize(const UINT nodeSize);
153 
160  bool setClassProbabilities(const VectorDouble &classProbabilities);
161 
162  using Node::predict;
163 
164 protected:
165  virtual bool computeBestSpiltBestIterativeSpilt( const UINT &numSplittingSteps, const ClassificationData &trainingData, const vector< UINT > &features, const vector< UINT > &classLabels, UINT &featureIndex, double &minError ){
166 
167  errorLog << "computeBestSpiltBestIterativeSpilt(...) - Base class not overwritten!" << endl;
168 
169  return false;
170  }
171 
172  virtual bool computeBestSpiltBestRandomSpilt( const UINT &numSplittingSteps, const ClassificationData &trainingData, const vector< UINT > &features, const vector< UINT > &classLabels, UINT &featureIndex, double &minError ){
173 
174  errorLog << "computeBestSpiltBestRandomSpilt(...) - Base class not overwritten!" << endl;
175 
176  return false;
177  }
178 
186  virtual bool saveParametersToFile(fstream &file) const{
187 
188  if( !file.is_open() )
189  {
190  errorLog << "saveParametersToFile(fstream &file) - File is not open!" << endl;
191  return false;
192  }
193 
194  //Save the custom DecisionTreeNode parameters
195  file << "NodeSize: " << nodeSize << endl;
196  file << "NumClasses: " << classProbabilities.size() << endl;
197  file << "ClassProbabilities: ";
198  if( classProbabilities.size() > 0 ){
199  for(UINT i=0; i<classProbabilities.size(); i++){
200  file << classProbabilities[i];
201  if( i < classProbabilities.size()-1 ) file << "\t";
202  else file << endl;
203  }
204  }
205 
206  return true;
207  }
208 
215  virtual bool loadParametersFromFile(fstream &file){
216 
217  if( !file.is_open() )
218  {
219  errorLog << "loadParametersFromFile(fstream &file) - File is not open!" << endl;
220  return false;
221  }
222 
223  classProbabilities.clear();
224 
225  string word;
226  UINT numClasses;
227 
228  //Load the custom DecisionTreeNode Parameters
229  file >> word;
230  if( word != "NodeSize:" ){
231  errorLog << "loadParametersFromFile(fstream &file) - Failed to find NodeSize header!" << endl;
232  return false;
233  }
234  file >> nodeSize;
235 
236  file >> word;
237  if( word != "NumClasses:" ){
238  errorLog << "loadParametersFromFile(fstream &file) - Failed to find NumClasses header!" << endl;
239  return false;
240  }
241  file >> numClasses;
242  if( numClasses > 0 )
243  classProbabilities.resize( numClasses );
244 
245  file >> word;
246  if( word != "ClassProbabilities:" ){
247  errorLog << "loadParametersFromFile(fstream &file) - Failed to find ClassProbabilities header!" << endl;
248  return false;
249  }
250  if( numClasses > 0 ){
251  for(UINT i=0; i<numClasses; i++){
252  file >> classProbabilities[i];
253  }
254  }
255 
256  return true;
257  }
258 
259  UINT getClassLabelIndexValue(UINT classLabel,const vector< UINT > &classLabels) const{
260  const UINT N = (UINT)classLabels.size();
261  for(UINT i=0; i<N; i++){
262  if( classLabel == classLabels[i] )
263  return i;
264  }
265  return 0;
266  }
267 
268  UINT nodeSize;
269  VectorDouble classProbabilities;
270 
271  static RegisterNode< DecisionTreeNode > registerModule;
272 };
273 
274 } //End of namespace GRT
275 
276 #endif //GRT_DECISION_TREE_NODE_HEADER
277 
virtual bool saveParametersToFile(fstream &file) const
Definition: AdaBoost.cpp:25
bool setLeafNode(const UINT nodeSize, const VectorDouble &classProbabilities)
DecisionTreeNode * deepCopy() const
virtual Node * deepCopyNode() const
bool setNodeSize(const UINT nodeSize)
virtual bool predict(const VectorDouble &x)
Definition: Node.cpp:59
virtual bool predict(const VectorDouble &x, VectorDouble &classLikelihoods)
virtual bool getModel(ostream &stream) const
virtual bool loadParametersFromFile(fstream &file)
VectorDouble getClassProbabilities() const
bool setClassProbabilities(const VectorDouble &classProbabilities)
Definition: Node.h:37
virtual bool computeBestSpilt(const UINT &trainingMode, const UINT &numSplittingSteps, const ClassificationData &trainingData, const vector< UINT > &features, const vector< UINT > &classLabels, UINT &featureIndex, double &minError)