/** * @file SplittingCriterion.cpp * @brief abstract interface for splitting criteria * @author Sven Sickert * @date 01/12/2017 */ #include "SplittingCriterion.h" using namespace OBJREC; /* default constructor */ SplittingCriterion::SplittingCriterion() { min_examples = 50; entropy_cur = 0.0; min_entropy = 10e-5; min_purity = 10e-7; } /* simple constructor */ SplittingCriterion::SplittingCriterion( int _min_examples ) { min_examples = _min_examples; entropy_cur = 0.0; min_entropy = 10e-5; min_purity = 10e-7; } /* config constructor */ SplittingCriterion::SplittingCriterion( const NICE::Config *conf ) { min_examples = conf->gI ( "SplittingCriterion", "min_examples", 50 ); min_entropy = conf->gD ( "SplittingCriterion", "min_entropy", 10e-5 ); min_purity = conf->gD ( "SplittingCriterion", "min_purity", 10e-7 ); entropy_cur = 0.0; } /* copy constructor */ SplittingCriterion::SplittingCriterion( const SplittingCriterion &obj ) { min_examples = obj.min_examples; min_entropy = obj.min_entropy; min_purity = obj.min_purity; entropy_cur = obj.entropy_cur; } /* default destructor */ SplittingCriterion::~SplittingCriterion() { } /* computation of entropy */ double SplittingCriterion::computeEntropy( const double* distribution, const double count, const int maxClassNo ) { double e = 0.0; for ( int j = 0 ; j <= maxClassNo ; j++ ) if ( distribution[j] != 0 ) e -= distribution[j] * log(distribution[j]); e /= count; e += log(count); return e; }