TMVA v4.1.2: bug in MethodBDT::SetTuneParameters()?


For BDT with gradient boosting, when running factory->OptimizeAllMethods(), “Shrinkage” is scanned but its value is never reset in each iteration.

In MethodBDT::OptimizeTuningParameters(), it says:

else if (fBoostType==“Grad”){
tuneParameters.insert(std::pair<TString,Interval>(“Shrinkage”, Interval(0.05,0.50,5)));

But in MethodBDT::SetTuneParameters, it says:

for(it=tuneParameters.begin(); it!= tuneParameters.end(); it++){
if (it->first == “MaxDepth” ) SetMaxDepth ((Int_t)it->second);
if (it->first == “NodeMinEvents” ) SetNodeMinEvents ((Int_t)it->second);
if (it->first == “NTrees” ) SetNTrees ((Int_t)it->second);
if (it->first == “NodePurityLimit”) SetNodePurityLimit (it->second);
if (it->first == “AdaBoostBeta” ) SetAdaBoostBeta (it->second);

Scanning this parameter makes OptimizeAllMethods() N times slower. And since the value of the parameter is never reset, this brings us nothing. The same thing goes for the paramter “UseNvars”. On the other hand, “NodePurityLimit” is not scanned but it is reset in every iteration.

Since I didn’t find an existing thread on this, I am writing the post as a bug report. Or, am I missing something?


Hi developers,

Any news on this?