51 TMVA::ResultsRegression::ResultsRegression(
const DataSetInfo* dsi, TString resultsName )
52 : Results( dsi, resultsName ),
53 fLogger( new MsgLogger(Form(
"ResultsRegression%s",resultsName.Data()) , kINFO) )
60 TMVA::ResultsRegression::~ResultsRegression()
67 void TMVA::ResultsRegression::SetValue( std::vector<Float_t>& value, Int_t ievt )
69 if (ievt >= (Int_t)fRegValues.size()) fRegValues.resize( ievt+1 );
70 fRegValues[ievt] = value;
75 TH1F* TMVA::ResultsRegression::QuadraticDeviation( UInt_t tgtNum , Bool_t truncate, Double_t truncvalue )
77 DataSet* ds = GetDataSet();
78 ds->SetCurrentType( GetTreeType() );
79 const DataSetInfo* dsi = GetDataSetInfo();
80 TString name( Form(
"tgt_%d",tgtNum) );
81 VariableInfo vinf = dsi->GetTargetInfo(tgtNum);
82 Float_t xmin=0., xmax=0.;
87 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
88 const Event* ev = ds->GetEvent(ievt);
89 std::vector<Float_t> regVal = fRegValues.at(ievt);
90 Float_t val = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
92 xmax = val> xmax? val: xmax;
97 TH1F* h =
new TH1F( name, name, nbins, xmin, xmax);
99 h->GetXaxis()->SetTitle(
"Quadratic Deviation");
100 h->GetYaxis()->SetTitle(
"Weighted Entries");
102 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
103 const Event* ev = ds->GetEvent(ievt);
104 std::vector<Float_t> regVal = fRegValues.at(ievt);
105 Float_t val = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
107 Float_t weight = ev->GetWeight();
108 if (!truncate || val<=truncvalue ) h->Fill( val, weight);
115 TH2F* TMVA::ResultsRegression::DeviationAsAFunctionOf( UInt_t varNum, UInt_t tgtNum )
117 DataSet* ds = GetDataSet();
118 ds->SetCurrentType( GetTreeType() );
120 TString name( Form(
"tgt_%d_var_%d",tgtNum, varNum) );
121 const DataSetInfo* dsi = GetDataSetInfo();
123 Bool_t takeTargets = kFALSE;
124 if (varNum >= dsi->GetNVariables()) {
126 varNum -= dsi->GetNVariables();
129 VariableInfo vinf = dsi->GetVariableInfo(varNum);
130 xmin = vinf.GetMin();
131 xmax = vinf.GetMax();
133 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
134 const Event* ev = ds->GetEvent(ievt);
135 Float_t val = ev->GetValue(varNum);
137 if (val < xmin ) xmin = val;
138 if (val > xmax ) xmax = val;
143 VariableInfo vinf = dsi->GetTargetInfo(varNum);
144 xmin = vinf.GetMin();
145 xmax = vinf.GetMax();
147 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
148 const Event* ev = ds->GetEvent(ievt);
149 Float_t val = ev->GetTarget(varNum);
151 if (val < xmin ) xmin = val;
152 if (val > xmax ) xmax = val;
156 Float_t ymin = FLT_MAX;
157 Float_t ymax = -FLT_MAX;
159 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
160 const Event* ev = ds->GetEvent(ievt);
161 std::vector<Float_t> regVal = fRegValues.at(ievt);
163 Float_t diff = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
164 if (diff < ymin ) ymin = diff;
165 if (diff > ymax ) ymax = diff;
171 Float_t epsilon = TMath::Abs(xmax-xmin)/((Float_t)nxbins-1);
172 xmin -= 1.01*epsilon;
173 xmax += 1.01*epsilon;
175 epsilon = (ymax-ymin)/((Float_t)nybins-1);
176 ymin -= 1.01*epsilon;
177 ymax += 1.01*epsilon;
180 TH2F* h =
new TH2F( name, name, nxbins, xmin, xmax, nybins, ymin, ymax );
183 h->GetXaxis()->SetTitle( (takeTargets ? dsi->GetTargetInfo(varNum).GetTitle() : dsi->GetVariableInfo(varNum).GetTitle() ) );
184 TString varName( dsi->GetTargetInfo(tgtNum).GetTitle() );
185 TString yName( varName+TString(
"_{regression} - ") + varName+TString(
"_{true}") );
186 h->GetYaxis()->SetTitle( yName );
188 for (Int_t ievt=0; ievt<ds->GetNEvents(); ievt++) {
189 const Event* ev = ds->GetEvent(ievt);
190 std::vector<Float_t> regVal = fRegValues.at(ievt);
192 Float_t xVal = (takeTargets?ev->GetTarget( varNum ):ev->GetValue( varNum ));
193 Float_t yVal = regVal.at( tgtNum ) - ev->GetTarget( tgtNum );
195 h->Fill( xVal, yVal );
203 void TMVA::ResultsRegression::CreateDeviationHistograms( TString prefix )
205 Log() << kINFO <<
"Create variable histograms" << Endl;
206 const DataSetInfo* dsi = GetDataSetInfo();
208 for (UInt_t ivar = 0; ivar < dsi->GetNVariables(); ivar++) {
209 for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
210 TH2F* h = DeviationAsAFunctionOf( ivar, itgt );
211 TString name( Form(
"%s_reg_var%d_rtgt%d",prefix.Data(),ivar,itgt) );
217 Log() << kINFO <<
"Create regression target histograms" << Endl;
218 for (UInt_t ivar = 0; ivar < dsi->GetNTargets(); ivar++) {
219 for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
220 TH2F* h = DeviationAsAFunctionOf( dsi->GetNVariables()+ivar, itgt );
221 TString name( Form(
"%s_reg_tgt%d_rtgt%d",prefix.Data(),ivar,itgt) );
228 Log() << kINFO <<
"Create regression average deviation" << Endl;
229 for (UInt_t itgt = 0; itgt < dsi->GetNTargets(); itgt++) {
230 TH1F* h = QuadraticDeviation(itgt);
231 TString name( Form(
"%s_Quadr_Deviation_target_%d_",prefix.Data(),itgt) );
234 Double_t yq[1], xq[]={0.9};
235 h->GetQuantiles(1,yq,xq);
238 TH1F* htrunc = QuadraticDeviation(itgt,
true, yq[0]);
239 TString name2( Form(
"%s_Quadr_Dev_best90perc_target_%d_",prefix.Data(),itgt) );
240 htrunc->SetName( name2 );
241 htrunc->SetTitle( name2 );
244 Log() << kINFO <<
"Results created" << Endl;