50void TMVARegression(
TString myMethodList =
"" )
68 std::map<std::string,int> Use;
107 std::cout << std::endl;
108 std::cout <<
"==> Start TMVARegression" << std::endl;
111 if (myMethodList !=
"") {
112 for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) it->second = 0;
114 std::vector<TString> mlist =
gTools().SplitString( myMethodList,
',' );
115 for (
UInt_t i=0; i<mlist.size(); i++) {
116 std::string regMethod(mlist[i].Data());
118 if (Use.find(regMethod) == Use.end()) {
119 std::cout <<
"Method \"" << regMethod <<
"\" not known in TMVA under this name. Choose among the following:" << std::endl;
120 for (std::map<std::string,int>::iterator it = Use.begin(); it != Use.end(); it++) std::cout << it->first <<
" ";
121 std::cout << std::endl;
133 TString outfileName(
"TMVAReg.root" );
147 "!V:!Silent:Color:DrawProgressBar:AnalysisType=Regression" );
160 dataloader->
AddVariable(
"var1",
"Variable 1",
"units",
'F' );
161 dataloader->
AddVariable(
"var2",
"Variable 2",
"units",
'F' );
166 dataloader->
AddSpectator(
"spec1:=var1*2",
"Spectator 1",
"units",
'F' );
167 dataloader->
AddSpectator(
"spec2:=var1*3",
"Spectator 2",
"units",
'F' );
178 TFile *input(
nullptr);
179 TString fname =
gROOT->GetTutorialDir() +
"/machine_learning/data/tmva_reg_example.root";
180 if (!
gSystem->AccessPathName( fname )) {
184 std::cout <<
"ERROR: could not open data file" << std::endl;
187 std::cout <<
"--- TMVARegression : Using input file: " << input->GetName() << std::endl;
208 "nTrain_Regression=1000:nTest_Regression=0:SplitMode=Random:NormMode=NumEvents:!V" );
228 "!H:!V:NormTree=T:VolumeRangeMode=Adaptive:KernelEstimator=Gauss:GaussSigma=0.3:NEventsMin=40:NEventsMax=60:VarTransform=None" );
236 "!H:!V:MultiTargetRegression=F:TargetSelection=Mpv:TailCut=0.001:VolFrac=0.0666:nActiveCells=500:nSampl=2000:nBin=5:Compress=T:Kernel=None:Nmin=10:VarTransform=None" );
241 "nkNN=20:ScaleFrac=0.8:SigmaFact=1.0:Kernel=Gaus:UseKernel=F:UseWeight=T:!Trim" );
246 "!H:!V:VarTransform=None" );
251 "!H:!V:Formula=(0)+(1)*x0+(2)*x1:ParRanges=(-100,100);(-100,100);(-100,100):FitMethod=MC:SampleSize=100000:Sigma=0.1:VarTransform=D" );
255 "!H:!V:Formula=(0)+(1)*x0+(2)*x1:ParRanges=(-100,100);(-100,100);(-100,100):FitMethod=GA:PopSize=100:Cycles=3:Steps=30:Trim=True:SaveBestGen=1:VarTransform=Norm" );
259 "!H:!V:Formula=(0)+(1)*x0+(2)*x1:ParRanges=(-100,100);(-100,100);(-100,100);(-10,10):FitMethod=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=2:UseImprove:UseMinos:SetBatch" );
263 "!H:!V:Formula=(0)+(1)*x0+(2)*x1:ParRanges=(-100,100);(-100,100);(-100,100):FitMethod=GA:Converger=MINUIT:ErrorLevel=1:PrintLevel=-1:FitStrategy=0:!UseImprove:!UseMinos:SetBatch:Cycles=1:PopSize=5:Steps=5:Trim" );
267 factory->
BookMethod( dataloader,
TMVA::Types::kMLP,
"MLP",
"!H:!V:VarTransform=Norm:NeuronType=tanh:NCycles=20000:HiddenLayers=N+20:TestRate=6:TrainingMethod=BFGS:Sampling=0.3:SamplingEpoch=0.8:ConvergenceImprove=1e-6:ConvergenceTests=15:!UseRegulator" );
269 if (Use[
"DNN_CPU"] || Use[
"DNN_GPU"]) {
271 TString archOption = Use[
"DNN_GPU"] ?
"GPU" :
"CPU";
273 TString layoutString(
"Layout=TANH|50,TANH|50,TANH|50,LINEAR");
276 TString trainingStrategyString(
"TrainingStrategy=");
278 trainingStrategyString +=
"LearningRate=1e-3,Momentum=0.3,ConvergenceSteps=20,BatchSize=50,TestRepetitions=1,WeightDecay=0.0,Regularization=None,Optimizer=Adam";
280 TString nnOptions(
"!H:V:ErrorStrategy=SUMOFSQUARES:VarTransform=G:WeightInitialization=XAVIERUNIFORM:Architecture=");
281 nnOptions.Append(archOption);
282 nnOptions.Append(
":");
283 nnOptions.Append(layoutString);
284 nnOptions.Append(
":");
285 nnOptions.Append(trainingStrategyString);
301 "!H:!V:NTrees=100:MinNodeSize=1.0%:BoostType=AdaBoostR2:SeparationType=RegressionVariance:nCuts=20:PruneMethod=CostComplexity:PruneStrength=30" );
305 "!H:!V:NTrees=2000::BoostType=Grad:Shrinkage=0.1:UseBaggedBoost:BaggedSampleFraction=0.5:nCuts=20:MaxDepth=3:MaxDepth=4" );
324 std::cout <<
"==> Wrote root file: " << outputFile->
GetName() << std::endl;
325 std::cout <<
"==> TMVARegression is done!" << std::endl;
334int main(
int argc,
char** argv )
338 for (
int i=1; i<argc; i++) {
340 if(regMethod==
"-b" || regMethod==
"--batch")
continue;
342 methodList += regMethod;
344 TMVARegression(methodList);
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
double Double_t
Double 8 bytes.
A specialized string object used for TTree selections.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
void Close(Option_t *option="") override
Close a file.
void AddSpectator(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0)
user inserts target in data set info
void AddRegressionTree(TTree *tree, Double_t weight=1.0, Types::ETreeType treetype=Types::kMaxTreeType)
void SetWeightExpression(const TString &variable, const TString &className="")
void PrepareTrainingAndTestTree(const TCut &cut, const TString &splitOpt)
prepare the training and test trees -> same cuts for signal and background
void AddTarget(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0)
user inserts target in data set info
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
This is the main MVA steering class.
void TrainAllMethods()
Iterates through all booked methods and calls training.
void TestAllMethods()
Evaluates all booked methods on the testing data and adds the output to the Results in the corresponi...
void EvaluateAllMethods(void)
Iterates over all MVAs that have been booked, and calls their evaluation methods.
MethodBase * BookMethod(DataLoader *loader, MethodName theMethodName, TString methodTitle, TString theOption="")
Books an MVA classifier or regression method.
const char * GetName() const override
Returns name of object.
A TTree represents a columnar dataset.
create variable transformations
void TMVARegGui(const char *fName="TMVAReg.root", TString dataset="")