Logo ROOT   6.08/07
Reference Guide
MethodFDA.h
Go to the documentation of this file.
1 // @(#)root/tmva $Id$
2 // Author: Andreas Hoecker, Peter Speckmayer
3 
4 /**********************************************************************************
5  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6  * Package: TMVA *
7  * Class : MethodFDA *
8  * Web : http://tmva.sourceforge.net *
9  * *
10  * Description: *
11  * Function discriminant analysis (FDA). This simple classifier *
12  * fits any user-defined TFormula (via option configuration string) to *
13  * the training data by requiring a formula response of 1 (0) to signal *
14  * (background) events. The parameter fitting is done via the abstract *
15  * class FitterBase, featuring Monte Carlo sampling, Genetic *
16  * Algorithm, Simulated Annealing, MINUIT and combinations of these. *
17  * *
18  * Authors (alphabetical): *
19  * Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland *
20  * Peter Speckmayer <speckmay@mail.cern.ch> - CERN, Switzerland *
21  * *
22  * Copyright (c) 2005-2010: *
23  * CERN, Switzerland *
24  * MPI-K Heidelberg, Germany *
25  * *
26  * Redistribution and use in source and binary forms, with or without *
27  * modification, are permitted according to the terms listed in LICENSE *
28  * (http://tmva.sourceforge.net/LICENSE) *
29  **********************************************************************************/
30 
31 #ifndef ROOT_TMVA_MethodFDA
32 #define ROOT_TMVA_MethodFDA
33 
34 //////////////////////////////////////////////////////////////////////////
35 // //
36 // MethodFDA //
37 // //
38 // Function discriminant analysis (FDA). This simple classifier //
39 // fits any user-defined TFormula (via option configuration string) to //
40 // the training data by requiring a formula response of 1 (0) to signal //
41 // (background) events. The parameter fitting is done via the abstract //
42 // class FitterBase, featuring Monte Carlo sampling, Genetic //
43 // Algorithm, Simulated Annealing, MINUIT and combinations of these. //
44 // //
45 // Can compute one-dimensional regression //
46 // //
47 //////////////////////////////////////////////////////////////////////////
48 
49 #ifndef ROOT_TMVA_MethodBase
50 #include "TMVA/MethodBase.h"
51 #endif
52 #ifndef ROOT_TMVA_IFitterTarget
53 #include "TMVA/IFitterTarget.h"
54 #endif
55 
56 class TFormula;
57 
58 namespace TMVA {
59 
60  class Interval;
61  class Event;
62  class FitterBase;
63 
64  class MethodFDA : public MethodBase, public IFitterTarget {
65 
66  public:
67 
68  MethodFDA( const TString& jobName,
69  const TString& methodTitle,
70  DataSetInfo& theData,
71  const TString& theOption = "");
72 
73  MethodFDA( DataSetInfo& theData,
74  const TString& theWeightFile);
75 
76  virtual ~MethodFDA( void );
77 
78  Bool_t HasAnalysisType( Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets );
79 
80  // training method
81  void Train( void );
82 
84 
85  void AddWeightsXMLTo ( void* parent ) const;
86 
87  void ReadWeightsFromStream( std::istream & i );
88  void ReadWeightsFromXML ( void* wghtnode );
89 
90  // calculate the MVA value
91  Double_t GetMvaValue( Double_t* err = 0, Double_t* errUpper = 0 );
92 
93  virtual const std::vector<Float_t>& GetRegressionValues();
94  virtual const std::vector<Float_t>& GetMulticlassValues();
95 
96  void Init( void );
97 
98  // ranking of input variables
99  const Ranking* CreateRanking() { return 0; }
100 
101  Double_t EstimatorFunction( std::vector<Double_t>& );
102 
103  // no check of options at this place
104  void CheckSetup() {}
105 
106  protected:
107 
108  // make ROOT-independent C++ class for classifier response (classifier-specific implementation)
109  void MakeClassSpecific( std::ostream&, const TString& ) const;
110 
111  // get help message text
112  void GetHelpMessage() const;
113 
114  private:
115 
116  // compute multiclass values
117  void CalculateMulticlassValues( const TMVA::Event*& evt, std::vector<Double_t>& parameters, std::vector<Float_t>& values);
118 
119 
120  // create and interpret formula expression and compute estimator
121  void CreateFormula ();
122  Double_t InterpretFormula( const Event*, std::vector<Double_t>::iterator begin, std::vector<Double_t>::iterator end );
123 
124  // clean up
125  void ClearAll();
126 
127  // print fit results
128  void PrintResults( const TString&, std::vector<Double_t>&, const Double_t ) const;
129 
130  // the option handling methods
131  void DeclareOptions();
132  void ProcessOptions();
133 
134  TString fFormulaStringP; // string with function
135  TString fParRangeStringP; // string with ranges of parameters
136  TString fFormulaStringT; // string with function
137  TString fParRangeStringT; // string with ranges of parameters
138 
139  TFormula* fFormula; // the discrimination function
140  UInt_t fNPars; // number of parameters
141  std::vector<Interval*> fParRange; // ranges of parameters
142  std::vector<Double_t> fBestPars; // the pars that optimise (minimise) the estimator
143  TString fFitMethod; // estimator optimisation method
144  TString fConverger; // fitmethod uses fConverger as intermediate step to converge into local minimas
145  FitterBase* fFitter; // the fitter used in the training
146  IFitterTarget* fConvergerFitter; // intermediate fitter
147 
148 
149  // sum of weights (this should become centrally available through the dataset)
150  Double_t fSumOfWeightsSig; // sum of weights (signal)
151  Double_t fSumOfWeightsBkg; // sum of weights (background)
152  Double_t fSumOfWeights; // sum of weights
153 
154  //
155  Int_t fOutputDimensions; // number of output values
156 
157  ClassDef(MethodFDA,0); // Function Discriminant Analysis
158  };
159 
160 } // namespace TMVA
161 
162 #endif // MethodFDA_H
void Init(void)
default initialisation
Definition: MethodFDA.cxx:121
Double_t fSumOfWeightsBkg
Definition: MethodFDA.h:151
void DeclareOptions()
define the options (their key words) that can be set in the option string
Definition: MethodFDA.cxx:157
void ClearAll()
delete and clear all class members
Definition: MethodFDA.cxx:340
EAnalysisType
Definition: Types.h:129
Double_t InterpretFormula(const Event *, std::vector< Double_t >::iterator begin, std::vector< Double_t >::iterator end)
formula interpretation
Definition: MethodFDA.cxx:495
Basic string class.
Definition: TString.h:137
void CreateFormula()
translate formula string into TFormula, and parameter string into par ranges
Definition: MethodFDA.cxx:177
MethodFDA(const TString &jobName, const TString &methodTitle, DataSetInfo &theData, const TString &theOption="")
standard constructor
Definition: MethodFDA.cxx:83
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
void CheckSetup()
check may be overridden by derived class (sometimes, eg, fitters are used which can only be implement...
Definition: MethodFDA.h:104
TString fFormulaStringP
Definition: MethodFDA.h:134
TString fFitMethod
Definition: MethodFDA.h:143
std::vector< Double_t > fBestPars
Definition: MethodFDA.h:142
#define ClassDef(name, id)
Definition: Rtypes.h:254
Double_t GetMvaValue(Double_t *err=0, Double_t *errUpper=0)
returns MVA value for given event
Definition: MethodFDA.cxx:514
std::vector< Interval * > fParRange
Definition: MethodFDA.h:141
TString fConverger
Definition: MethodFDA.h:144
FitterBase * fFitter
Definition: MethodFDA.h:145
TString fFormulaStringT
Definition: MethodFDA.h:136
void PrintResults(const TString &, std::vector< Double_t > &, const Double_t) const
display fit parameters check maximum length of variable name
Definition: MethodFDA.cxx:415
Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets)
FDA can handle classification with 2 classes and regression with one regression-target.
Definition: MethodFDA.cxx:328
TFormula * fFormula
Definition: MethodFDA.h:139
void GetHelpMessage() const
get help message text
Definition: MethodFDA.cxx:723
const Ranking * CreateRanking()
Definition: MethodFDA.h:99
void MakeClassSpecific(std::ostream &, const TString &) const
write FDA-specific classifier response
Definition: MethodFDA.cxx:678
void CalculateMulticlassValues(const TMVA::Event *&evt, std::vector< Double_t > &parameters, std::vector< Float_t > &values)
calculate the values for multiclass
Definition: MethodFDA.cxx:578
The F O R M U L A class.
Definition: TFormula.h:89
unsigned int UInt_t
Definition: RtypesCore.h:42
IFitterTarget * fConvergerFitter
Definition: MethodFDA.h:146
void ReadWeightsFromXML(void *wghtnode)
read coefficients from xml weight file
Definition: MethodFDA.cxx:639
void Train(void)
FDA training.
Definition: MethodFDA.cxx:357
void ProcessOptions()
the option string is decoded, for availabel options see "DeclareOptions"
Definition: MethodFDA.cxx:234
TString fParRangeStringP
Definition: MethodFDA.h:135
void AddWeightsXMLTo(void *parent) const
create XML description for LD classification and regression (for arbitrary number of output classes/t...
Definition: MethodFDA.cxx:621
double Double_t
Definition: RtypesCore.h:55
int type
Definition: TGX11.cxx:120
Double_t EstimatorFunction(std::vector< Double_t > &)
compute estimator for given parameter set (to be minimised) const Double_t sumOfWeights[] = { fSumOfW...
Definition: MethodFDA.cxx:431
void ReadWeightsFromStream(std::istream &i)
read back the training results from a file (stream)
Definition: MethodFDA.cxx:606
Int_t fOutputDimensions
Definition: MethodFDA.h:155
Double_t fSumOfWeightsSig
Definition: MethodFDA.h:150
Abstract ClassifierFactory template that handles arbitrary types.
TString fParRangeStringT
Definition: MethodFDA.h:137
virtual const std::vector< Float_t > & GetRegressionValues()
Definition: MethodFDA.cxx:526
virtual const std::vector< Float_t > & GetMulticlassValues()
Definition: MethodFDA.cxx:550
Double_t fSumOfWeights
Definition: MethodFDA.h:152
virtual void ReadWeightsFromStream(std::istream &)=0
virtual ~MethodFDA(void)
destructor
Definition: MethodFDA.cxx:320