Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/14/10 18:46:12 (14 years ago)
Author:
mkommend
Message:

updated classification branch (ticket #939)

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  
    2020#endregion
    2121
    22 using System;
    23 using System.Collections.Generic;
    24 using System.Linq;
    25 using HeuristicLab.Common;
    2622using HeuristicLab.Core;
    27 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2823using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    29 using HeuristicLab.Problems.DataAnalysis.Evaluators;
    30 using HeuristicLab.Problems.DataAnalysis.Symbolic;
     24using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic;
    3125
    3226namespace HeuristicLab.Problems.DataAnalysis.Classification {
    3327  [Item("SymbolicClassificationMeanSquaredErrorEvaluator", "Calculates the mean squared error of a symbolic classification solution.")]
    3428  [StorableClass]
    35   public class SymbolicClassifacitionMeanSquaredErrorEvaluator : SingleObjectiveSymbolicClassificationEvaluator {
     29  public class SymbolicClassifacitionMeanSquaredErrorEvaluator : SymbolicRegressionMeanSquaredErrorEvaluator, ISymbolicClassificationEvaluator {
     30    public ClassificationProblemData ClassificationProblemData {
     31      get { return (ClassificationProblemData)RegressionProblemData; }
     32    }
    3633
    3734    public SymbolicClassifacitionMeanSquaredErrorEvaluator()
    3835      : base() {
    3936    }
    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         else
    66           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     }
    7637  }
    7738}
Note: See TracChangeset for help on using the changeset viewer.