Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
MethodFisher.h
Go to the documentation of this file.
1 // @(#)root/tmva $Id$
2 // Author: Andreas Hoecker, Xavier Prudent, Joerg Stelzer, Helge Voss, Kai Voss
3 
4 /**********************************************************************************
5  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis *
6  * Package: TMVA *
7  * Class : MethodFisher *
8  * Web : http://tmva.sourceforge.net *
9  * *
10  * Description: *
11  * Analysis of Fisher discriminant (Fisher or Mahalanobis approach) *
12  * *
13  * Original author of this Fisher-Discriminant implementation: *
14  * Andre Gaidot, CEA-France; *
15  * (Translation from FORTRAN) *
16  * *
17  * Authors (alphabetical): *
18  * Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland *
19  * Xavier Prudent <prudent@lapp.in2p3.fr> - LAPP, France *
20  * Helge Voss <Helge.Voss@cern.ch> - MPI-K Heidelberg, Germany *
21  * Kai Voss <Kai.Voss@cern.ch> - U. of Victoria, Canada *
22  * *
23  * Copyright (c) 2005: *
24  * CERN, Switzerland *
25  * U. of Victoria, Canada *
26  * MPI-K Heidelberg, Germany *
27  * LAPP, Annecy, France *
28  * *
29  * Redistribution and use in source and binary forms, with or without *
30  * modification, are permitted according to the terms listed in LICENSE *
31  * (http://tmva.sourceforge.net/LICENSE) *
32  **********************************************************************************/
33 
34 #ifndef ROOT_TMVA_MethodFisher
35 #define ROOT_TMVA_MethodFisher
36 
37 //////////////////////////////////////////////////////////////////////////
38 // //
39 // MethodFisher //
40 // //
41 // Analysis of Fisher discriminant (Fisher or Mahalanobis approach) //
42 // //
43 //////////////////////////////////////////////////////////////////////////
44 
45 #include <vector>
46 
47 #include "TMVA/MethodBase.h"
48 #include "TMatrixDfwd.h"
49 
50 class TH1D;
51 
52 namespace TMVA {
53 
54  class MethodFisher : public MethodBase {
55 
56  public:
57 
58  MethodFisher( const TString& jobName,
59  const TString& methodTitle,
60  DataSetInfo& dsi,
61  const TString& theOption = "Fisher");
62 
63  MethodFisher( DataSetInfo& dsi,
64  const TString& theWeightFile);
65 
66  virtual ~MethodFisher( void );
67 
68  virtual Bool_t HasAnalysisType( Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets );
69 
70 
71  // training method
72  void Train( void );
73 
74  using MethodBase::ReadWeightsFromStream;
75 
76  // write weights to stream
77  void AddWeightsXMLTo ( void* parent ) const;
78 
79  // read weights from stream
80  void ReadWeightsFromStream( std::istream & i );
81  void ReadWeightsFromXML ( void* wghtnode );
82 
83  // calculate the MVA value
84  Double_t GetMvaValue( Double_t* err = 0, Double_t* errUpper = 0 );
85 
86  enum EFisherMethod { kFisher, kMahalanobis };
87  EFisherMethod GetFisherMethod( void ) { return fFisherMethod; }
88 
89  // ranking of input variables
90  const Ranking* CreateRanking();
91 
92  // nice output
93  void PrintCoefficients( void );
94 
95 
96  protected:
97 
98  // make ROOT-independent C++ class for classifier response (classifier-specific implementation)
99  void MakeClassSpecific( std::ostream&, const TString& ) const;
100 
101  // get help message text
102  void GetHelpMessage() const;
103 
104  private:
105 
106  // the option handling methods
107  void DeclareOptions();
108  void ProcessOptions();
109 
110  // Initialization and allocation of matrices
111  void InitMatrices( void );
112 
113  // get mean value of variables
114  void GetMean( void );
115 
116  // get matrix of covariance within class
117  void GetCov_WithinClass( void );
118 
119  // get matrix of covariance between class
120  void GetCov_BetweenClass( void );
121 
122  // and the full covariance matrix
123  void GetCov_Full( void );
124 
125  // get discriminating power
126  void GetDiscrimPower( void );
127 
128  // get Fisher coefficients
129  void GetFisherCoeff( void );
130 
131  // matrix of variables means: S, B, S+B vs. variables
132  TMatrixD *fMeanMatx;
133 
134  // method to be used
135  TString fTheMethod; // Fisher or Mahalanobis
136  EFisherMethod fFisherMethod; // Fisher or Mahalanobis
137 
138  // covariance matrices
139  TMatrixD *fBetw; // between-class matrix
140  TMatrixD *fWith; // within-class matrix
141  TMatrixD *fCov; // full covariance matrix
142 
143  // number of events (sumOfWeights)
144  Double_t fSumOfWeightsS; // sum-of-weights for signal training events
145  Double_t fSumOfWeightsB; // sum-of-weights for background training events
146 
147  std::vector<Double_t>* fDiscrimPow; // discriminating power
148  std::vector<Double_t>* fFisherCoeff; // Fisher coefficients
149  Double_t fF0; // offset
150 
151  // default initialisation called by all constructors
152  void Init( void );
153 
154  ClassDef(MethodFisher,0); // Analysis of Fisher discriminant (Fisher or Mahalanobis approach)
155  };
156 
157 } // namespace TMVA
158 
159 #endif // MethodFisher_H