Changeset 702 for trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs
- Timestamp:
- 10/29/08 11:21:04 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs
r668 r702 29 29 30 30 namespace HeuristicLab.GP.StructureIdentification.Classification { 31 public class ClassificationMeanSquaredErrorEvaluator : MeanSquaredErrorEvaluator { 32 private const double EPSILON = 1.0E-6; 33 private double[] classesArr; 31 public class ClassificationMeanSquaredErrorEvaluator : GPClassificationEvaluatorBase { 32 private const double EPSILON = 1.0E-7; 34 33 public override string Description { 35 34 get { … … 41 40 public ClassificationMeanSquaredErrorEvaluator() 42 41 : base() { 43 AddVariableInfo(new VariableInfo(" TargetClassValues", "The original class values of target variable (for instance negative=0 and positive=1).", typeof(ItemList<DoubleData>), VariableKind.In));42 AddVariableInfo(new VariableInfo("MSE", "The mean squared error of the model", typeof(DoubleData), VariableKind.New)); 44 43 } 45 44 46 public override IOperation Apply(IScope scope) { 47 ItemList<DoubleData> classes = GetVariableValue<ItemList<DoubleData>>("TargetClassValues", scope, true); 48 classesArr = new double[classes.Count]; 49 for(int i = 0; i < classesArr.Length; i++) classesArr[i] = classes[i].Data; 50 Array.Sort(classesArr); 51 return base.Apply(scope); 52 } 53 54 public override void Evaluate(int start, int end) { 45 public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, double[] classes, double[] thresholds, int start, int end) 46 { 55 47 double errorsSquaredSum = 0; 56 48 for(int sample = start; sample < end; sample++) { 57 double estimated = GetEstimatedValue(sample); 58 double original = GetOriginalValue(sample); 59 SetOriginalValue(sample, estimated); 49 double estimated = evaluator.Evaluate(sample); 50 double original = dataset.GetValue(targetVariable, sample); 60 51 if(!double.IsNaN(original) && !double.IsInfinity(original)) { 61 52 double error = estimated - original; … … 63 54 // on the lower end and upper end only add linear error if the absolute error is larger than 1 64 55 // the error>1.0 constraint is needed for balance because in the interval ]-1, 1[ the squared error is smaller than the absolute error 65 if((IsEqual(original, classes Arr[0]) && error < -1.0) ||66 (IsEqual(original, classes Arr[classesArr.Length - 1]) && error > 1.0)) {56 if((IsEqual(original, classes[0]) && error < -1.0) || 57 (IsEqual(original, classes[classes.Length - 1]) && error > 1.0)) { 67 58 errorsSquaredSum += Math.Abs(error); // only add linear error below the smallest class or above the largest class 68 59 } else { … … 76 67 errorsSquaredSum = double.MaxValue; 77 68 } 69 70 DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false); 71 if(mse == null) { 72 mse = new DoubleData(); 73 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse)); 74 } 75 78 76 mse.Data = errorsSquaredSum; 79 77 }
Note: See TracChangeset
for help on using the changeset viewer.