43 fImportanceHist(nullptr)
64 if(fType==VIType::kShort)
66 fLogger<<kINFO<<
"Variable Importance Results (Short)"<<
Endl;
67 }
else if(fType==VIType::kAll)
69 fLogger<<kINFO<<
"Variable Importance Results (All)"<<
Endl;
71 fLogger<<kINFO<<
"Variable Importance Results (Random)"<<
Endl;
74 fImportanceValues.
Print();
83 fImportanceHist->Draw(
"");
84 fImportanceHist->GetXaxis()->SetTitle(
" Variable Names ");
85 fImportanceHist->GetYaxis()->SetTitle(
" Importance (%) ");
94 fClassifier=std::unique_ptr<Factory>(
new TMVA::Factory(
"VariableImportance",
"!V:!ROC:!ModelPersistence:Silent:Color:!DrawProgressBar:AnalysisType=Classification"));
110 if(fType==VIType::kShort)
112 EvaluateImportanceShort();
113 }
else if(fType==VIType::kAll)
115 EvaluateImportanceAll();
117 UInt_t nbits=fDataLoader->GetDefaultDataSetInfo().GetNVariables();
119 Log()<<kERROR<<
"Running variable importance with less that 10 varibales in Random mode "<<
120 "can to produce inconsisten results"<<
Endl;
121 EvaluateImportanceRandom(pow(nbits,2));
123 fResults.fType = fType;
126 Log()<<kINFO<<
"Evaluation done."<<
Endl;
143 TH1F *vihist =
new TH1F(
"vihist",
"", nbits, 0, nbits);
148 for (
UInt_t i = 0; i < nbits; i++) normalization += importances[i];
156 for (
UInt_t i = 1; i < nbits + 1; i++) {
157 roc = 100.0 * importances[i - 1] / normalization;
186 for (
auto &meth : fMethods) {
194 const UInt_t nbits = fDataLoader->GetDefaultDataSetInfo().GetNVariables();
195 std::vector<TString> varNames = fDataLoader->GetDefaultDataSetInfo().GetListOfVariables();
200 std::vector<Float_t> importances(nbits);
201 for (
UInt_t i = 0; i < nbits; i++)
208 std::bitset<NBITS> xbitset(
x);
210 Log() << kFATAL <<
"Error: need at least one variable.";
225 fClassifier->BookMethod(seeddl, methodName, methodTitle, methodOptions);
228 fClassifier->TrainAllMethods();
229 fClassifier->TestAllMethods();
230 fClassifier->EvaluateAllMethods();
233 SROC = fClassifier->GetROCIntegral(xbitset.to_string(), methodTitle);
236 fClassifier->DeleteAllMethods();
237 fClassifier->fMethodsMap.clear();
239 for (uint32_t i = 0; i <
NBITS; ++i) {
242 std::bitset<NBITS> ybitset(
y);
248 importances[ny] = SROC - 0.5;
263 fClassifier->BookMethod(subseeddl, methodName, methodTitle, methodOptions);
266 fClassifier->TrainAllMethods();
267 fClassifier->TestAllMethods();
268 fClassifier->EvaluateAllMethods();
271 SSROC = fClassifier->GetROCIntegral(ybitset.to_string(), methodTitle);
272 importances[ny] += SROC - SSROC;
275 fClassifier->DeleteAllMethods();
276 fClassifier->fMethodsMap.clear();
280 for (
UInt_t i = 0; i < nbits; i++) normalization += importances[i];
282 for(
UInt_t i=0;i<nbits;i++){
284 fResults.fImportanceValues[varNames[i]]=(100.0 * importances[i] / normalization);
286 fResults.fImportanceValues[varNames[i]]=fResults.fImportanceValues.GetValue<
TString>(varNames[i])+
" % ";
288 fResults.fImportanceHist = std::shared_ptr<TH1F>(GetImportance(nbits,importances,varNames));
296 for (
auto &meth : fMethods) {
308 const UInt_t nbits = fDataLoader->GetDefaultDataSetInfo().GetNVariables();
309 std::vector<TString> varNames = fDataLoader->GetDefaultDataSetInfo().GetListOfVariables();
314 std::vector<Float_t> importances(nbits);
316 for (
UInt_t i = 0; i < nbits; i++)
324 x = rangen->Integer(range);
326 std::bitset<NBITS> xbitset(
x);
342 fClassifier->BookMethod(seeddl, methodName, methodTitle, methodOptions);
345 fClassifier->TrainAllMethods();
346 fClassifier->TestAllMethods();
347 fClassifier->EvaluateAllMethods();
350 SROC = fClassifier->GetROCIntegral(xbitset.to_string(), methodTitle);
353 fClassifier->DeleteAllMethods();
354 fClassifier->fMethodsMap.clear();
356 for (uint32_t i = 0; i < 32; ++i) {
359 std::bitset<NBITS> ybitset(
y);
365 importances[ny] = SROC - 0.5;
380 fClassifier->BookMethod(subseeddl, methodName, methodTitle, methodOptions);
383 fClassifier->TrainAllMethods();
384 fClassifier->TestAllMethods();
385 fClassifier->EvaluateAllMethods();
388 SSROC = fClassifier->GetROCIntegral(ybitset.to_string(), methodTitle);
389 importances[ny] += SROC - SSROC;
392 fClassifier->DeleteAllMethods();
393 fClassifier->fMethodsMap.clear();
399 for (
UInt_t i = 0; i < nbits; i++) normalization += importances[i];
401 for(
UInt_t i=0;i<nbits;i++){
403 fResults.fImportanceValues[varNames[i]]=(100.0 * importances[i] / normalization);
405 fResults.fImportanceValues[varNames[i]]=fResults.fImportanceValues.GetValue<
TString>(varNames[i])+
" % ";
407 fResults.fImportanceHist = std::shared_ptr<TH1F>(GetImportance(nbits,importances,varNames));
416 for (
auto &meth : fMethods) {
425 const UInt_t nbits = fDataLoader->GetDefaultDataSetInfo().GetNVariables();
426 std::vector<TString> varNames = fDataLoader->GetDefaultDataSetInfo().GetListOfVariables();
431 std::vector<Float_t> importances(nbits);
434 std::vector<Float_t> ROC(range);
436 for (
UInt_t i = 0; i < nbits; i++)
440 for (
x = 1;
x < range;
x++) {
442 std::bitset<NBITS> xbitset(
x);
456 seeddl->
PrepareTrainingAndTestTree(fDataLoader->GetDefaultDataSetInfo().GetCut(
"Signal"), fDataLoader->GetDefaultDataSetInfo().GetCut(
"Background"), fDataLoader->GetDefaultDataSetInfo().GetSplitOptions());
459 fClassifier->BookMethod(seeddl, methodName, methodTitle, methodOptions);
462 fClassifier->TrainAllMethods();
463 fClassifier->TestAllMethods();
464 fClassifier->EvaluateAllMethods();
467 ROC[
x] = fClassifier->GetROCIntegral(xbitset.to_string(), methodTitle);
470 fClassifier->DeleteAllMethods();
471 fClassifier->fMethodsMap.clear();
475 for (
x = 0;
x <range ;
x++)
478 for (uint32_t i = 0; i <
NBITS; ++i) {
481 std::bitset<NBITS> ybitset(
y);
485 importances[ny] = SROC - 0.5;
491 importances[ny] += SROC - SSROC;
497 for (
UInt_t i = 0; i < nbits; i++) normalization += importances[i];
499 for(
UInt_t i=0;i<nbits;i++){
501 fResults.fImportanceValues[varNames[i]]=(100.0 * importances[i] / normalization);
503 fResults.fImportanceValues[varNames[i]]=fResults.fImportanceValues.GetValue<
TString>(varNames[i])+
" % ";
505 fResults.fImportanceHist = std::shared_ptr<TH1F>(GetImportance(nbits,importances,varNames));
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
float Float_t
Float 4 bytes (float)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
R__EXTERN TStyle * gStyle
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
virtual void SetTitleSize(Float_t size=0.04)
Set size of axis title.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetBinLabel(Int_t bin, const char *label)
Set label for bin.
void CenterTitle(Bool_t center=kTRUE)
Center axis title.
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
Set the viewing range for the axis from ufirst to ulast (in user coordinates, that is,...
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
1-D histogram with a float per channel (see TH1 documentation)
virtual void SetDirectory(TDirectory *dir)
By default, when a histogram is created, it is added to the list of histogram objects in the current ...
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Sort bins with labels or set option(s) to draw axis with labels.
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual void SetBarWidth(Float_t width=0.5)
Set the width of bars as fraction of the bin width for drawing mode "B".
void PrepareTrainingAndTestTree(const TCut &cut, const TString &splitOpt)
prepare the training and test trees -> same cuts for signal and background
void AddVariable(const TString &expression, const TString &title, const TString &unit, char type='F', Double_t min=0, Double_t max=0)
user inserts discriminating variable in data set info
Abstract base class for all high level ml algorithms, you can book ml methods like BDT,...
This is the main MVA steering class.
ostringstream derivative to redirect and format output
static void EnableOutput()
std::shared_ptr< TH1F > fImportanceHist
TCanvas * Draw(const TString name="VariableImportance") const
VariableImportanceResult()
OptionMap fImportanceValues
void Evaluate() override
Virtual method to be implemented with your algorithm.
std::unique_ptr< Factory > fClassifier
void EvaluateImportanceShort()
void EvaluateImportanceRandom(UInt_t nseeds)
VariableImportance(DataLoader *loader)
TH1F * GetImportance(const UInt_t nbits, std::vector< Float_t > &importances, std::vector< TString > &varNames)
void EvaluateImportanceAll()
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
Random number generator class based on M.
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
void SetTitleXOffset(Float_t offset=1)
create variable transformations
void DataLoaderCopy(TMVA::DataLoader *des, TMVA::DataLoader *src)
MsgLogger & Endl(MsgLogger &ml)
static uint64_t sum(uint64_t i)