1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)


4  *


5  * This file is part of HeuristicLab.


6  *


7  * HeuristicLab is free software: you can redistribute it and/or modify


8  * it under the terms of the GNU General Public License as published by


9  * the Free Software Foundation, either version 3 of the License, or


10  * (at your option) any later version.


11  *


12  * HeuristicLab is distributed in the hope that it will be useful,


13  * but WITHOUT ANY WARRANTY; without even the implied warranty of


14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


15  * GNU General Public License for more details.


16  *


17  * You should have received a copy of the GNU General Public License


18  * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.


19  */


20  #endregion


21 


22  using System;


23  using System.Collections.Generic;


24  using System.Linq;


25  using System.Text;


26  using HeuristicLab.Core;


27  using HeuristicLab.Data;


28  using HeuristicLab.Operators;


29  using HeuristicLab.DataAnalysis;


30 


31  namespace HeuristicLab.GP.StructureIdentification {


32  public class MeanSquaredErrorEvaluator : GPEvaluatorBase {


33  public override string Description {


34  get {


35  return @"Evaluates 'FunctionTree' for all samples of 'DataSet' and calculates the meansquarederror


36  for the estimated values vs. the real values of 'TargetVariable'.";


37  }


38  }


39 


40  public MeanSquaredErrorEvaluator()


41  : base() {


42  AddVariableInfo(new VariableInfo("MSE", "The mean squared error of the model", typeof(DoubleData), VariableKind.New));


43  }


44 


45  public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {


46  double errorsSquaredSum = 0;


47  for(int sample = start; sample < end; sample++) {


48  double original = dataset.GetValue(targetVariable, sample);


49  double estimated = evaluator.Evaluate(sample);


50  if(updateTargetValues) {


51  dataset.SetValue(targetVariable, sample, estimated);


52  }


53  if(!double.IsNaN(original) && !double.IsInfinity(original)) {


54  double error = estimated  original;


55  errorsSquaredSum += error * error;


56  }


57  }


58 


59  errorsSquaredSum /= (end  start);


60  if(double.IsNaN(errorsSquaredSum)  double.IsInfinity(errorsSquaredSum)) {


61  errorsSquaredSum = double.MaxValue;


62  }


63 


64  DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false);


65  if(mse == null) {


66  mse = new DoubleData();


67  scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse));


68  }


69 


70  mse.Data = errorsSquaredSum;


71  }


72  }


73  }

