Changeset 4391 for branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Evaluators
- Timestamp:
- 09/14/10 18:46:12 (14 years ago)
- Location:
- branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Evaluators
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/Evaluators/SymbolicClassificationMeanSquaredErrorEvaluator.cs
r4366 r4391 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 using System.Linq;25 using HeuristicLab.Common;26 22 using HeuristicLab.Core; 27 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;28 23 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 using HeuristicLab.Problems.DataAnalysis.Evaluators; 30 using HeuristicLab.Problems.DataAnalysis.Symbolic; 24 using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic; 31 25 32 26 namespace HeuristicLab.Problems.DataAnalysis.Classification { 33 27 [Item("SymbolicClassificationMeanSquaredErrorEvaluator", "Calculates the mean squared error of a symbolic classification solution.")] 34 28 [StorableClass] 35 public class SymbolicClassifacitionMeanSquaredErrorEvaluator : SingleObjectiveSymbolicClassificationEvaluator { 29 public class SymbolicClassifacitionMeanSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator, ISymbolicClassificationEvaluator { 30 public ClassificationProblemData ClassificationProblemData { 31 get { return (ClassificationProblemData)RegressionProblemData; } 32 } 36 33 37 34 public SymbolicClassifacitionMeanSquaredErrorEvaluator() 38 35 : base() { 39 36 } 40 41 public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<double> sortedClassValues, IEnumerable<int> rows) {42 double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, sortedClassValues, rows);43 return mse;44 }45 46 public static double Calculate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<double> sortedClassValues, IEnumerable<int> rows) {47 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, dataset, rows);48 IEnumerable<double> originalValues = dataset.GetEnumeratedVariableValues(targetVariable, rows);49 IEnumerator<double> originalEnumerator = originalValues.GetEnumerator();50 IEnumerator<double> estimatedEnumerator = estimatedValues.GetEnumerator();51 OnlineMeanSquaredErrorEvaluator mseEvaluator = new OnlineMeanSquaredErrorEvaluator();52 53 54 double firstClassValue = sortedClassValues.First();55 double lastClassValue = sortedClassValues.Last();56 while (originalEnumerator.MoveNext() && estimatedEnumerator.MoveNext()) {57 double estimated = estimatedEnumerator.Current;58 double original = originalEnumerator.Current;59 if (double.IsNaN(estimated))60 estimated = upperEstimationLimit;61 else if (estimated < original && original.IsAlmost(firstClassValue))62 estimated = original;63 else if (estimated > original && original.IsAlmost(lastClassValue))64 estimated = original;65 else66 estimated = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, estimated));67 mseEvaluator.Add(original, estimated);68 }69 70 if (estimatedEnumerator.MoveNext() || originalEnumerator.MoveNext()) {71 throw new ArgumentException("Number of elements in original and estimated enumeration doesn't match.");72 } else {73 return mseEvaluator.MeanSquaredError;74 }75 }76 37 } 77 38 }
Note: See TracChangeset
for help on using the changeset viewer.