Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/14/09 12:59:50 (15 years ago)
Author:
gkronber
Message:

Created a subclass for time-series prognosis with SVM and created a simple version of TheilInequalityCoefficientEvaluator in HL.Modeling. (#705)

Location:
trunk/sources/HeuristicLab.Modeling/3.2
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj

    r2328 r2349  
    8585    <Compile Include="BestSolutionStorer.cs" />
    8686    <Compile Include="ClassificationProblemInjector.cs" />
     87    <Compile Include="SimpleTheilInequalityCoefficientEvaluator.cs" />
    8788    <Compile Include="SolutionExtractor.cs" />
    8889    <Compile Include="PredictorBase.cs" />
  • trunk/sources/HeuristicLab.Modeling/3.2/SimpleTheilInequalityCoefficientEvaluator.cs

    r2348 r2349  
    2525using HeuristicLab.DataAnalysis;
    2626
    27 namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
    28   public class TheilInequalityCoefficientEvaluator : GPEvaluatorBase {
     27namespace HeuristicLab.Modeling {
     28  public class SimpleTheilInequalityCoefficientEvaluator : SimpleEvaluatorBase {
    2929    public override string Description {
    3030      get {
    31         return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
    32 the 'Theil inequality coefficient (Theil's U2 not U1!)' of estimated values vs. real values of 'TargetVariable'.
     31        return @"Calculates the Theil inequality coefficient (Theil's U2 not U1!) of estimated values vs. real values of 'TargetVariable'.
    3332
    3433U2 = Sqrt(1/N * Sum(P_t - A_t)^2 ) / Sqrt(1/N * Sum(A_t)^2 )
     
    4241    }
    4342
    44     public TheilInequalityCoefficientEvaluator()
    45       : base() {
    46       AddVariableInfo(new VariableInfo("TheilInequalityCoefficient", "Theil's inequality coefficient (U2) of the model", typeof(DoubleData), VariableKind.New));
    47       AddVariableInfo(new VariableInfo("TheilInequalityCoefficientBias", "Bias proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
    48       AddVariableInfo(new VariableInfo("TheilInequalityCoefficientVariance", "Variance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
    49       AddVariableInfo(new VariableInfo("TheilInequalityCoefficientCovariance", "Covariance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
     43    public override string OutputVariableName {
     44      get {
     45        return "TheilInequalityCoefficient";
     46      }
    5047    }
    5148
    52     public override void Evaluate(IScope scope, ITreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
    53       #region create result variables
    54       DoubleData theilInequaliy = GetVariableValue<DoubleData>("TheilInequalityCoefficient", scope, false, false);
    55       if (theilInequaliy == null) {
    56         theilInequaliy = new DoubleData();
    57         scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficient"), theilInequaliy));
    58       }
    59       DoubleData uBias = GetVariableValue<DoubleData>("TheilInequalityCoefficientBias", scope, false, false);
    60       if (uBias == null) {
    61         uBias = new DoubleData();
    62         scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientBias"), uBias));
    63       }
    64       DoubleData uVariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientVariance", scope, false, false);
    65       if (uVariance == null) {
    66         uVariance = new DoubleData();
    67         scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientVariance"), uVariance));
    68       }
    69       DoubleData uCovariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientCovariance", scope, false, false);
    70       if (uCovariance == null) {
    71         uCovariance = new DoubleData();
    72         scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientCovariance"), uCovariance));
    73       }
    74       #endregion
     49    public override double Evaluate(double[,] values) {
     50      return Calculate(values);
     51    }
    7552
     53    public static double Calculate(double[,] values) {
     54      int n = values.GetLength(0);
    7655      double errorsSquaredSum = 0.0;
    7756      double originalSquaredSum = 0.0;
    78       double[] estimatedChanges = new double[end - start];
    79       double[] originalChanges = new double[end - start];
    8057      int nSamples = 0;
    81       for (int sample = start; sample < end; sample++) {
    82         double prevValue = dataset.GetValue(sample - 1, targetVariable);
    83         double estimatedChange = evaluator.Evaluate(sample) - prevValue;
    84         double originalChange = dataset.GetValue(sample, targetVariable) - prevValue;
    85         if (updateTargetValues) {
    86           dataset.SetValue(sample, targetVariable, estimatedChange + prevValue);
    87         }
     58      for (int sample = 1; sample < n; sample++) {
     59        double prevValue = values[sample - 1, 1];
     60        double estimatedChange = values[sample, 0] - prevValue;
     61        double originalChange = values[sample, 1] - prevValue;
    8862        if (!double.IsNaN(originalChange) && !double.IsInfinity(originalChange)) {
    8963          double error = estimatedChange - originalChange;
    9064          errorsSquaredSum += error * error;
    9165          originalSquaredSum += originalChange * originalChange;
    92           estimatedChanges[sample - start] = estimatedChange;
    93           originalChanges[sample - start] = originalChange;
    9466          nSamples++;
    9567        }
     
    9870      if (double.IsNaN(quality) || double.IsInfinity(quality))
    9971        quality = double.MaxValue;
    100       theilInequaliy.Data = quality; // U2
    101 
    102       // decomposition into U_bias + U_variance + U_covariance parts
    103       double bias = Statistics.Mean(estimatedChanges) - Statistics.Mean(originalChanges);
    104       bias *= bias; // squared
    105       uBias.Data = bias / (errorsSquaredSum / nSamples);
    106 
    107       double variance = Statistics.StandardDeviation(estimatedChanges) - Statistics.StandardDeviation(originalChanges);
    108       variance *= variance; // squared
    109       uVariance.Data = variance / (errorsSquaredSum / nSamples);
    110 
    111       // all parts add up to one so I don't have to calculate the correlation coefficient for the covariance proportion
    112       uCovariance.Data = 1.0 - uBias.Data - uVariance.Data;
     72      return quality;
    11373    }
    11474  }
Note: See TracChangeset for help on using the changeset viewer.