Changeset 2349 for trunk/sources/HeuristicLab.Modeling/3.2
- Timestamp:
- 09/14/09 12:59:50 (15 years ago)
- 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 85 85 <Compile Include="BestSolutionStorer.cs" /> 86 86 <Compile Include="ClassificationProblemInjector.cs" /> 87 <Compile Include="SimpleTheilInequalityCoefficientEvaluator.cs" /> 87 88 <Compile Include="SolutionExtractor.cs" /> 88 89 <Compile Include="PredictorBase.cs" /> -
trunk/sources/HeuristicLab.Modeling/3.2/SimpleTheilInequalityCoefficientEvaluator.cs
r2348 r2349 25 25 using HeuristicLab.DataAnalysis; 26 26 27 namespace HeuristicLab. GP.StructureIdentification.TimeSeries{28 public class TheilInequalityCoefficientEvaluator : GPEvaluatorBase {27 namespace HeuristicLab.Modeling { 28 public class SimpleTheilInequalityCoefficientEvaluator : SimpleEvaluatorBase { 29 29 public override string Description { 30 30 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'. 33 32 34 33 U2 = Sqrt(1/N * Sum(P_t - A_t)^2 ) / Sqrt(1/N * Sum(A_t)^2 ) … … 42 41 } 43 42 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 } 50 47 } 51 48 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 } 75 52 53 public static double Calculate(double[,] values) { 54 int n = values.GetLength(0); 76 55 double errorsSquaredSum = 0.0; 77 56 double originalSquaredSum = 0.0; 78 double[] estimatedChanges = new double[end - start];79 double[] originalChanges = new double[end - start];80 57 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; 88 62 if (!double.IsNaN(originalChange) && !double.IsInfinity(originalChange)) { 89 63 double error = estimatedChange - originalChange; 90 64 errorsSquaredSum += error * error; 91 65 originalSquaredSum += originalChange * originalChange; 92 estimatedChanges[sample - start] = estimatedChange;93 originalChanges[sample - start] = originalChange;94 66 nSamples++; 95 67 } … … 98 70 if (double.IsNaN(quality) || double.IsInfinity(quality)) 99 71 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; 113 73 } 114 74 }
Note: See TracChangeset
for help on using the changeset viewer.