123 Log().InhibitOutput();
147 DeclareOptionRef(color,
"Color",
"Flag for coloured screen output (default: True, if in batch mode: False)");
150 "List of transformations to test; formatting example: \"Transformations=I;D;P;U;G,D\", for identity, "
151 "decorrelation, PCA, Uniform and Gaussianisation followed by decorrelation transformations");
155 "Batch mode: boolean silent flag inhibiting any output from TMVA after the creation of the factory "
156 "class object (default: False)");
158 "Draw progress bar to display training, testing and evaluation schedule (default: True)");
160 "Option to save the trained model in xml file or using serialization");
164 "Set the analysis type (Classification, Regression, Multiclass, Auto) (default: Auto)");
188 if (analysisType ==
"classification")
190 else if (analysisType ==
"regression")
192 else if (analysisType ==
"multiclass")
194 else if (analysisType ==
"auto")
213 Log().InhibitOutput();
237 DeclareOptionRef(color,
"Color",
"Flag for coloured screen output (default: True, if in batch mode: False)");
240 "List of transformations to test; formatting example: \"Transformations=I;D;P;U;G,D\", for identity, "
241 "decorrelation, PCA, Uniform and Gaussianisation followed by decorrelation transformations");
245 "Batch mode: boolean silent flag inhibiting any output from TMVA after the creation of the factory "
246 "class object (default: False)");
248 "Draw progress bar to display training, testing and evaluation schedule (default: True)");
250 "Option to save the trained model in xml file or using serialization");
254 "Set the analysis type (Classification, Regression, Multiclass, Auto) (default: Auto)");
278 if (analysisType ==
"classification")
280 else if (analysisType ==
"regression")
282 else if (analysisType ==
"multiclass")
284 else if (analysisType ==
"auto")
307 std::vector<TMVA::VariableTransformBase *>::iterator trfIt =
fDefaultTrfs.begin();
325 std::map<TString, MVector *>::iterator itrMap;
328 MVector *methods = itrMap->second;
330 MVector::iterator itrMethod = methods->begin();
331 for (; itrMethod != methods->end(); ++itrMethod) {
332 Log() << kDEBUG <<
"Delete method: " << (*itrMethod)->GetName() <<
Endl;
380 if (
GetMethod(datasetname, methodTitle) != 0) {
381 Log() << kFATAL <<
"Booking failed since method with title <" << methodTitle <<
"> already exists "
382 <<
"in with DataSet Name <" << loader->
GetName() <<
"> " <<
Endl;
394 conf->
DeclareOptionRef(boostNum = 0,
"Boost_num",
"Number of times the classifier will be boosted");
404 if (fileDir[fileDir.
Length() - 1] !=
'/')
416 Log() << kDEBUG <<
"Boost Number is " << boostNum <<
" > 0: train boosted classifier" <<
Endl;
420 Log() << kFATAL <<
"Method with type kBoost cannot be casted to MethodCategory. /Factory" <<
Endl;
440 Log() << kFATAL <<
"Method with type kCategory cannot be casted to MethodCategory. /Factory"
454 Log() << kWARNING <<
"Method " << method->
GetMethodTypeName() <<
" is not capable of handling ";
498 std::string methodTypeName = std::string(
Types::Instance().GetMethodName(methodType).Data());
504 if (method ==
nullptr)
508 Log() << kERROR <<
"Cannot handle category methods for now." <<
Endl;
517 if (fileDir[fileDir.
Length() - 1] !=
'/')
539 if (
HasMethod(datasetname, methodTitle) != 0) {
540 Log() << kFATAL <<
"Booking failed since method with title <" << methodTitle <<
"> already exists "
541 <<
"in with DataSet Name <" << loader->
GetName() <<
"> " <<
Endl;
544 Log() << kINFO <<
"Booked classifier \"" << method->
GetMethodName() <<
"\" of type: \""
567 MVector::const_iterator itrMethod;
569 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
585 std::string methodName = methodTitle.
Data();
586 auto isEqualToMethodName = [&methodName](
TMVA::IMethod *
m) {
return (0 == methodName.compare(
m->GetName())); };
589 Bool_t isMethodNameExisting = std::any_of(methods->begin(), methods->end(), isEqualToMethodName);
591 return isMethodNameExisting;
654 std::vector<TMVA::TransformationHandler *> trfs;
658 std::vector<TString>::iterator trfsDefIt = trfsDef.begin();
659 for (; trfsDefIt != trfsDef.end(); ++trfsDefIt) {
664 Log() << kDEBUG <<
"current transformation string: '" << trfS.
Data() <<
"'" <<
Endl;
668 identityTrHandler = trfs.back();
674 std::vector<TMVA::TransformationHandler *>::iterator trfIt = trfs.begin();
676 for (; trfIt != trfs.end(); ++trfIt) {
679 (*trfIt)->CalcTransformations(inputEvents);
681 if (identityTrHandler)
685 for (trfIt = trfs.begin(); trfIt != trfs.end(); ++trfIt)
698 std::map<TString, MVector *>::iterator itrMap;
699 std::map<TString, Double_t> TunedParameters;
701 MVector *methods = itrMap->second;
703 MVector::iterator itrMethod;
706 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
710 Log() << kFATAL <<
"Dynamic cast to MethodBase failed" <<
Endl;
711 return TunedParameters;
715 Log() << kWARNING <<
"Method " << mva->
GetMethodName() <<
" not trained (training tree has less entries ["
727 Log() << kINFO <<
"Optimization of tuning parameters finished for Method:" << mva->
GetName() <<
Endl;
731 return TunedParameters;
759 Log() << kERROR <<
Form(
"DataSet = %s not found in methods map.", datasetname.
Data()) <<
Endl;
763 if (!this->
HasMethod(datasetname, theMethodName)) {
764 Log() << kERROR <<
Form(
"Method = %s not found with Dataset = %s ", theMethodName.
Data(), datasetname.
Data())
770 if (allowedAnalysisTypes.count(this->fAnalysisType) == 0) {
771 Log() << kERROR <<
Form(
"Can only generate ROC curves for analysis type kClassification and kMulticlass.")
784 <<
Form(
"Given class number (iClass = %i) does not exist. There are %i classes in dataset.", iClass,
794 std::vector<Bool_t> *mvaResTypes =
dynamic_cast<ResultsClassification *
>(results)->GetValueVectorTypes();
795 std::vector<Float_t> mvaResWeights;
798 mvaResWeights.reserve(eventCollection.size());
799 for (
auto ev : eventCollection) {
800 mvaResWeights.push_back(ev->GetWeight());
803 rocCurve =
new TMVA::ROCCurve(*mvaRes, *mvaResTypes, mvaResWeights);
806 std::vector<Float_t> mvaRes;
807 std::vector<Bool_t> mvaResTypes;
808 std::vector<Float_t> mvaResWeights;
810 std::vector<std::vector<Float_t>> *rawMvaRes =
dynamic_cast<ResultsMulticlass *
>(results)->GetValueVector();
815 mvaRes.reserve(rawMvaRes->size());
816 for (
auto item : *rawMvaRes) {
817 mvaRes.push_back(item[iClass]);
821 mvaResTypes.reserve(eventCollection.size());
822 mvaResWeights.reserve(eventCollection.size());
823 for (
auto ev : eventCollection) {
824 mvaResTypes.push_back(ev->GetClass() == iClass);
825 mvaResWeights.push_back(ev->GetWeight());
828 rocCurve =
new TMVA::ROCCurve(mvaRes, mvaResTypes, mvaResWeights);
859 Log() << kERROR <<
Form(
"DataSet = %s not found in methods map.", datasetname.
Data()) <<
Endl;
863 if (!this->
HasMethod(datasetname, theMethodName)) {
864 Log() << kERROR <<
Form(
"Method = %s not found with Dataset = %s ", theMethodName.
Data(), datasetname.
Data())
870 if (allowedAnalysisTypes.count(this->fAnalysisType) == 0) {
871 Log() << kERROR <<
Form(
"Can only generate ROC integral for analysis type kClassification. and kMulticlass.")
879 <<
Form(
"ROCCurve object was not created in Method = %s not found with Dataset = %s ", theMethodName.
Data(),
930 Log() << kERROR <<
Form(
"DataSet = %s not found in methods map.", datasetname.
Data()) <<
Endl;
934 if (!this->
HasMethod(datasetname, theMethodName)) {
935 Log() << kERROR <<
Form(
"Method = %s not found with Dataset = %s ", theMethodName.
Data(), datasetname.
Data())
941 if (allowedAnalysisTypes.count(this->fAnalysisType) == 0) {
942 Log() << kERROR <<
Form(
"Can only generate ROC curves for analysis type kClassification and kMulticlass.")
952 <<
Form(
"ROCCurve object was not created in Method = %s not found with Dataset = %s ", theMethodName.
Data(),
1006 for (
auto *method_raw : *methods) {
1008 if (method ==
nullptr) {
1017 <<
Form(
"Given class number (iClass = %i) does not exist. There are %i classes in dataset.", iClass,
1025 TGraph *graph = this->
GetROCCurve(datasetname, methodName,
false, iClass, type);
1032 multigraph->
Add(graph);
1036 Log() << kERROR <<
Form(
"No metohds have class %i defined.", iClass) <<
Endl;
1074 Log() << kERROR <<
Form(
"DataSet = %s not found in methods map.", datasetname.
Data()) <<
Endl;
1085 multigraph->
Draw(
"AL");
1099 canvas->
BuildLegend(0.15, 0.15, 0.35, 0.3,
"MVA Method");
1115 Log() << kINFO <<
"...nothing found to train" <<
Endl;
1121 Log() << kDEBUG <<
"Train all methods for "
1127 std::map<TString, MVector *>::iterator itrMap;
1130 MVector *methods = itrMap->second;
1131 MVector::iterator itrMethod;
1134 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1143 Log() << kFATAL <<
"No input data for the training provided!" <<
Endl;
1147 Log() << kFATAL <<
"You want to do regression training without specifying a target." <<
Endl;
1150 Log() << kFATAL <<
"You want to do classification training, but specified less than two classes." <<
Endl;
1157 Log() << kWARNING <<
"Method " << mva->
GetMethodName() <<
" not trained (training tree has less entries ["
1168 Log() << kHEADER <<
"Training finished" <<
Endl <<
Endl;
1175 Log() << kINFO <<
"Ranking input variables (method specific)..." <<
Endl;
1176 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1181 const Ranking *ranking = (*itrMethod)->CreateRanking();
1185 Log() << kINFO <<
"No variable ranking supplied by classifier: "
1193 for (
UInt_t i = 0; i < methods->size(); i++) {
1198 m->fTrainHistory.SaveHistory(
m->GetMethodName());
1208 Log() << kHEADER <<
"=== Destroy and recreate all methods via weight files for testing ===" <<
Endl <<
Endl;
1214 for (
UInt_t i = 0; i < methods->size(); i++) {
1221 TString weightfile =
m->GetWeightFileName();
1228 TString testvarName =
m->GetTestvarName();
1233 Types::Instance().GetMethodName(methodType).Data(), dataSetInfo, weightfile));
1237 Log() << kFATAL <<
"Method with type kCategory cannot be casted to MethodCategory. /Factory" <<
Endl;
1243 TString wfileDir =
m->DataInfo().GetName();
1245 m->SetWeightFileDir(wfileDir);
1250 m->ReadStateFromFile();
1251 m->SetTestvarName(testvarName);
1271 Log() << kINFO <<
"...nothing found to test" <<
Endl;
1274 std::map<TString, MVector *>::iterator itrMap;
1277 MVector *methods = itrMap->second;
1278 MVector::iterator itrMethod;
1281 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1290 : (analysisType ==
Types::kMulticlass ?
"Multiclass classification" :
"Classification"))
1301 if (methodTitle !=
"") {
1306 Log() << kWARNING <<
"<MakeClass> Could not find classifier \"" << methodTitle <<
"\" in list" <<
Endl;
1312 MVector::const_iterator itrMethod;
1313 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1329 if (methodTitle !=
"") {
1334 Log() << kWARNING <<
"<PrintHelpMessage> Could not find classifier \"" << methodTitle <<
"\" in list" <<
Endl;
1340 MVector::const_iterator itrMethod;
1341 for (itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1356 Log() << kINFO <<
"Evaluating all variables..." <<
Endl;
1376 Log() << kINFO <<
"...nothing found to evaluate" <<
Endl;
1379 std::map<TString, MVector *>::iterator itrMap;
1382 MVector *methods = itrMap->second;
1392 Int_t nmeth_used[2] = {0, 0};
1394 std::vector<std::vector<TString>> mname(2);
1395 std::vector<std::vector<Double_t>> sig(2), sep(2), roc(2);
1396 std::vector<std::vector<Double_t>> eff01(2), eff10(2), eff30(2), effArea(2);
1397 std::vector<std::vector<Double_t>> eff01err(2), eff10err(2), eff30err(2);
1398 std::vector<std::vector<Double_t>> trainEff01(2), trainEff10(2), trainEff30(2);
1400 std::vector<std::vector<Float_t>> multiclass_testEff;
1401 std::vector<std::vector<Float_t>> multiclass_trainEff;
1402 std::vector<std::vector<Float_t>> multiclass_testPur;
1403 std::vector<std::vector<Float_t>> multiclass_trainPur;
1405 std::vector<std::vector<Float_t>> train_history;
1408 std::vector<TMatrixD> multiclass_trainConfusionEffB01;
1409 std::vector<TMatrixD> multiclass_trainConfusionEffB10;
1410 std::vector<TMatrixD> multiclass_trainConfusionEffB30;
1411 std::vector<TMatrixD> multiclass_testConfusionEffB01;
1412 std::vector<TMatrixD> multiclass_testConfusionEffB10;
1413 std::vector<TMatrixD> multiclass_testConfusionEffB30;
1415 std::vector<std::vector<Double_t>> biastrain(1);
1416 std::vector<std::vector<Double_t>> biastest(1);
1417 std::vector<std::vector<Double_t>> devtrain(1);
1418 std::vector<std::vector<Double_t>> devtest(1);
1419 std::vector<std::vector<Double_t>> rmstrain(1);
1420 std::vector<std::vector<Double_t>> rmstest(1);
1421 std::vector<std::vector<Double_t>> minftrain(1);
1422 std::vector<std::vector<Double_t>> minftest(1);
1423 std::vector<std::vector<Double_t>> rhotrain(1);
1424 std::vector<std::vector<Double_t>> rhotest(1);
1427 std::vector<std::vector<Double_t>> biastrainT(1);
1428 std::vector<std::vector<Double_t>> biastestT(1);
1429 std::vector<std::vector<Double_t>> devtrainT(1);
1430 std::vector<std::vector<Double_t>> devtestT(1);
1431 std::vector<std::vector<Double_t>> rmstrainT(1);
1432 std::vector<std::vector<Double_t>> rmstestT(1);
1433 std::vector<std::vector<Double_t>> minftrainT(1);
1434 std::vector<std::vector<Double_t>> minftestT(1);
1443 for (MVector::iterator itrMethod = methods->begin(); itrMethod != methods->end(); ++itrMethod) {
1451 methodsNoCuts.push_back(*itrMethod);
1454 doRegression =
kTRUE;
1461 Log() << kINFO <<
"TestRegression (testing)" <<
Endl;
1463 biastest[0].push_back(bias);
1464 devtest[0].push_back(dev);
1465 rmstest[0].push_back(rms);
1466 minftest[0].push_back(mInf);
1467 rhotest[0].push_back(rho);
1468 biastestT[0].push_back(biasT);
1469 devtestT[0].push_back(devT);
1470 rmstestT[0].push_back(rmsT);
1471 minftestT[0].push_back(mInfT);
1473 Log() << kINFO <<
"TestRegression (training)" <<
Endl;
1475 biastrain[0].push_back(bias);
1476 devtrain[0].push_back(dev);
1477 rmstrain[0].push_back(rms);
1478 minftrain[0].push_back(mInf);
1479 rhotrain[0].push_back(rho);
1480 biastrainT[0].push_back(biasT);
1481 devtrainT[0].push_back(devT);
1482 rmstrainT[0].push_back(rmsT);
1483 minftrainT[0].push_back(mInfT);
1488 Log() << kDEBUG <<
"\tWrite evaluation histograms to file" <<
Endl;
1496 doMulticlass =
kTRUE;
1497 Log() << kINFO <<
"Evaluate multiclass classification method: " << theMethod->
GetMethodName() <<
Endl;
1517 Log() << kDEBUG <<
"\tWrite evaluation histograms to file" <<
Endl;
1540 eff01err[isel].push_back(
err);
1542 eff10err[isel].push_back(
err);
1544 eff30err[isel].push_back(
err);
1547 trainEff01[isel].push_back(
1555 Log() << kDEBUG <<
"\tWrite evaluation histograms to file" <<
Endl;
1563 std::vector<TString> vtemps = mname[0];
1564 std::vector<std::vector<Double_t>> vtmp;
1565 vtmp.push_back(devtest[0]);
1566 vtmp.push_back(devtrain[0]);
1567 vtmp.push_back(biastest[0]);
1568 vtmp.push_back(biastrain[0]);
1569 vtmp.push_back(rmstest[0]);
1570 vtmp.push_back(rmstrain[0]);
1571 vtmp.push_back(minftest[0]);
1572 vtmp.push_back(minftrain[0]);
1573 vtmp.push_back(rhotest[0]);
1574 vtmp.push_back(rhotrain[0]);
1575 vtmp.push_back(devtestT[0]);
1576 vtmp.push_back(devtrainT[0]);
1577 vtmp.push_back(biastestT[0]);
1578 vtmp.push_back(biastrainT[0]);
1579 vtmp.push_back(rmstestT[0]);
1580 vtmp.push_back(rmstrainT[0]);
1581 vtmp.push_back(minftestT[0]);
1582 vtmp.push_back(minftrainT[0]);
1585 devtest[0] = vtmp[0];
1586 devtrain[0] = vtmp[1];
1587 biastest[0] = vtmp[2];
1588 biastrain[0] = vtmp[3];
1589 rmstest[0] = vtmp[4];
1590 rmstrain[0] = vtmp[5];
1591 minftest[0] = vtmp[6];
1592 minftrain[0] = vtmp[7];
1593 rhotest[0] = vtmp[8];
1594 rhotrain[0] = vtmp[9];
1595 devtestT[0] = vtmp[10];
1596 devtrainT[0] = vtmp[11];
1597 biastestT[0] = vtmp[12];
1598 biastrainT[0] = vtmp[13];
1599 rmstestT[0] = vtmp[14];
1600 rmstrainT[0] = vtmp[15];
1601 minftestT[0] = vtmp[16];
1602 minftrainT[0] = vtmp[17];
1603 }
else if (doMulticlass) {
1610 for (
Int_t k = 0; k < 2; k++) {
1611 std::vector<std::vector<Double_t>> vtemp;
1612 vtemp.push_back(effArea[k]);
1613 vtemp.push_back(eff10[k]);
1614 vtemp.push_back(eff01[k]);
1615 vtemp.push_back(eff30[k]);
1616 vtemp.push_back(eff10err[k]);
1617 vtemp.push_back(eff01err[k]);
1618 vtemp.push_back(eff30err[k]);
1619 vtemp.push_back(trainEff10[k]);
1620 vtemp.push_back(trainEff01[k]);
1621 vtemp.push_back(trainEff30[k]);
1622 vtemp.push_back(sig[k]);
1623 vtemp.push_back(sep[k]);
1624 vtemp.push_back(roc[k]);
1625 std::vector<TString> vtemps = mname[k];
1627 effArea[k] = vtemp[0];
1628 eff10[k] = vtemp[1];
1629 eff01[k] = vtemp[2];
1630 eff30[k] = vtemp[3];
1631 eff10err[k] = vtemp[4];
1632 eff01err[k] = vtemp[5];
1633 eff30err[k] = vtemp[6];
1634 trainEff10[k] = vtemp[7];
1635 trainEff01[k] = vtemp[8];
1636 trainEff30[k] = vtemp[9];
1651 const Int_t nmeth = methodsNoCuts.size();
1654 if (!doRegression && !doMulticlass) {
1660 std::vector<Double_t> rvec;
1667 std::vector<TString> *theVars =
new std::vector<TString>;
1668 std::vector<ResultsClassification *> mvaRes;
1669 for (MVector::iterator itrMethod = methodsNoCuts.begin(); itrMethod != methodsNoCuts.end();
1674 theVars->push_back(
m->GetTestvarName());
1675 rvec.push_back(
m->GetSignalReferenceCut());
1676 theVars->back().ReplaceAll(
"MVA_",
"");
1695 for (
Int_t im = 0; im < nmeth; im++) {
1699 Log() << kWARNING <<
"Found NaN return value in event: " << ievt <<
" for method \""
1700 << methodsNoCuts[im]->GetName() <<
"\"" <<
Endl;
1705 for (
Int_t iv = 0; iv < nvar; iv++)
1716 for (
Int_t im = 0; im < nmeth; im++) {
1717 for (
Int_t jm = im; jm < nmeth; jm++) {
1718 if ((dvec[im] - rvec[im]) * (dvec[jm] - rvec[jm]) > 0) {
1719 (*theMat)(im, jm)++;
1721 (*theMat)(jm, im)++;
1741 if (corrMatS != 0 && corrMatB != 0) {
1746 for (
Int_t im = 0; im < nmeth; im++) {
1747 for (
Int_t jm = 0; jm < nmeth; jm++) {
1748 mvaMatS(im, jm) = (*corrMatS)(im, jm);
1749 mvaMatB(im, jm) = (*corrMatB)(im, jm);
1754 std::vector<TString> theInputVars;
1757 for (
Int_t iv = 0; iv < nvar; iv++) {
1759 for (
Int_t jm = 0; jm < nmeth; jm++) {
1760 varmvaMatS(iv, jm) = (*corrMatS)(nmeth + iv, jm);
1761 varmvaMatB(iv, jm) = (*corrMatB)(nmeth + iv, jm);
1768 <<
"Inter-MVA correlation matrix (signal):" <<
Endl;
1773 <<
"Inter-MVA correlation matrix (background):" <<
Endl;
1779 <<
"Correlations between input variables and MVA response (signal):" <<
Endl;
1784 <<
"Correlations between input variables and MVA response (background):" <<
Endl;
1789 <<
"<TestAllMethods> cannot compute correlation matrices" <<
Endl;
1793 <<
"The following \"overlap\" matrices contain the fraction of events for which " <<
Endl;
1795 <<
"the MVAs 'i' and 'j' have returned conform answers about \"signal-likeness\"" <<
Endl;
1797 <<
"An event is signal-like, if its MVA output exceeds the following value:" <<
Endl;
1800 <<
"which correspond to the working point: eff(signal) = 1 - eff(background)" <<
Endl;
1803 if (nmeth != (
Int_t)methods->size())
1805 <<
"Note: no correlations and overlap with cut method are provided at present" <<
Endl;
1810 <<
"Inter-MVA overlap matrix (signal):" <<
Endl;
1815 <<
"Inter-MVA overlap matrix (background):" <<
Endl;
1840 "--------------------------------------------------------------------------------------------------";
1841 Log() << kINFO <<
"Evaluation results ranked by smallest RMS on test sample:" <<
Endl;
1842 Log() << kINFO <<
"(\"Bias\" quotes the mean deviation of the regression from true target." <<
Endl;
1843 Log() << kINFO <<
" \"MutInf\" is the \"Mutual Information\" between regression and target." <<
Endl;
1844 Log() << kINFO <<
" Indicated by \"_T\" are the corresponding \"truncated\" quantities ob-" <<
Endl;
1845 Log() << kINFO <<
" tained when removing events deviating more than 2sigma from average.)" <<
Endl;
1846 Log() << kINFO << hLine <<
Endl;
1849 Log() << kINFO << hLine <<
Endl;
1851 for (
Int_t i = 0; i < nmeth_used[0]; i++) {
1858 (
const char *)mname[0][i], biastest[0][i], biastestT[0][i], rmstest[0][i], rmstestT[0][i],
1859 minftest[0][i], minftestT[0][i])
1862 Log() << kINFO << hLine <<
Endl;
1864 Log() << kINFO <<
"Evaluation results ranked by smallest RMS on training sample:" <<
Endl;
1865 Log() << kINFO <<
"(overtraining check)" <<
Endl;
1866 Log() << kINFO << hLine <<
Endl;
1868 <<
"DataSet Name: MVA Method: <Bias> <Bias_T> RMS RMS_T | MutInf MutInf_T"
1870 Log() << kINFO << hLine <<
Endl;
1872 for (
Int_t i = 0; i < nmeth_used[0]; i++) {
1878 (
const char *)mname[0][i], biastrain[0][i], biastrainT[0][i], rmstrain[0][i], rmstrainT[0][i],
1879 minftrain[0][i], minftrainT[0][i])
1882 Log() << kINFO << hLine <<
Endl;
1884 }
else if (doMulticlass) {
1890 "-------------------------------------------------------------------------------------------------------";
1929 TString header1 =
TString::Format(
"%-15s%-15s%-15s%-15s%-15s%-15s",
"Dataset",
"MVA Method",
"ROC AUC",
"Sig eff@B=0.01",
1930 "Sig eff@B=0.10",
"Sig eff@B=0.30");
1931 TString header2 =
TString::Format(
"%-15s%-15s%-15s%-15s%-15s%-15s",
"Name:",
"/ Class:",
"test (train)",
"test (train)",
1932 "test (train)",
"test (train)");
1934 Log() << kINFO <<
"1-vs-rest performance metrics per class" <<
Endl;
1935 Log() << kINFO << hLine <<
Endl;
1937 Log() << kINFO <<
"Considers the listed class as signal and the other classes" <<
Endl;
1938 Log() << kINFO <<
"as background, reporting the resulting binary performance." <<
Endl;
1939 Log() << kINFO <<
"A score of 0.820 (0.850) means 0.820 was acheived on the" <<
Endl;
1940 Log() << kINFO <<
"test set and 0.850 on the training set." <<
Endl;
1943 Log() << kINFO << header1 <<
Endl;
1944 Log() << kINFO << header2 <<
Endl;
1945 for (
Int_t k = 0; k < 2; k++) {
1946 for (
Int_t i = 0; i < nmeth_used[k]; i++) {
1948 mname[k][i].ReplaceAll(
"Variable_",
"");
1951 const TString datasetName = itrMap->first;
1952 const TString mvaName = mname[k][i];
1955 if (theMethod == 0) {
1961 Log() << kINFO << row <<
Endl;
1962 Log() << kINFO <<
"------------------------------" <<
Endl;
1965 for (
UInt_t iClass = 0; iClass < numClasses; ++iClass) {
1984 effB10Cmp.
Data(), effB30Cmp.
Data());
1985 Log() << kINFO << row <<
Endl;
1987 delete rocCurveTrain;
1988 delete rocCurveTest;
1993 Log() << kINFO << hLine <<
Endl;
2008 for (
UInt_t iCol = 0; iCol < numClasses; ++iCol) {
2012 stream << kINFO << header <<
Endl;
2013 stream << kINFO << headerInfo <<
Endl;
2015 for (
UInt_t iRow = 0; iRow < numClasses; ++iRow) {
2016 stream << kINFO <<
TString::Format(
" %-14s", classnames[iRow].Data());
2018 for (
UInt_t iCol = 0; iCol < numClasses; ++iCol) {
2022 Double_t trainValue = matTraining[iRow][iCol];
2023 Double_t testValue = matTesting[iRow][iCol];
2028 stream << kINFO <<
Endl;
2033 Log() << kINFO <<
"Confusion matrices for all methods" <<
Endl;
2034 Log() << kINFO << hLine <<
Endl;
2036 Log() << kINFO <<
"Does a binary comparison between the two classes given by a " <<
Endl;
2037 Log() << kINFO <<
"particular row-column combination. In each case, the class " <<
Endl;
2038 Log() << kINFO <<
"given by the row is considered signal while the class given " <<
Endl;
2039 Log() << kINFO <<
"by the column index is considered background." <<
Endl;
2041 for (
UInt_t iMethod = 0; iMethod < methods->size(); ++iMethod) {
2043 if (theMethod ==
nullptr) {
2048 std::vector<TString> classnames;
2049 for (
UInt_t iCls = 0; iCls < numClasses; ++iCls) {
2053 <<
"=== Showing confusion matrix for method : " <<
Form(
"%-15s", (
const char *)mname[0][iMethod])
2055 Log() << kINFO <<
"(Signal Efficiency for Background Efficiency 0.01%)" <<
Endl;
2056 Log() << kINFO <<
"---------------------------------------------------" <<
Endl;
2057 printMatrix(multiclass_testConfusionEffB01[iMethod], multiclass_trainConfusionEffB01[iMethod], classnames,
2061 Log() << kINFO <<
"(Signal Efficiency for Background Efficiency 0.10%)" <<
Endl;
2062 Log() << kINFO <<
"---------------------------------------------------" <<
Endl;
2063 printMatrix(multiclass_testConfusionEffB10[iMethod], multiclass_trainConfusionEffB10[iMethod], classnames,
2067 Log() << kINFO <<
"(Signal Efficiency for Background Efficiency 0.30%)" <<
Endl;
2068 Log() << kINFO <<
"---------------------------------------------------" <<
Endl;
2069 printMatrix(multiclass_testConfusionEffB30[iMethod], multiclass_trainConfusionEffB30[iMethod], classnames,
2073 Log() << kINFO << hLine <<
Endl;
2079 Log().EnableOutput();
2082 TString hLine =
"------------------------------------------------------------------------------------------"
2083 "-------------------------";
2084 Log() << kINFO <<
"Evaluation results ranked by best signal efficiency and purity (area)" <<
Endl;
2085 Log() << kINFO << hLine <<
Endl;
2086 Log() << kINFO <<
"DataSet MVA " <<
Endl;
2087 Log() << kINFO <<
"Name: Method: ROC-integ" <<
Endl;
2092 Log() << kDEBUG << hLine <<
Endl;
2093 for (
Int_t k = 0; k < 2; k++) {
2094 if (k == 1 && nmeth_used[k] > 0) {
2095 Log() << kINFO << hLine <<
Endl;
2096 Log() << kINFO <<
"Input Variables: " <<
Endl << hLine <<
Endl;
2098 for (
Int_t i = 0; i < nmeth_used[k]; i++) {
2099 TString datasetName = itrMap->first;
2100 TString methodName = mname[k][i];
2107 if (theMethod == 0) {
2113 std::vector<Bool_t> *mvaResType =
2117 if (mvaResType->size() != 0) {
2121 if (sep[k][i] < 0 || sig[k][i] < 0) {
2123 Log() << kINFO <<
Form(
"%-13s %-15s: %#1.3f", datasetName.
Data(), methodName.
Data(), effArea[k][i])
2135 Log() << kINFO <<
Form(
"%-13s %-15s: %#1.3f", datasetName.
Data(), methodName.
Data(), rocIntegral)
2149 Log() << kINFO << hLine <<
Endl;
2151 Log() << kINFO <<
"Testing efficiency compared to training efficiency (overtraining check)" <<
Endl;
2152 Log() << kINFO << hLine <<
Endl;
2154 <<
"DataSet MVA Signal efficiency: from test sample (from training sample) "
2156 Log() << kINFO <<
"Name: Method: @B=0.01 @B=0.10 @B=0.30 "
2158 Log() << kINFO << hLine <<
Endl;
2159 for (
Int_t k = 0; k < 2; k++) {
2160 if (k == 1 && nmeth_used[k] > 0) {
2161 Log() << kINFO << hLine <<
Endl;
2162 Log() << kINFO <<
"Input Variables: " <<
Endl << hLine <<
Endl;
2164 for (
Int_t i = 0; i < nmeth_used[k]; i++) {
2166 mname[k][i].ReplaceAll(
"Variable_",
"");
2172 <<
Form(
"%-20s %-15s: %#1.3f (%#1.3f) %#1.3f (%#1.3f) %#1.3f (%#1.3f)",
2174 trainEff01[k][i], eff10[k][i], trainEff10[k][i], eff30[k][i], trainEff30[k][i])
2178 Log() << kINFO << hLine <<
Endl;
2182 Log().InhibitOutput();
2186 std::list<TString> datasets;
2187 for (
Int_t k = 0; k < 2; k++) {
2188 for (
Int_t i = 0; i < nmeth_used[k]; i++) {
2194 if (std::find(datasets.begin(), datasets.end(), theMethod->
fDataSetInfo.
GetName()) == datasets.end()) {
2211 const char *theOption)
2218 if (vitype == VIType::kShort)
2220 else if (vitype == VIType::kAll)
2222 else if (vitype == VIType::kRandom) {
2223 if ( nbits > 10 && nbits < 30) {
2226 }
else if (nbits < 10) {
2227 Log() << kERROR <<
"Error in Variable Importance: Random mode require more that 10 variables in the dataset."
2229 }
else if (nbits > 30) {
2230 Log() << kERROR <<
"Error in Variable Importance: Number of variables is too large for Random mode"
2240 const char *theOption)
2251 Log() << kERROR <<
"Number of combinations is too large , is 2^" << nbits <<
Endl;
2255 Log() << kWARNING <<
"Number of combinations is very large , is 2^" << nbits <<
Endl;
2257 uint64_t range =
static_cast<uint64_t
>(pow(2, nbits));
2261 std::vector<Double_t> importances(nbits);
2263 std::vector<Double_t> ROC(range);
2265 for (
int i = 0; i < nbits; i++)
2269 for (
x = 1;
x < range;
x++) {
2271 std::bitset<VIBITS> xbitset(
x);
2279 for (
int index = 0; index < nbits; index++) {
2290 BookMethod(seedloader, theMethod, methodTitle, theOption);
2312 for (
x = 0;
x < range;
x++) {
2314 for (uint32_t i = 0; i <
VIBITS; ++i) {
2315 if (
x & (uint64_t(1) << i)) {
2316 y =
x & ~(uint64_t(1) << i);
2317 std::bitset<VIBITS> ybitset(
y);
2321 uint32_t ny =
static_cast<uint32_t
>( log(
x -
y) / 0.693147 ) ;
2323 importances[ny] = SROC - 0.5;
2329 importances[ny] += SROC - SSROC;
2334 std::cout <<
"--- Variable Importance Results (All)" << std::endl;
2338static uint64_t
sum(uint64_t i)
2341 if (i > 62)
return 0;
2342 return static_cast<uint64_t
>( std::pow(2, i + 1)) - 1;
2352 const char *theOption)
2362 Log() << kERROR <<
"Number of combinations is too large , is 2^" << nbits <<
Endl;
2365 long int range =
sum(nbits);
2368 std::vector<Double_t> importances(nbits);
2369 for (
int i = 0; i < nbits; i++)
2376 std::bitset<VIBITS> xbitset(
x);
2378 Log() << kFATAL <<
"Error: need at least one variable.";
2384 for (
int index = 0; index < nbits; index++) {
2393 BookMethod(seedloader, theMethod, methodTitle, theOption);
2414 for (uint32_t i = 0; i <
VIBITS; ++i) {
2415 if (
x & (uint64_t(1) << i)) {
2416 y =
x & ~(uint64_t(1) << i);
2417 std::bitset<VIBITS> ybitset(
y);
2421 uint32_t ny =
static_cast<uint32_t
>(log(
x -
y) / 0.693147);
2423 importances[ny] = SROC - 0.5;
2430 for (
int index = 0; index < nbits; index++) {
2439 BookMethod(subseedloader, theMethod, methodTitle, theOption);
2448 importances[ny] += SROC - SSROC;
2455 delete subseedloader;
2460 std::cout <<
"--- Variable Importance Results (Short)" << std::endl;
2467 TString methodTitle,
const char *theOption)
2478 long int range = pow(2, nbits);
2481 std::vector<Double_t> importances(nbits);
2482 for (
int i = 0; i < nbits; i++)
2489 std::bitset<32> xbitset(
x);
2497 for (
int index = 0; index < nbits; index++) {
2506 BookMethod(seedloader, theMethod, methodTitle, theOption);
2528 for (uint32_t i = 0; i < 32; ++i) {
2529 if (
x & (uint64_t(1) << i)) {
2530 y =
x & ~(uint64_t(1) << i);
2531 std::bitset<32> ybitset(
y);
2537 importances[ny] = SROC - 0.5;
2545 for (
int index = 0; index < nbits; index++) {
2554 BookMethod(subseedloader, theMethod, methodTitle, theOption);
2563 importances[ny] += SROC - SSROC;
2572 delete subseedloader;
2578 std::cout <<
"--- Variable Importance Results (Random)" << std::endl;
2586 TH1F *vih1 =
new TH1F(
"vih1",
"", nbits, 0, nbits);
2588 gStyle->SetOptStat(000000);
2591 for (
int i = 0; i < nbits; i++) {
2592 normalization = normalization + importances[i];
2597 gStyle->SetTitleXOffset(0.4);
2598 gStyle->SetTitleXOffset(1.2);
2600 std::vector<Double_t> x_ie(nbits), y_ie(nbits);
2601 for (
Int_t i = 1; i < nbits + 1; i++) {
2602 x_ie[i - 1] = (i - 1) * 1.;
2603 roc = 100.0 * importances[i - 1] / normalization;
2605 std::cout <<
"--- " << varNames[i - 1] <<
" = " << roc <<
" %" << std::endl;
2609 TGraph *g_ie =
new TGraph(nbits + 2, &x_ie[0], &y_ie[0]);
#define MinNoTrainingEvents
void printMatrix(const TMatrixD &mat)
write a matrix
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
float Float_t
Float 4 bytes (float).
TMatrixT< Double_t > TMatrixD
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
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 SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line 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)
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
void SetTitle(const char *title="") override
Set the title of the TNamed.
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 ...
void SetTitle(const char *title) override
Change/set the title.
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Sort bins with labels or set option(s) to draw axis with labels.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
virtual void SetBarWidth(Float_t width=0.5)
Set the width of bars as fraction of the bin width for drawing mode "B".
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...
Service class for 2-D histogram classes.
IMethod * Create(const std::string &name, const TString &job, const TString &title, DataSetInfo &dsi, const TString &option)
creates the method if needed based on the method name using the creator function the factory has stor...
static ClassifierFactory & Instance()
access to the ClassifierFactory singleton creates the instance if needed
TString fWeightFileDirPrefix
void SetDrawProgressBar(Bool_t d)
void SetUseColor(Bool_t uc)
class TMVA::Config::VariablePlotting fVariablePlotting
void SetConfigDescription(const char *d)
OptionBase * DeclareOptionRef(T &ref, const TString &name, const TString &desc="")
void AddPreDefVal(const T &)
void SetConfigName(const char *n)
Configurable(const TString &theOption="")
constructor
virtual void ParseOptions()
options parser
const TString & GetOptions() const
MsgLogger * fLogger
! message logger
void CheckForUnusedOptions() const
checks for unused options in option string
void PrepareTrainingAndTestTree(const TCut &cut, const TString &splitOpt)
prepare the training and test trees -> same cuts for signal and background
DataSetInfo & GetDataSetInfo()
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
Class that contains all the data information.
UInt_t GetNVariables() const
const TMatrixD * CorrelationMatrix(const TString &className) const
UInt_t GetNClasses() const
const TString & GetSplitOptions() const
UInt_t GetNTargets() const
DataSet * GetDataSet() const
returns data set
TH2 * CreateCorrelationMatrixHist(const TMatrixD *m, const TString &hName, const TString &hTitle) const
std::vector< TString > GetListOfVariables() const
returns list of variables
const char * GetName() const override
Returns name of object.
ClassInfo * GetClassInfo(Int_t clNum) const
const TCut & GetCut(Int_t i) const
VariableInfo & GetVariableInfo(Int_t i)
Bool_t IsSignal(const Event *ev) const
DataSetManager * GetDataSetManager()
DataInputHandler & DataInput()
Class that contains all the data information.
Long64_t GetNEvtSigTest()
return number of signal test events in dataset
TTree * GetTree(Types::ETreeType type)
create the test/trainings tree with all the variables, the weights, the classes, the targets,...
const Event * GetEvent() const
returns event without transformations
Long64_t GetNEvents(Types::ETreeType type=Types::kMaxTreeType) const
Results * GetResults(const TString &, Types::ETreeType type, Types::EAnalysisType analysistype)
Long64_t GetNTrainingEvents() const
void SetCurrentType(Types::ETreeType type) const
const std::vector< Event * > & GetEventCollection(Types::ETreeType type=Types::kMaxTreeType) const
Long64_t GetNEvtBkgdTest()
return number of background test events in dataset
Float_t GetValue(UInt_t ivar) const
return value of i'th variable
static void SetIsTraining(Bool_t)
when this static function is called, it sets the flag whether events with negative event weight shoul...
TString const & tString() const
void PrintHelpMessage(const TString &datasetname, const TString &methodTitle="") const
Print predefined help message of classifier.
Bool_t fSilentFile
! used in constructor without file
Bool_t fCorrelations
! enable to calculate correlations
std::vector< IMethod * > MVector
void TrainAllMethods()
Iterates through all booked methods and calls training.
Bool_t Verbose(void) const
void WriteDataInformation(DataSetInfo &fDataSetInfo)
Factory(TString theJobName, TFile *theTargetFile, TString theOption="")
Standard constructor.
void TestAllMethods()
Evaluates all booked methods on the testing data and adds the output to the Results in the corresponi...
Bool_t fVerbose
! verbose mode
void EvaluateAllMethods(void)
Iterates over all MVAs that have been booked, and calls their evaluation methods.
TH1F * EvaluateImportanceRandom(DataLoader *loader, UInt_t nseeds, Types::EMVA theMethod, TString methodTitle, const char *theOption="")
TH1F * GetImportance(const int nbits, std::vector< Double_t > importances, std::vector< TString > varNames)
Bool_t fROC
! enable to calculate ROC values
void EvaluateAllVariables(DataLoader *loader, TString options="")
Iterates over all MVA input variables and evaluates them.
TDirectory * RootBaseDir()
TString fVerboseLevel
! verbosity level, controls granularity of logging
TMultiGraph * GetROCCurveAsMultiGraph(DataLoader *loader, UInt_t iClass, Types::ETreeType type=Types::kTesting)
Generate a collection of graphs, for all methods for a given class.
TH1F * EvaluateImportance(DataLoader *loader, VIType vitype, Types::EMVA theMethod, TString methodTitle, const char *theOption="")
Evaluate Variable Importance.
Double_t GetROCIntegral(DataLoader *loader, TString theMethodName, UInt_t iClass=0, Types::ETreeType type=Types::kTesting)
Calculate the integral of the ROC curve, also known as the area under curve (AUC),...
std::map< TString, MVector * > fMethodsMap
virtual ~Factory()
Destructor.
MethodBase * BookMethod(DataLoader *loader, MethodName theMethodName, TString methodTitle, TString theOption="")
Books an MVA classifier or regression method.
virtual void MakeClass(const TString &datasetname, const TString &methodTitle="") const
MethodBase * BookMethodWeightfile(DataLoader *dataloader, TMVA::Types::EMVA methodType, const TString &weightfile)
Adds an already constructed method to be managed by this factory.
Bool_t fModelPersistence
! option to save the trained model in xml file or using serialization
std::map< TString, Double_t > OptimizeAllMethods(TString fomType="ROCIntegral", TString fitType="FitGA")
Iterates through all booked methods and sees if they use parameter tuning and if so does just that,...
ROCCurve * GetROC(DataLoader *loader, TString theMethodName, UInt_t iClass=0, Types::ETreeType type=Types::kTesting)
Private method to generate a ROCCurve instance for a given method.
Bool_t IsSilentFile() const
TH1F * EvaluateImportanceShort(DataLoader *loader, Types::EMVA theMethod, TString methodTitle, const char *theOption="")
Types::EAnalysisType fAnalysisType
! the training type
TString fJobName
! jobname, used as extension in weight file names
Bool_t HasMethod(const TString &datasetname, const TString &title) const
Checks whether a given method name is defined for a given dataset.
TGraph * GetROCCurve(DataLoader *loader, TString theMethodName, Bool_t setTitles=kTRUE, UInt_t iClass=0, Types::ETreeType type=Types::kTesting)
Argument iClass specifies the class to generate the ROC curve in a multiclass setting.
TH1F * EvaluateImportanceAll(DataLoader *loader, Types::EMVA theMethod, TString methodTitle, const char *theOption="")
void SetVerbose(Bool_t v=kTRUE)
TFile * fgTargetFile
! ROOT output file
std::vector< TMVA::VariableTransformBase * > fDefaultTrfs
! list of transformations on default DataSet
IMethod * GetMethod(const TString &datasetname, const TString &title) const
Returns pointer to MVA that corresponds to given method title.
void DeleteAllMethods(void)
Delete methods.
TString fTransformations
! list of transformations to test
void Greetings()
Print welcome message.
Interface for all concrete MVA method implementations.
virtual void PrintHelpMessage() const =0
virtual Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets)=0
virtual void MakeClass(const TString &classFileName=TString("")) const =0
Virtual base Class for all MVA method.
void PrintHelpMessage() const override
prints out method-specific help method
virtual Double_t GetSeparation(TH1 *, TH1 *) const
compute "separation" defined as
const char * GetName() const override
void SetSilentFile(Bool_t status)
void SetWeightFileDir(TString fileDir)
set directory of weight file
virtual void TestRegression(Double_t &bias, Double_t &biasT, Double_t &dev, Double_t &devT, Double_t &rms, Double_t &rmsT, Double_t &mInf, Double_t &mInfT, Double_t &corr, Types::ETreeType type)
calculate <sum-of-deviation-squared> of regression output versus "true" value from test sample
virtual void DeclareCompatibilityOptions()
options that are used ONLY for the READER to ensure backward compatibility they are hence without any...
TString GetMethodTypeName() const
Bool_t DoMulticlass() const
virtual Double_t GetSignificance() const
compute significance of mean difference
Types::EAnalysisType GetAnalysisType() const
virtual TMatrixD GetMulticlassConfusionMatrix(Double_t effB, Types::ETreeType type)
Construct a confusion matrix for a multiclass classifier.
virtual void WriteEvaluationHistosToFile(Types::ETreeType treetype)
writes all MVA evaluation histograms to file
virtual void TestMulticlass()
test multiclass classification
void SetupMethod()
setup of methods
virtual Double_t GetEfficiency(const TString &, Types::ETreeType, Double_t &err)
fill background efficiency (resp.
virtual void SetAnalysisType(Types::EAnalysisType type)
const TString & GetMethodName() const
Bool_t DoRegression() const
void ProcessSetup()
process all options the "CheckForUnusedOptions" is done in an independent call, since it may be overr...
virtual Double_t GetTrainingEfficiency(const TString &)
DataSetInfo & DataInfo() const
virtual void TestClassification()
initialization
void AddOutput(Types::ETreeType type, Types::EAnalysisType analysisType)
void MakeClass(const TString &classFileName=TString("")) const override
create reader class for method (classification only at present)
void ReadStateFromFile()
Function to write options and weights to file.
virtual std::map< TString, Double_t > OptimizeTuningParameters(TString fomType="ROCIntegral", TString fitType="FitGA")
call the Optimizer with the set of parameters and ranges that are meant to be tuned.
DataSetInfo & fDataSetInfo
! the data set information (sometimes needed)
Types::EMVA GetMethodType() const
void SetFile(TFile *file)
void SetModelPersistence(Bool_t status)
virtual Double_t GetROCIntegral(TH1D *histS, TH1D *histB) const
calculate the area (integral) under the ROC curve as a overall quality measure of the classification
virtual void CheckSetup()
check may be overridden by derived class (sometimes, eg, fitters are used which can only be implement...
Class for boosting a TMVA method.
void SetBoostedMethodName(TString methodName)
DataSetManager * fDataSetManager
DSMTEST.
Class for categorizing the phase space.
DataSetManager * fDataSetManager
ostringstream derivative to redirect and format output
Double_t GetEffSForEffB(Double_t effB, const UInt_t num_points=41)
Calculate the signal efficiency (sensitivity) for a given background efficiency (sensitivity).
Double_t GetROCIntegral(const UInt_t points=41)
Calculates the ROC integral (AUC).
TGraph * GetROCCurve(const UInt_t points=100)
Returns a new TGraph containing the ROC curve.
Ranking for variables in method (implementation).
virtual void Print() const
get maximum length of variable names
Class that is the base-class for a vector of result.
Class which takes the results of a multiclass classification.
Class that is the base-class for a vector of result.
Singleton class for Global types used by TMVA.
static Types & Instance()
The single instance of "Types" if existing already, or create it (Singleton).
const TString & GetLabel() const
virtual void Add(TGraph *graph, Option_t *chopt="")
TList * GetListOfGraphs() const
void Draw(Option_t *chopt="") override
Default Draw method for all objects.
TObject * Clone(const char *newname="") const override
Make a clone of an object using the Streamer facility.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
@ kOverwrite
overwrite existing object with same name
void SetGrid(Int_t valuex=1, Int_t valuey=1) override
TLegend * BuildLegend(Double_t x1=0.3, Double_t y1=0.21, Double_t x2=0.3, Double_t y2=0.21, const char *title="", Option_t *option="") override
Build a legend from the graphical objects in the pad.
virtual void MakePrincipals()
virtual void AddRow(const Double_t *x)
const TMatrixD * GetCovarianceMatrix() const
Return the covariance matrix.
Random number generator class based on M.
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
void ToLower()
Change string to lower-case.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
Write this object to the current directory.
void DataLoaderCopy(TMVA::DataLoader *des, TMVA::DataLoader *src)
void CreateVariableTransforms(const TString &trafoDefinition, TMVA::DataSetInfo &dataInfo, TMVA::TransformationHandler &transformationHandler, TMVA::MsgLogger &log)
MsgLogger & Endl(MsgLogger &ml)
static uint64_t sum(uint64_t i)