Logo ROOT   6.10/09
Reference Guide
ConvergenceTest.cxx
Go to the documentation of this file.
1 // @(#)root/tmva $Id$
2 // Author: Andreas Hoecker, Peter Speckmayer, Joerg Stelzer, Helge Voss
3 
4 /**********************************************************************************
5  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6  * Package: TMVA *
7  * Class : ConvergenceTest *
8  * Web : http://tmva.sourceforge.net *
9  * *
10  * Description: *
11  * Implementation (see header for description) *
12  * *
13  * Authors (alphabetical): *
14  * Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland *
15  * Peter Speckmayer <Peter.Speckmayer@cern.ch> - CERN, Switzerland *
16  * Joerg Stelzer <Joerg.Stelzer@cern.ch> - CERN, Switzerland *
17  * Helge Voss <Helge.Voss@cern.ch> - MPI-K Heidelberg, Germany *
18  * *
19  * Copyright (c) 2006: *
20  * CERN, Switzerland *
21  * MPI-K Heidelberg, Germany *
22  * *
23  * Redistribution and use in source and binary forms, with or without *
24  * modification, are permitted according to the terms listed in LICENSE *
25  * (http://tmva.sourceforge.net/LICENSE) *
26  **********************************************************************************/
27 
28 /*! \class TMVA::ConvergenceTest
29 \ingroup TMVA
30 
31 Check for convergence.
32 
33 */
34 #include "TMVA/ConvergenceTest.h"
35 #include "TMath.h"
36 
37 ////////////////////////////////////////////////////////////////////////////////
38 /// constructor
39 
41  : fCurrentValue( 0 ),
42  fImprovement( 0 ),
43  fSteps( 0 ),
44  fCounter( -1 ),
45  fConvValue( FLT_MAX ),
46  fMaxCounter( 0 ),
47  fBestResult( FLT_MAX ),
48  fLastResult( FLT_MAX )
49 {
50 }
51 
52 ////////////////////////////////////////////////////////////////////////////////
53 /// destructor
54 
56 {
57 }
58 
59 ////////////////////////////////////////////////////////////////////////////////
60 /// gives back true if the last "steps" steps have lead to an improvement of the
61 /// "fitness" of the "individuals" of at least "improvement"
62 ///
63 /// this gives a simple measure of if the estimator of the MLP is
64 /// converging and no major improvement is to be expected.
65 
67 {
68  if( fSteps < 0 || fImprovement < 0 ) return kFALSE;
69 
70  if (fCounter < 0) {
72  }
73  Float_t improvement = 0;
74  if( withinConvergenceBand )
75  improvement = TMath::Abs(fCurrentValue - fConvValue);
76  else
77  improvement = fConvValue - fCurrentValue;
78  if ( improvement <= fImprovement || fSteps<0) {
79  fCounter ++;
80  } else {
81  fCounter = 0;
83  }
84  if (fCounter < fSteps) return kFALSE;
85  return kTRUE;
86 }
87 
88 ////////////////////////////////////////////////////////////////////////////////
89 /// returns a float from 0 (just started) to 1 (finished)
90 
92 {
93  if( fCounter > fMaxCounter )
96 }
97 
98 
99 ////////////////////////////////////////////////////////////////////////////////
100 /// this function provides the ability to change the learning rate according to
101 /// the success of the last generations.
102 ///
103 /// Parameters:
104 ///
105 /// - int ofSteps : = if OF the number of STEPS given in this variable (ofSteps) the
106 /// rate of improvement has to be calculated
107 ///
108 /// using this function one can increase the stepSize of the mutation when we have
109 /// good success (to pass fast through the easy phase-space) and reduce the learning rate
110 /// if we are in a difficult "territory" of the phase-space.
111 
113 {
114  // < is valid for "less" comparison (for minimization)
115  if ( fBestResult > fLastResult || fSuccessList.size() <=0 ) {
117  fSuccessList.push_front( 1 ); // it got better
118  } else {
119  fSuccessList.push_front( 0 ); // it stayed the same
120  }
121  while( ofSteps <= fSuccessList.size() ) // remove the older entries in the success-list
122  fSuccessList.erase( fSuccessList.begin() );
123  Int_t n = 0;
124  Int_t sum = 0;
125  std::deque<Short_t>::iterator vec = fSuccessList.begin();
126  for (; vec != fSuccessList.end() ; vec++) {
127  sum += *vec;
128  n++;
129  }
130 
131  return n ? sum/Float_t(n) : 0;
132 }
static long int sum(long int i)
Definition: Factory.cxx:2162
Int_t fMaxCounter
the best "fitness" value
Float_t fBestResult
maximum value for the counter so far
float Float_t
Definition: RtypesCore.h:53
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Short_t Abs(Short_t d)
Definition: TMathBase.h:108
Float_t fImprovement
current value
Bool_t HasConverged(Bool_t withinConvergenceBand=kFALSE)
gives back true if the last "steps" steps have lead to an improvement of the "fitness" of the "indivi...
Int_t fSteps
minimum improvement which counts as improvement
Float_t Progress()
returns a float from 0 (just started) to 1 (finished)
unsigned int UInt_t
Definition: RtypesCore.h:42
ConvergenceTest()
constructor
const Bool_t kFALSE
Definition: RtypesCore.h:92
~ConvergenceTest()
destructor
std::deque< Short_t > fSuccessList
Float_t SpeedControl(UInt_t ofSteps)
this function provides the ability to change the learning rate according to the success of the last g...
Int_t fCounter
number of steps without improvement required for convergence
const Bool_t kTRUE
Definition: RtypesCore.h:91
const Int_t n
Definition: legend1.C:16
Float_t fConvValue
counts the number of steps without improvement