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 |
The booking of a method can be done as the notebook refered before shows. The new feature introduced here is how we can pass the training strategy when we want to book DNN. Instead of a long strategy string, we can create a list, containing dictionaries, which contain the options for the corresponding layer.
factory.BookMethod( DataLoader=loader, Method=TMVA.Types.kCuts, MethodTitle="Cuts",
H=False, V=False, FitMethod="MC", EffSel=True, SampleSize=200000, VarProp="FSmart" )
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 0x6260870>
Factory | Booking method: Cuts | ||||||||||||||||||||||
Use optimization method: "Monte Carlo" | |||||||||||||||||||||||
Use efficiency computation method: "Event Selection" | |||||||||||||||||||||||
Use "FSmart" cuts for variable: 'myvar1' | |||||||||||||||||||||||
Use "FSmart" cuts for variable: 'myvar2' | |||||||||||||||||||||||
Use "FSmart" cuts for variable: 'var3' | |||||||||||||||||||||||
Use "FSmart" cuts for variable: 'var4' | |||||||||||||||||||||||
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 | ||||||||||||||||||||||
When you use the jsmva magic, the original C++ version of Factory::TrainAllMethods is rewritten by a new training method, which will produce notebook compatible output during the training, so we can trace the process (progress bar, error plot). For some methods (MLP, DNN, BDT) there will be created a tracer plot (for MLP, DNN test and training error vs epoch, for BDT error fraction and boost weight vs tree number). There are also some method which doesn't support interactive tracing, so for these methods just a simple text will be printed, just to we know that TrainAllMethods function is training this method currently.
For methods where is possible to trace the training interactively there is a stop button, which can stop the training process. This button just stops the training of the current method, and doesn't stop the TrainAllMethods completely.
factory.TrainAllMethods()
FitterBase | |||||||||||||||||||||||||||||||
Elapsed time : 7.18 sec | |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.1 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.0276667 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.2 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.0703333 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.3 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.112333 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.4 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.162667 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.5 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.218667 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.6 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.274333 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.7 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.34 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.8 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.421 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Cuts | Cut values for requested signal efficiency: 0.9 | ||||||||||||||||||||||||||||||
Corresponding background efficiency : 0.507333 | |||||||||||||||||||||||||||||||
Transformation applied to input variables : None | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events : 7.19 sec | |||||||||||||||||||||||||||||||
Cuts |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.00187 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_Cuts.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_Cuts.class.C | |||||||||||||||||||||||||||||||
Write monitoring histograms to file: TMVA.root:/tmva_class_example/Method_Cuts/Cuts | |||||||||||||||||||||||||||||||
TFHandler_SVM |
| ||||||||||||||||||||||||||||||
Building SVM Working Set...with 6000 event instances | |||||||||||||||||||||||||||||||
Elapsed time for Working Set build : 1.22 sec | |||||||||||||||||||||||||||||||
Sorry, no computing time forecast available for SVM, please wait ... | |||||||||||||||||||||||||||||||
Elapsed time : 1.88 sec | |||||||||||||||||||||||||||||||
Elapsed time for training with 6000 events : 3.12 sec | |||||||||||||||||||||||||||||||
SVM |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 1 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 : 2.2 sec | |||||||||||||||||||||||||||||||
MLP |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.0112 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.00279 sec | |||||||||||||||||||||||||||||||
LD |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.00224 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 | |||||||||||||||||||||||||||||||
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 : 5.08 sec | |||||||||||||||||||||||||||||||
DNN |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.21 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.0403 sec | |||||||||||||||||||||||||||||||
Likelihood |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.009 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.28 sec | |||||||||||||||||||||||||||||||
BDT |
| ||||||||||||||||||||||||||||||
Elapsed time for evaluation of 6000 events : 0.673 sec | |||||||||||||||||||||||||||||||
Creating xml weight file: tmva_class_example/weights/TMVAClassification_BDT.weights.xml | |||||||||||||||||||||||||||||||
Creating standalone class: tmva_class_example/weights/TMVAClassification_BDT.class.C |
outputFile.Close()