123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /**
- * @file DTBOblique.h
- * @brief oblique decision tree
- * @author Sven Sickert
- * @date 10/15/2014
- */
- #ifndef DTBOBLIQUEINCLUDE
- #define DTBOBLIQUEINCLUDE
- #include "core/vector/VectorT.h"
- #include "core/vector/MatrixT.h"
- #include "core/basics/Config.h"
- #include "DecisionTreeBuilder.h"
- #include "vislearning/cbaselib/CachedExample.h"
- namespace OBJREC {
- /** random oblique decision tree */
- class DTBOblique : public DecisionTreeBuilder
- {
- protected:
- /////////////////////////
- /////////////////////////
- // PROTECTED VARIABLES //
- /////////////////////////
- /////////////////////////
- /** Amount of steps for complete search for best threshold */
- int split_steps;
- /** Maximum allowed depth of a tree */
- int max_depth;
- /* Minimum amount of features in a leaf node */
- int min_examples;
- /** Minimum entropy to continue with splitting */
- int minimum_entropy;
- /** Minimum information gain to continue with splitting */
- int minimum_information_gain;
- /** Whether to use shannon entropy or not */
- bool use_shannon_entropy;
- /** Whether to save indices in leaves or not */
- bool save_indices;
- /** Regularization parameter */
- double lambdaInit;
- /** Regularization type */
- int regularizationType;
- /////////////////////////
- /////////////////////////
- // PROTECTED METHODS //
- /////////////////////////
- /////////////////////////
- /**
- * @brief get data matrix X and label vector y
- * @param fp feature pool
- * @param examples all examples of the training
- * @param examples_selection indeces of selected example subset
- * @param matX data matrix (amountExamples x amountParameters)
- * @param vecY label vector (amountExamples)
- */
- void getDataAndLabel(
- const FeaturePool &fp,
- const Examples &examples,
- const std::vector<int> & examples_selection,
- NICE::Matrix &matX,
- NICE::Vector &vecY );
- /**
- * @brief return a regularization matrix of size (dimParams)x(dimParams)
- * @param X data matrix
- * @param XTXreg return regularized X'*X
- * @param regOption which kind of regularization
- * @param lambda regularization parameter (weigthing)
- */
- void regularizeDataMatrix (
- const NICE::Matrix & X,
- NICE::Matrix &XTXreg,
- const int regOption,
- const double lambda );
- /**
- * @brief recursive building method
- * @param fp feature pool
- * @param examples all examples of the training
- * @param examples_selection indeces of selected example subset
- * @param distribution class distribution in current node
- * @param entropy current entropy
- * @param maxClassNo maximum class number
- * @param depth current depth
- * @return Pointer to root/parent node
- */
- DecisionNode *buildRecursive (
- const FeaturePool & fp,
- const Examples & examples,
- std::vector<int> & examples_selection,
- FullVector & distribution,
- double entropy,
- int maxClassNo,
- int depth,
- double curLambda );
- /**
- * @brief compute entropy for left and right child
- * @param values feature values
- * @param threshold threshold for split
- * @param stat_left statistics for left child
- * @param stat_right statistics for right child
- * @param entropy_left entropy for left child
- * @param entropy_right entropy for right child
- * @param count_left amount of features in left child
- * @param count_right amount of features in right child
- * @param maxClassNo maximum class number
- * @return whether another split is possible or not
- */
- bool entropyLeftRight ( const FeatureValuesUnsorted & values,
- double threshold,
- double* stat_left,
- double* stat_right,
- double & entropy_left,
- double & entropy_right,
- double & count_left,
- double & count_right,
- int maxClassNo );
- public:
- /** simple constructor */
- DTBOblique ( const NICE::Config *conf,
- std::string section = "DTBOblique" );
- /** simple destructor */
- virtual ~DTBOblique();
- /**
- * @brief initial building method
- * @param fp feature pool
- * @param examples all examples of the training
- * @param maxClassNo maximum class number
- * @return Pointer to root/parent node
- */
- DecisionNode *build ( const FeaturePool &fp,
- const Examples &examples,
- int maxClassNo );
- };
- } //namespace
- #endif
|