ResultsRegression.cxx

Go to the documentation of this file.
00001 // @(#)root/tmva $Id: ResultsRegression.cxx 31458 2009-11-30 13:58:20Z stelzer $
00002 // Author: Andreas Hoecker, Peter Speckmayer, Joerg Stelzer, Helge Voss
00003 
00004 /**********************************************************************************
00005  * Project: TMVA - a Root-integrated toolkit for multivariate data analysis       *
00006  * Package: TMVA                                                                  *
00007  * Class  : ResultsRegression                                                     *
00008  * Web    : http://tmva.sourceforge.net                                           *
00009  *                                                                                *
00010  * Description:                                                                   *
00011  *      Implementation (see header for description)                               *
00012  *                                                                                *
00013  * Authors (alphabetical):                                                        *
00014  *      Andreas Hoecker <Andreas.Hocker@cern.ch> - CERN, Switzerland              *
00015  *      Peter Speckmayer <Peter.Speckmayer@cern.ch>  - CERN, Switzerland          *
00016  *      Joerg Stelzer   <Joerg.Stelzer@cern.ch>  - CERN, Switzerland              *
00017  *      Helge Voss      <Helge.Voss@cern.ch>     - MPI-K Heidelberg, Germany      *
00018  *                                                                                *
00019  * Copyright (c) 2006:                                                            *
00020  *      CERN, Switzerland                                                         *
00021  *      MPI-K Heidelberg, Germany                                                 *
00022  *                                                                                *
00023  * Redistribution and use in source and binary forms, with or without             *
00024  * modification, are permitted according to the terms listed in LICENSE           *
00025  * (http://tmva.sourceforge.net/LICENSE)                                          *
00026  **********************************************************************************/
00027 
00028 #include <vector>
00029 
00030 #include "TMVA/ResultsRegression.h"
00031 #include "TMVA/MsgLogger.h"
00032 #include "TMVA/DataSet.h"
00033 
00034 //_______________________________________________________________________
00035 TMVA::ResultsRegression::ResultsRegression( const DataSetInfo* dsi ) 
00036    : Results( dsi ),
00037      fLogger( new MsgLogger("ResultsRegression", kINFO) )
00038 {
00039    // constructor
00040 }
00041 
00042 //_______________________________________________________________________
00043 TMVA::ResultsRegression::~ResultsRegression() 
00044 {
00045    // destructor
00046    delete fLogger;
00047 }
00048 
00049 //_______________________________________________________________________
00050 void TMVA::ResultsRegression::SetValue( std::vector<Float_t>& value, Int_t ievt )
00051 {
00052    if (ievt >= (Int_t)fRegValues.size()) fRegValues.resize( ievt+1 );
00053    fRegValues[ievt] = value; 
00054 }
00055 
00056 //_______________________________________________________________________
00057 TH1F*  TMVA::ResultsRegression::QuadraticDeviation( UInt_t tgtNum , Bool_t truncate, Double_t truncvalue )
00058 {
00059    DataSet* ds = GetDataSet();
00060    ds->SetCurrentType( GetTreeType() );
00061    const DataSetInfo* dsi = GetDataSetInfo();
00062    TString name( Form("tgt_%d",tgtNum) );
00063    VariableInfo vinf = dsi->GetTargetInfo(tgtNum);
00064    Float_t xmin=0., xmax=0.;
00065    if (truncate){
00066      xmax = truncvalue;
00067    }
00068    else{
00069      for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00070        Event* ev = ds->GetEvent(ievt);
00071        std::vector<Float_t> regVal = fRegValues.at(ievt);
00072        Float_t val = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
00073        val *= val;
00074        xmax = val> xmax? val: xmax;
00075      } 
00076    }
00077    xmax *= 1.1;
00078    Int_t nbins = 500;
00079    TH1F* h = new TH1F( name, name, nbins, xmin, xmax);
00080    h->SetDirectory(0);
00081    h->GetXaxis()->SetTitle("Quadratic Deviation");
00082    h->GetYaxis()->SetTitle("Weighted Entries");
00083 
00084    for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00085       Event* ev = ds->GetEvent(ievt);
00086       std::vector<Float_t> regVal = fRegValues.at(ievt);
00087       Float_t val = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
00088       val *= val;
00089       Float_t weight = ev->GetWeight();
00090       if (!truncate || val<=truncvalue ) h->Fill( val, weight);
00091    } 
00092    return h;
00093 }
00094 
00095 //_______________________________________________________________________
00096 TH2F*  TMVA::ResultsRegression::DeviationAsAFunctionOf( UInt_t varNum, UInt_t tgtNum )
00097 {
00098    DataSet* ds = GetDataSet();
00099    ds->SetCurrentType( GetTreeType() );
00100    
00101    TString name( Form("tgt_%d_var_%d",tgtNum, varNum) );
00102    const DataSetInfo* dsi = GetDataSetInfo();
00103    Float_t xmin, xmax;
00104    Bool_t takeTargets = kFALSE;
00105    if (varNum >= dsi->GetNVariables()) {
00106       takeTargets = kTRUE;
00107       varNum -= dsi->GetNVariables();
00108    }
00109    if (!takeTargets) {
00110       VariableInfo vinf = dsi->GetVariableInfo(varNum);
00111       xmin = vinf.GetMin();
00112       xmax = vinf.GetMax();
00113 
00114       for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00115          Event* ev = ds->GetEvent(ievt);
00116          Float_t val = ev->GetValue(varNum);
00117 
00118          if (val < xmin ) xmin = val;
00119          if (val > xmax ) xmax = val;
00120       }
00121 
00122    }
00123    else {
00124       VariableInfo vinf = dsi->GetTargetInfo(varNum);
00125       xmin = vinf.GetMin();
00126       xmax = vinf.GetMax();
00127 
00128       for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00129          Event* ev = ds->GetEvent(ievt);
00130          Float_t val = ev->GetTarget(varNum);
00131 
00132          if (val < xmin ) xmin = val;
00133          if (val > xmax ) xmax = val;
00134       }
00135    }
00136 
00137    Float_t ymin = FLT_MAX;
00138    Float_t ymax = -FLT_MAX;
00139 
00140    for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00141       Event* ev = ds->GetEvent(ievt);
00142       std::vector<Float_t> regVal = fRegValues.at(ievt);
00143 
00144       Float_t diff = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
00145       if (diff < ymin ) ymin = diff;
00146       if (diff > ymax ) ymax = diff;
00147    }
00148 
00149    Int_t   nxbins = 50;
00150    Int_t   nybins = 50;
00151 
00152    Float_t epsilon = TMath::Abs(xmax-xmin)/((Float_t)nxbins-1);
00153    xmin -= 1.01*epsilon;
00154    xmax += 1.01*epsilon;
00155 
00156    epsilon = (ymax-ymin)/((Float_t)nybins-1);
00157    ymin -= 1.01*epsilon;
00158    ymax += 1.01*epsilon;
00159 
00160 
00161    TH2F* h = new TH2F( name, name, nxbins, xmin, xmax, nybins, ymin, ymax ); 
00162    h->SetDirectory(0);
00163 
00164    h->GetXaxis()->SetTitle( (takeTargets ? dsi->GetTargetInfo(varNum).GetTitle() : dsi->GetVariableInfo(varNum).GetTitle() ) );
00165    TString varName( dsi->GetTargetInfo(tgtNum).GetTitle() );
00166    TString yName( varName+TString("_{regression} - ") + varName+TString("_{true}") );
00167    h->GetYaxis()->SetTitle( yName );
00168 
00169    for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
00170       Event* ev = ds->GetEvent(ievt);
00171       std::vector<Float_t> regVal = fRegValues.at(ievt);
00172 
00173       Float_t xVal = (takeTargets?ev->GetTarget( varNum ):ev->GetValue( varNum ));
00174       Float_t yVal = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
00175 
00176       h->Fill( xVal, yVal );
00177    }
00178 
00179    return h;
00180 }
00181 
00182 //_______________________________________________________________________
00183 void  TMVA::ResultsRegression::CreateDeviationHistograms( TString prefix )
00184 {
00185    Log() << kINFO << "Create variable histograms" << Endl;
00186    const DataSetInfo* dsi = GetDataSetInfo();
00187 
00188    for (UInt_t ivar = 0; ivar < dsi->GetNVariables(); ivar++) {
00189       for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
00190          TH2F* h = DeviationAsAFunctionOf( ivar, itgt );
00191          TString name( Form("%s_reg_var%d_rtgt%d",prefix.Data(),ivar,itgt) );
00192          h->SetName( name );
00193          h->SetTitle( name );
00194          Store( h );
00195       }
00196    }
00197    Log() << kINFO << "Create regression target histograms" << Endl;
00198    for (UInt_t ivar = 0; ivar < dsi->GetNTargets(); ivar++) {
00199       for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
00200          TH2F* h = DeviationAsAFunctionOf( dsi->GetNVariables()+ivar, itgt );
00201          TString name( Form("%s_reg_tgt%d_rtgt%d",prefix.Data(),ivar,itgt) );
00202          h->SetName( name );
00203          h->SetTitle( name );
00204          Store( h );
00205       }
00206    }
00207 
00208    Log() << kINFO << "Create regression average deviation" << Endl;
00209    for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
00210      TH1F* h =  QuadraticDeviation(itgt);
00211      TString name( Form("%s_Quadr_Deviation_target_%d_",prefix.Data(),itgt) );
00212      h->SetName( name );
00213      h->SetTitle( name );
00214      Double_t yq[1], xq[]={0.9};
00215      h->GetQuantiles(1,yq,xq);
00216      Store( h );
00217 
00218      TH1F* htrunc = QuadraticDeviation(itgt, true, yq[0]);
00219      TString name2( Form("%s_Quadr_Dev_best90perc_target_%d_",prefix.Data(),itgt) );
00220      htrunc->SetName( name2 );
00221      htrunc->SetTitle( name2 );
00222      Store( htrunc );
00223    }
00224    Log() << kINFO << "Results created" << Endl;
00225 }

Generated on Tue Jul 5 15:25:33 2011 for ROOT_528-00b_version by  doxygen 1.5.1