SplittingCriterion.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * @file SplittingCriterion.cpp
  3. * @brief abstract interface for splitting criteria
  4. * @author Sven Sickert
  5. * @date 01/12/2017
  6. */
  7. #include "SplittingCriterion.h"
  8. using namespace OBJREC;
  9. /* default constructor */
  10. SplittingCriterion::SplittingCriterion()
  11. {
  12. min_examples = 50;
  13. entropy_cur = 0.0;
  14. min_entropy = 10e-5;
  15. min_purity = 10e-7;
  16. }
  17. /* simple constructor */
  18. SplittingCriterion::SplittingCriterion( int _min_examples )
  19. {
  20. min_examples = _min_examples;
  21. entropy_cur = 0.0;
  22. min_entropy = 10e-5;
  23. min_purity = 10e-7;
  24. }
  25. /* config constructor */
  26. SplittingCriterion::SplittingCriterion( const NICE::Config *conf )
  27. {
  28. min_examples = conf->gI ( "SplittingCriterion", "min_examples", 50 );
  29. min_entropy = conf->gD ( "SplittingCriterion", "min_entropy", 10e-5 );
  30. min_purity = conf->gD ( "SplittingCriterion", "min_purity", 10e-7 );
  31. entropy_cur = 0.0;
  32. }
  33. /* copy constructor */
  34. SplittingCriterion::SplittingCriterion( const SplittingCriterion &obj )
  35. {
  36. min_examples = obj.min_examples;
  37. min_entropy = obj.min_entropy;
  38. min_purity = obj.min_purity;
  39. entropy_cur = obj.entropy_cur;
  40. }
  41. /* default destructor */
  42. SplittingCriterion::~SplittingCriterion()
  43. {
  44. }
  45. /* computation of entropy */
  46. double SplittingCriterion::computeEntropy(
  47. const double* distribution,
  48. const double count,
  49. const int maxClassNo )
  50. {
  51. double e = 0.0;
  52. for ( int j = 0 ; j <= maxClassNo ; j++ )
  53. if ( distribution[j] != 0 )
  54. e -= distribution[j] * log(distribution[j]);
  55. e /= count;
  56. e += log(count);
  57. return e;
  58. }