import ROOT
from ROOT import TFile, TMVA, TCut
Welcome to JupyROOT 6.07/07
%jsmva on
For more details please see this notebook.
outputFile = TFile( "TMVA.root", 'RECREATE' )
TMVA.Tools.Instance()
factory = TMVA.Factory(JobName="TMVAClassification", TargetFile=outputFile,
V=False, Color=True, DrawProgressBar=True, Transformations=["I", "D", "P", "G","D"],
AnalysisType="Classification")
dataset = "tmva_class_example"
loader = TMVA.DataLoader(dataset)
loader.AddVariable( "myvar1 := var1+var2", 'F' )
loader.AddVariable( "myvar2 := var1-var2", "Expression 2", 'F' )
loader.AddVariable( "var3", "Variable 3", 'F' )
loader.AddVariable( "var4", "Variable 4", 'F' )
loader.AddSpectator( "spec1:=var1*2", "Spectator 1", 'F' )
loader.AddSpectator( "spec2:=var1*3", "Spectator 2", 'F' )
if ROOT.gSystem.AccessPathName( "./tmva_class_example.root" ) != 0:
ROOT.gSystem.Exec( "wget https://root.cern.ch/files/tmva_class_example.root")
input = TFile.Open( "./tmva_class_example.root" )
# Get the signal and background trees for training
signal = input.Get( "TreeS" )
background = input.Get( "TreeB" )
# Global event weights (see below for setting event-wise weights)
signalWeight = 1.0
backgroundWeight = 1.0
mycuts = TCut("")
mycutb = TCut("")
loader.AddSignalTree(signal, signalWeight)
loader.AddBackgroundTree(background, backgroundWeight)
loader.fSignalWeight = signalWeight
loader.fBackgroundWeight = backgroundWeight
loader.fTreeS = signal
loader.fTreeB = background
loader.PrepareTrainingAndTestTree(SigCut=mycuts, BkgCut=mycutb,
nTrain_Signal=0, nTrain_Background=0, SplitMode="Random", NormMode="NumEvents", V=False)
DataSetInfo |
| |||
Add Tree TreeS of type Signal with 6000 events | ||||
DataSetInfo |
| |||
Add Tree TreeB of type Background with 6000 events |
For more details please see this notebook.
factory.BookMethod( DataLoader=loader, Method=TMVA.Types.kSVM, MethodTitle="SVM",
Gamma=0.25, Tol=0.001, VarTransform="Norm" )
factory.BookMethod( DataLoader=loader, Method=TMVA.Types.kMLP, MethodTitle="MLP",
H=False, V=False, NeuronType="tanh", VarTransform="N", NCycles=600, HiddenLayers="N+5",
TestRate=5, UseRegulator=False )
factory.BookMethod( DataLoader=loader, Method=TMVA.Types.kLD, MethodTitle="LD",
H=False, V=False, VarTransform="None", CreateMVAPdfs=True, PDFInterpolMVAPdf="Spline2",
NbinsMVAPdf=50, NsmoothMVAPdf=10 )
trainingStrategy = [{
"LearningRate": 1e-1,
"Momentum": 0.0,
"Repetitions": 1,
"ConvergenceSteps": 300,
"BatchSize": 20,
"TestRepetitions": 15,
"WeightDecay": 0.001,
"Regularization": "NONE",
"DropConfig": "0.0+0.5+0.5+0.5",
"DropRepetitions": 1,
"Multithreading": True
}, {
"LearningRate": 1e-2,
"Momentum": 0.5,
"Repetitions": 1,
"ConvergenceSteps": 300,
"BatchSize": 30,
"TestRepetitions": 7,
"WeightDecay": 0.001,
"Regularization": "L2",
"DropConfig": "0.0+0.1+0.1+0.1",
"DropRepetitions": 1,
"Multithreading": True
}, {
"LearningRate": 1e-2,
"Momentum": 0.3,
"Repetitions": 1,
"ConvergenceSteps": 300,
"BatchSize": 40,
"TestRepetitions": 7,
"WeightDecay": 0.001,
"Regularization": "L2",
"Multithreading": True
},{
"LearningRate": 1e-3,
"Momentum": 0.1,
"Repetitions": 1,
"ConvergenceSteps": 200,
"BatchSize": 70,
"TestRepetitions": 7,
"WeightDecay": 0.001,
"Regularization": "NONE",
"Multithreading": True
}]
factory.BookMethod(DataLoader=loader, Method=TMVA.Types.kDNN, MethodTitle="DNN",
H = False, V=False, VarTransform="Normalize", ErrorStrategy="CROSSENTROPY",
Layout=["TANH|100", "TANH|50", "TANH|10", "LINEAR"],
TrainingStrategy=trainingStrategy)
factory.BookMethod(loader, TMVA.Types.kLikelihood, "Likelihood",
"NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmoothBkg[1]=10:NSmooth=1:NAvEvtPerBin=50",
H=True, V=False,TransformOutput=True,PDFInterpol="Spline2")
factory.BookMethod(DataLoader= loader, Method=TMVA.Types.kBDT, MethodTitle="BDT",
H=False,V=False,NTrees=850,MinNodeSize="2.5%",MaxDepth=3,BoostType="AdaBoost", AdaBoostBeta=0.5,
UseBaggedBoost=True,BaggedSampleFraction=0.5, SeparationType="GiniIndex", nCuts=20 )
<ROOT.TMVA::MethodBDT object ("BDT") at 0x5c2f500>
Factory | Booking method: SVM | ||||||||||||||||||||||
SVM |
| ||||||||||||||||||||||
Norm | Transformation, Variable selection : | ||||||||||||||||||||||
Input : variable 'myvar1' <---> Output : variable 'myvar1' | |||||||||||||||||||||||
Input : variable 'myvar2' <---> Output : variable 'myvar2' | |||||||||||||||||||||||
Input : variable 'var3' <---> Output : variable 'var3' | |||||||||||||||||||||||
Input : variable 'var4' <---> Output : variable 'var4' | |||||||||||||||||||||||
Factory | Booking method: MLP | ||||||||||||||||||||||
MLP |
| ||||||||||||||||||||||
Norm | Transformation, Variable selection : | ||||||||||||||||||||||
Input : variable 'myvar1' <---> Output : variable 'myvar1' | |||||||||||||||||||||||
Input : variable 'myvar2' <---> Output : variable 'myvar2' | |||||||||||||||||||||||
Input : variable 'var3' <---> Output : variable 'var3' | |||||||||||||||||||||||
Input : variable 'var4' <---> Output : variable 'var4' | |||||||||||||||||||||||
MLP | Building Network. | ||||||||||||||||||||||
Initializing weights | |||||||||||||||||||||||
Factory | Booking method: LD | ||||||||||||||||||||||
DataSetFactory |
| ||||||||||||||||||||||
| |||||||||||||||||||||||
DataSetInfo | Correlation matrix (Signal) | ||||||||||||||||||||||
DataSetInfo | Correlation matrix (Background) | ||||||||||||||||||||||
DataSetFactory |
| ||||||||||||||||||||||
Factory | Booking method: DNN | ||||||||||||||||||||||
DNN |
| ||||||||||||||||||||||
Norm | Transformation, Variable selection : | ||||||||||||||||||||||
Input : variable 'myvar1' <---> Output : variable 'myvar1' | |||||||||||||||||||||||
Input : variable 'myvar2' <---> Output : variable 'myvar2' | |||||||||||||||||||||||
Input : variable 'var3' <---> Output : variable 'var3' | |||||||||||||||||||||||
Input : variable 'var4' <---> Output : variable 'var4' | |||||||||||||||||||||||
Factory | Booking method: Likelihood | ||||||||||||||||||||||
Factory | Booking method: BDT | ||||||||||||||||||||||
factory.TrainAllMethods()
TFHandler_SVM |
| ||||||||||||||||||||||||||||||
Building SVM Working Set...with 6000 event instances | |||||||||||||||||||||||||||||||
Elapsed time for Working Set build: 1.24 sec | |||||||||||||||||||||||||||||||
Sorry, no computing time forecast available for SVM, please wait ... | |||||||||||||||||||||||||||||||
Elapsed time: 7.25 sec | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 8.52 sec | |||||||||||||||||||||||||||||||
SVM |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 1.04 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_SVM.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_SVM.class.C | |||||||||||||||||||||||||||||||
TFHandler_MLP |
| ||||||||||||||||||||||||||||||
Training Network | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 4.01 sec | |||||||||||||||||||||||||||||||
MLP |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.012 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_MLP.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_MLP.class.C | |||||||||||||||||||||||||||||||
Write special histos to file: TMVA.root:/tmva_class_example/Method_MLP/MLP | |||||||||||||||||||||||||||||||
LD | Results for LD coefficients: | ||||||||||||||||||||||||||||||
Variable:Coefficient: | |||||||||||||||||||||||||||||||
myvar1:-0.359 | |||||||||||||||||||||||||||||||
myvar2:-0.109 | |||||||||||||||||||||||||||||||
var3:-0.211 | |||||||||||||||||||||||||||||||
var4:+0.722 | |||||||||||||||||||||||||||||||
(offset):-0.054 | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 0.00764 sec | |||||||||||||||||||||||||||||||
LD |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.003 sec | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_LD.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_LD.class.C | |||||||||||||||||||||||||||||||
TFHandler_DNN |
| ||||||||||||||||||||||||||||||
TFHandler_DNN |
| ||||||||||||||||||||||||||||||
TFHandler_DNN |
| ||||||||||||||||||||||||||||||
Add Layer with 100 nodes. | |||||||||||||||||||||||||||||||
Add Layer with 50 nodes. | |||||||||||||||||||||||||||||||
Add Layer with 10 nodes. | |||||||||||||||||||||||||||||||
Add Layer with 1 nodes. | |||||||||||||||||||||||||||||||
Total number of Synapses = 6010 | |||||||||||||||||||||||||||||||
Training with learning rate = 0.1, momentum = 0, repetitions = 1 | |||||||||||||||||||||||||||||||
Drop configuration | |||||||||||||||||||||||||||||||
drop repetitions = 1 | |||||||||||||||||||||||||||||||
Layer 0 = 0 | |||||||||||||||||||||||||||||||
Layer 1 = 0.5 | |||||||||||||||||||||||||||||||
Layer 2 = 0.5 | |||||||||||||||||||||||||||||||
Layer 3 = 0.5 | |||||||||||||||||||||||||||||||
learning rate reduced to 0.05 | |||||||||||||||||||||||||||||||
Training with learning rate = 0.01, momentum = 0.5, repetitions = 1 | |||||||||||||||||||||||||||||||
Drop configuration | |||||||||||||||||||||||||||||||
drop repetitions = 1 | |||||||||||||||||||||||||||||||
Layer 0 = 0 | |||||||||||||||||||||||||||||||
Layer 1 = 0.1 | |||||||||||||||||||||||||||||||
Layer 2 = 0.1 | |||||||||||||||||||||||||||||||
Layer 3 = 0.1 | |||||||||||||||||||||||||||||||
Training with learning rate = 0.01, momentum = 0.3, repetitions = 1 | |||||||||||||||||||||||||||||||
Training with learning rate = 0.001, momentum = 0.1, repetitions = 1 | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 18.2 sec | |||||||||||||||||||||||||||||||
DNN |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.223 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_DNN.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_DNN.class.C | |||||||||||||||||||||||||||||||
Write monitoring histograms to file: TMVA.root:/tmva_class_example/Method_DNN/DNN | |||||||||||||||||||||||||||||||
================================================================ | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
--- Short description: | |||||||||||||||||||||||||||||||
The maximum-likelihood classifier models the data with probability | |||||||||||||||||||||||||||||||
density functions (PDF) reproducing the signal and background | |||||||||||||||||||||||||||||||
distributions of the input variables. Correlations among the | |||||||||||||||||||||||||||||||
variables are ignored. | |||||||||||||||||||||||||||||||
--- Performance optimisation: | |||||||||||||||||||||||||||||||
Required for good performance are decorrelated input variables | |||||||||||||||||||||||||||||||
(PCA transformation via the option "VarTransform=Decorrelate" | |||||||||||||||||||||||||||||||
may be tried). Irreducible non-linear correlations may be reduced | |||||||||||||||||||||||||||||||
by precombining strongly correlated input variables, or by simply | |||||||||||||||||||||||||||||||
removing one of the variables. | |||||||||||||||||||||||||||||||
--- Performance tuning via configuration options: | |||||||||||||||||||||||||||||||
High fidelity PDF estimates are mandatory, i.e., sufficient training | |||||||||||||||||||||||||||||||
statistics is required to populate the tails of the distributions | |||||||||||||||||||||||||||||||
It would be a surprise if the default Spline or KDE kernel parameters | |||||||||||||||||||||||||||||||
provide a satisfying fit to the data. The user is advised to properly | |||||||||||||||||||||||||||||||
tune the events per bin and smooth options in the spline cases | |||||||||||||||||||||||||||||||
individually per variable. If the KDE kernel is used, the adaptive | |||||||||||||||||||||||||||||||
Gaussian kernel may lead to artefacts, so please always also try | |||||||||||||||||||||||||||||||
the non-adaptive one. | |||||||||||||||||||||||||||||||
All tuning parameters must be adjusted individually for each input | |||||||||||||||||||||||||||||||
variable! | |||||||||||||||||||||||||||||||
================================================================ | |||||||||||||||||||||||||||||||
Filling reference histograms | |||||||||||||||||||||||||||||||
Building PDF out of reference histograms | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 0.0384 sec | |||||||||||||||||||||||||||||||
Likelihood |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.00767 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_Likelihood.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_Likelihood.class.C | |||||||||||||||||||||||||||||||
Write monitoring histograms to file: TMVA.root:/tmva_class_example/Method_Likelihood/Likelihood | |||||||||||||||||||||||||||||||
BDT | #events: (reweighted) sig: 3000 bkg: 3000 | ||||||||||||||||||||||||||||||
#events: (unweighted) sig: 3000 bkg: 3000 | |||||||||||||||||||||||||||||||
Training 850 Decision Trees ... patience please | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events: 2.13 sec | |||||||||||||||||||||||||||||||
BDT |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.824 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_BDT.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_BDT.class.C |
To test test the methods and evaluate the performance we need to run Factory.TestAllMethods and Factory.EvaluateAllMethods functions.
factory.TestAllMethods()
factory.EvaluateAllMethods()
Factory | Test method: SVM for Classification performance | ||||||||||||||||||||||||||||||
SVM |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.994 sec | |||||||||||||||||||||||||||||||
Factory | Test method: MLP for Classification performance | ||||||||||||||||||||||||||||||
MLP |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.00914 sec | |||||||||||||||||||||||||||||||
Factory | Test method: LD for Classification performance | ||||||||||||||||||||||||||||||
LD |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.00178 sec | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Factory | Test method: DNN for Classification performance | ||||||||||||||||||||||||||||||
DNN |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.205 sec | |||||||||||||||||||||||||||||||
Factory | Test method: Likelihood for Classification performance | ||||||||||||||||||||||||||||||
Likelihood |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.0074 sec | |||||||||||||||||||||||||||||||
Factory | Test method: BDT for Classification performance | ||||||||||||||||||||||||||||||
BDT |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events: 0.758 sec | |||||||||||||||||||||||||||||||
Factory | Evaluate classifier: SVM | ||||||||||||||||||||||||||||||
TFHandler_SVM |
| ||||||||||||||||||||||||||||||
SVM |
| ||||||||||||||||||||||||||||||
TFHandler_SVM |
| ||||||||||||||||||||||||||||||
Factory | Evaluate classifier: MLP | ||||||||||||||||||||||||||||||
TFHandler_MLP |
| ||||||||||||||||||||||||||||||
MLP |
| ||||||||||||||||||||||||||||||
TFHandler_MLP |
| ||||||||||||||||||||||||||||||
Factory | Evaluate classifier: LD | ||||||||||||||||||||||||||||||
LD |
| ||||||||||||||||||||||||||||||
Also filling probability and rarity histograms (on request)... | |||||||||||||||||||||||||||||||
TFHandler_LD |
| ||||||||||||||||||||||||||||||
Factory | Evaluate classifier: DNN | ||||||||||||||||||||||||||||||
DNN |
| ||||||||||||||||||||||||||||||
TFHandler_DNN |
| ||||||||||||||||||||||||||||||
Factory | Evaluate classifier: Likelihood | ||||||||||||||||||||||||||||||
Likelihood |
| ||||||||||||||||||||||||||||||
TFHandler_Likelihood |
| ||||||||||||||||||||||||||||||
Factory | Evaluate classifier: BDT | ||||||||||||||||||||||||||||||
BDT |
| ||||||||||||||||||||||||||||||
TFHandler_BDT |
| ||||||||||||||||||||||||||||||
Evaluation results ranked by best signal efficiency and purity (area) | |||||||||||||||||||||||||||||||
DataSet MVA | |||||||||||||||||||||||||||||||
Name: Method: ROC-integ | |||||||||||||||||||||||||||||||
tmva_class_example MLP : 0.939 | |||||||||||||||||||||||||||||||
tmva_class_example DNN : 0.937 | |||||||||||||||||||||||||||||||
tmva_class_example SVM : 0.937 | |||||||||||||||||||||||||||||||
tmva_class_example BDT : 0.931 | |||||||||||||||||||||||||||||||
tmva_class_example LD : 0.895 | |||||||||||||||||||||||||||||||
tmva_class_example Likelihood : 0.827 | |||||||||||||||||||||||||||||||
Testing efficiency compared to training efficiency (overtraining check) | |||||||||||||||||||||||||||||||
DataSet MVA Signal efficiency: from test sample (from training sample) | |||||||||||||||||||||||||||||||
Name: Method: @B=0.01 @B=0.10 @B=0.30 | |||||||||||||||||||||||||||||||
tmva_class_example MLP : 0.395 (0.345) 0.805 (0.795) 0.964 (0.966) | |||||||||||||||||||||||||||||||
tmva_class_example DNN : 0.362 (0.305) 0.801 (0.786) 0.962 (0.962) | |||||||||||||||||||||||||||||||
tmva_class_example SVM : 0.397 (0.323) 0.801 (0.791) 0.960 (0.960) | |||||||||||||||||||||||||||||||
tmva_class_example BDT : 0.350 (0.380) 0.778 (0.805) 0.955 (0.959) | |||||||||||||||||||||||||||||||
tmva_class_example LD : 0.261 (0.242) 0.679 (0.662) 0.901 (0.903) | |||||||||||||||||||||||||||||||
tmva_class_example Likelihood : 0.106 (0.101) 0.400 (0.371) 0.812 (0.813) | |||||||||||||||||||||||||||||||
Factory | Thank you for using TMVA! | ||||||||||||||||||||||||||||||
For citation information, please visit: http://tmva.sf.net/citeTMVA.html |
To draw the classifier output distribution we have to use Factory.DrawOutputDistribution function which is inserted by invoking jsmva magic. The parameters of the function are the following: The options string can contain the following options:
Keyword | Can be used as positional argument | Default | Predefined values | Description |
---|---|---|---|---|
datasetName | yes, 1. | - | - | The name of dataset |
methodName | yes, 2. | - | - | The name of method |
factory.DrawOutputDistribution(dataset, "MLP")
To draw the classifier probability distribution we have to use Factory.DrawProbabilityDistribution function which is inserted by invoking jsmva magic. The parameters of the function are the following: The options string can contain the following options:
Keyword | Can be used as positional argument | Default | Predefined values | Description |
---|---|---|---|---|
datasetName | yes, 1. | - | - | The name of dataset |
factory.DrawProbabilityDistribution(dataset, "LD")
To draw the ROC (receiver operating characteristic) curve we have to use Factory.DrawROCCurve function which is inserted by invoking jsmva magic. The parameters of the function are the following: The options string can contain the following options:
Keyword | Can be used as positional argument | Default | Predefined values | Description |
---|---|---|---|---|
datasetName | yes, 1. | - | - | The name of dataset |
factory.DrawROCCurve(dataset)
To draw the classifier cut efficiencies we have to use Factory.DrawCutEfficiencies function which is inserted by invoking jsmva magic. The parameters of the function are the following: The options string can contain the following options:
Keyword | Can be used as positional argument | Default | Predefined values | Description |
---|---|---|---|---|
datasetName | yes, 1. | - | - | The name of dataset |
methodName | yes, 2. | - | - | The name of method |
factory.DrawCutEfficiencies(dataset, "MLP")
outputFile.Close()