31 #ifndef ROOT_TMVA_LossFunction
32 #define ROOT_TMVA_LossFunction
48 class LossFunctionEventInfo{
51 LossFunctionEventInfo(){
56 LossFunctionEventInfo(Double_t trueValue_, Double_t predictedValue_, Double_t weight_){
57 trueValue = trueValue_;
58 predictedValue = predictedValue_;
61 ~LossFunctionEventInfo(){};
64 Double_t predictedValue;
80 virtual ~LossFunction(){};
83 virtual Double_t CalculateLoss(LossFunctionEventInfo& e) = 0;
84 virtual Double_t CalculateNetLoss(std::vector<LossFunctionEventInfo>& evs) = 0;
85 virtual Double_t CalculateMeanLoss(std::vector<LossFunctionEventInfo>& evs) = 0;
87 virtual TString Name() = 0;
88 virtual Int_t Id() = 0;
124 class LossFunctionBDT :
public virtual LossFunction{
130 virtual ~LossFunctionBDT(){};
133 virtual void Init(std::map<const TMVA::Event*, LossFunctionEventInfo>& evinfomap, std::vector<double>& boostWeights) = 0;
134 virtual void SetTargets(std::vector<const TMVA::Event*>& evs, std::map< const TMVA::Event*, LossFunctionEventInfo >& evinfomap) = 0;
135 virtual Double_t Target(LossFunctionEventInfo& e) = 0;
136 virtual Double_t Fit(std::vector<LossFunctionEventInfo>& evs) = 0;
144 class HuberLossFunction :
public virtual LossFunction{
148 HuberLossFunction(Double_t quantile);
149 ~HuberLossFunction();
152 Double_t CalculateLoss(LossFunctionEventInfo& e);
153 Double_t CalculateNetLoss(std::vector<LossFunctionEventInfo>& evs);
154 Double_t CalculateMeanLoss(std::vector<LossFunctionEventInfo>& evs);
157 TString Name(){
return TString(
"Huber"); };
158 Int_t Id(){
return 0; } ;
161 void Init(std::vector<LossFunctionEventInfo>& evs);
162 Double_t CalculateQuantile(std::vector<LossFunctionEventInfo>& evs, Double_t whichQuantile, Double_t sumOfWeights,
bool abs);
163 Double_t CalculateSumOfWeights(
const std::vector<LossFunctionEventInfo>& evs);
164 void SetTransitionPoint(std::vector<LossFunctionEventInfo>& evs);
165 void SetSumOfWeights(std::vector<LossFunctionEventInfo>& evs);
169 Double_t fTransitionPoint;
170 Double_t fSumOfWeights;
179 class HuberLossFunctionBDT :
public LossFunctionBDT,
public HuberLossFunction{
182 HuberLossFunctionBDT();
183 HuberLossFunctionBDT(Double_t quantile):HuberLossFunction(quantile){};
184 ~HuberLossFunctionBDT(){};
187 void Init(std::map<const TMVA::Event*, LossFunctionEventInfo>& evinfomap, std::vector<double>& boostWeights);
188 void SetTargets(std::vector<const TMVA::Event*>& evs, std::map< const TMVA::Event*, LossFunctionEventInfo >& evinfomap);
189 Double_t Target(LossFunctionEventInfo& e);
190 Double_t Fit(std::vector<LossFunctionEventInfo>& evs);
200 class LeastSquaresLossFunction :
public virtual LossFunction{
203 LeastSquaresLossFunction(){};
204 ~LeastSquaresLossFunction(){};
207 Double_t CalculateLoss(LossFunctionEventInfo& e);
208 Double_t CalculateNetLoss(std::vector<LossFunctionEventInfo>& evs);
209 Double_t CalculateMeanLoss(std::vector<LossFunctionEventInfo>& evs);
212 TString Name(){
return TString(
"LeastSquares"); };
213 Int_t Id(){
return 1; } ;
222 class LeastSquaresLossFunctionBDT :
public LossFunctionBDT,
public LeastSquaresLossFunction{
225 LeastSquaresLossFunctionBDT(){};
226 ~LeastSquaresLossFunctionBDT(){};
229 void Init(std::map<const TMVA::Event*, LossFunctionEventInfo>& evinfomap, std::vector<double>& boostWeights);
230 void SetTargets(std::vector<const TMVA::Event*>& evs, std::map< const TMVA::Event*, LossFunctionEventInfo >& evinfomap);
231 Double_t Target(LossFunctionEventInfo& e);
232 Double_t Fit(std::vector<LossFunctionEventInfo>& evs);
239 class AbsoluteDeviationLossFunction :
public virtual LossFunction{
242 AbsoluteDeviationLossFunction(){};
243 ~AbsoluteDeviationLossFunction(){};
246 Double_t CalculateLoss(LossFunctionEventInfo& e);
247 Double_t CalculateNetLoss(std::vector<LossFunctionEventInfo>& evs);
248 Double_t CalculateMeanLoss(std::vector<LossFunctionEventInfo>& evs);
251 TString Name(){
return TString(
"AbsoluteDeviation"); };
252 Int_t Id(){
return 2; } ;
261 class AbsoluteDeviationLossFunctionBDT :
public LossFunctionBDT,
public AbsoluteDeviationLossFunction{
264 AbsoluteDeviationLossFunctionBDT(){};
265 ~AbsoluteDeviationLossFunctionBDT(){};
268 void Init(std::map<const TMVA::Event*, LossFunctionEventInfo>& evinfomap, std::vector<double>& boostWeights);
269 void SetTargets(std::vector<const TMVA::Event*>& evs, std::map< const TMVA::Event*, LossFunctionEventInfo >& evinfomap);
270 Double_t Target(LossFunctionEventInfo& e);
271 Double_t Fit(std::vector<LossFunctionEventInfo>& evs);