Free cookie consent management tool by TermsFeed Policy Generator

Changeset 2349


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
Files:
1 added
6 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  }
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj

    r2328 r2349  
    8383  </ItemGroup>
    8484  <ItemGroup>
     85    <Compile Include="TimeSeriesSupportVectorRegression.cs" />
    8586    <Compile Include="PredictorView.cs">
    8687      <SubType>UserControl</SubType>
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMHelper.cs

    r2347 r2349  
    2424      }
    2525
    26       int maxColumns = (dataset.Columns - skippedFeatures.Count()) * (maxTimeOffset-minTimeOffset);
     26      int maxColumns = (dataset.Columns - skippedFeatures.Count()) * (maxTimeOffset - minTimeOffset + 1);
    2727
    2828      double[] targetVector = new double[rowCount];
     
    4242          if (!skippedFeatures.Contains(col) && col != targetVariable && columnMapping.ContainsKey(col)) {
    4343            for (int timeOffset = minTimeOffset; timeOffset <= maxTimeOffset; timeOffset++) {
    44               int actualColumn = columnMapping[col] * (maxTimeOffset - minTimeOffset) + (timeOffset - maxTimeOffset) + 1;
     44              int actualColumn = columnMapping[col] * (maxTimeOffset - minTimeOffset + 1) + (timeOffset - minTimeOffset);
    4545              double value = dataset.GetValue(start + row + timeOffset, col);
    4646              if (!double.IsNaN(value))
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorCreator.cs

    r2347 r2349  
    4242      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
    4343      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
    44       AddVariableInfo(new VariableInfo("MaxTimeOffset", "Maximal time offset for time-series prognosis", typeof(IntData), VariableKind.In));
    45       AddVariableInfo(new VariableInfo("MinTimeOffset", "Minimal time offset for time-series prognosis", typeof(IntData), VariableKind.In));
     44      AddVariableInfo(new VariableInfo("MaxTimeOffset", "(optional) Maximal time offset for time-series prognosis", typeof(IntData), VariableKind.In));
     45      AddVariableInfo(new VariableInfo("MinTimeOffset", "(optional) Minimal time offset for time-series prognosis", typeof(IntData), VariableKind.In));
    4646
    4747      //SVM parameters
     
    7171      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
    7272      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
    73       int maxTimeOffset = GetVariableValue<IntData>("MaxTimeOffset", scope, true).Data;
    74       int minTimeOffset = GetVariableValue<IntData>("MinTimeOffset", scope, true).Data;
     73      IntData maxTimeOffsetData = GetVariableValue<IntData>("MaxTimeOffset", scope, true, false);
     74      int maxTimeOffset = maxTimeOffsetData == null ? 0 : maxTimeOffsetData.Data;
     75      IntData minTimeOffsetData = GetVariableValue<IntData>("MinTimeOffset", scope, true, false);
     76      int minTimeOffset = minTimeOffsetData == null ? 0 : minTimeOffsetData.Data;
    7577      string svmType = GetVariableValue<StringData>("SVMType", scope, true).Data;
    7678      string svmKernelType = GetVariableValue<StringData>("SVMKernelType", scope, true).Data;
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorEvaluator.cs

    r2347 r2349  
    3838      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
    3939      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
    40       AddVariableInfo(new VariableInfo("MaxTimeOffset", "Maximal allowed time offset for input variables", typeof(IntData), VariableKind.In));
    41       AddVariableInfo(new VariableInfo("MinTimeOffset", "Minimal allowed time offset for input variables", typeof(IntData), VariableKind.In));
     40      AddVariableInfo(new VariableInfo("MaxTimeOffset", "(optional) Maximal allowed time offset for input variables", typeof(IntData), VariableKind.In));
     41      AddVariableInfo(new VariableInfo("MinTimeOffset", "(optional) Minimal allowed time offset for input variables", typeof(IntData), VariableKind.In));
    4242      AddVariableInfo(new VariableInfo("SVMModel", "Represent the model learned by the SVM", typeof(SVMModel), VariableKind.In));
    4343      AddVariableInfo(new VariableInfo("Values", "Target vs predicted values", typeof(DoubleMatrixData), VariableKind.New | VariableKind.Out));
     
    5050      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
    5151      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
    52       int minTimeOffset = GetVariableValue<IntData>("MinTimeOffset", scope, true).Data;
    53       int maxTimeOffset = GetVariableValue<IntData>("MaxTimeOffset", scope, true).Data;
     52      IntData minTimeOffsetData = GetVariableValue<IntData>("MinTimeOffset", scope, true, false);
     53      int minTimeOffset = minTimeOffsetData == null ? 0 : minTimeOffsetData.Data;
     54      IntData maxTimeOffsetData = GetVariableValue<IntData>("MaxTimeOffset", scope, true, false);
     55      int maxTimeOffset = maxTimeOffsetData == null ? 0 : maxTimeOffsetData.Data;
    5456      SVMModel modelData = GetVariableValue<SVMModel>("SVMModel", scope, true);
    5557      SVM.Problem problem = SVMHelper.CreateSVMProblem(dataset, targetVariable, start, end, minTimeOffset, maxTimeOffset);
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs

    r2347 r2349  
    3939  public class SupportVectorRegression : ItemBase, IEditable, IAlgorithm {
    4040
    41     public string Name { get { return "SupportVectorRegression"; } }
    42     public string Description { get { return "TODO"; } }
     41    public virtual string Name { get { return "SupportVectorRegression"; } }
     42    public virtual string Description { get { return "TODO"; } }
    4343
    4444    private SequentialEngine.SequentialEngine engine;
     
    107107    }
    108108
    109     public int MaxTimeOffset {
    110       get { return GetVariableInjector().GetVariable("MaxTimeOffset").GetValue<IntData>().Data; }
    111       set { GetVariableInjector().GetVariable("MaxTimeOffset").GetValue<IntData>().Data = value; }
    112     }
    113 
    114     public int MinTimeOffset {
    115       get { return GetVariableInjector().GetVariable("MinTimeOffset").GetValue<IntData>().Data; }
    116       set { GetVariableInjector().GetVariable("MinTimeOffset").GetValue<IntData>().Data = value; }
    117     }
    118 
    119109    public SupportVectorRegression() {
    120110      engine = new SequentialEngine.SequentialEngine();
     
    125115      MaxNuIndex = NuList.Data.Length;
    126116      MaxGammaIndex = GammaList.Data.Length;
    127       MaxTimeOffset = 0;
    128       MinTimeOffset = 0;
    129117    }
    130118
     
    149137    }
    150138
    151     private IOperator CreateInitialization() {
     139    protected virtual IOperator CreateInitialization() {
    152140      SequentialProcessor seq = new SequentialProcessor();
    153141      seq.Name = "Initialization";
     
    159147      seq.AddSubOperator(new RandomInjector());
    160148
    161       //DatasetShuffler shuffler = new DatasetShuffler();
    162       //shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";
    163       //shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd";
    164       //seq.AddSubOperator(shuffler);
     149      DatasetShuffler shuffler = new DatasetShuffler();
     150      shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";
     151      shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd";
     152      seq.AddSubOperator(shuffler);
    165153      return seq;
    166154    }
     
    279267      modelProcessor.AddSubOperator(trainingEvaluator);
    280268      modelProcessor.AddSubOperator(CreateEvaluator("Validation"));
    281       modelProcessor.AddSubOperator(CreateEvaluator("Test"));
    282269
    283270      DataCollector collector = new DataCollector();
     
    307294    }
    308295
    309     private IOperator CreateEvaluator(string p) {
     296    protected virtual IOperator CreateEvaluator(string p) {
    310297      CombinedOperator op = new CombinedOperator();
    311298      op.Name = p + "Evaluator";
     
    379366    }
    380367
    381     private IOperator CreateGlobalInjector() {
     368    protected virtual VariableInjector CreateGlobalInjector() {
    382369      VariableInjector injector = new VariableInjector();
    383370      injector.AddVariable(new HeuristicLab.Core.Variable("CostIndex", new IntData(0)));
     
    407394      injector.AddVariable(new HeuristicLab.Core.Variable("Type", new StringData("NU_SVR")));
    408395      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0)));
    409       injector.AddVariable(new HeuristicLab.Core.Variable("MaxTimeOffset", new IntData()));
    410       injector.AddVariable(new HeuristicLab.Core.Variable("MinTimeOffset", new IntData()));
    411396      return injector;
    412397    }
    413398
    414     private IOperator CreateModelAnalyser() {
     399    protected virtual IOperator CreateModelAnalyser() {
    415400      CombinedOperator modelAnalyser = new CombinedOperator();
    416401      modelAnalyser.Name = "Model Analyzer";
    417402      SequentialSubScopesProcessor seqSubScopeProc = new SequentialSubScopesProcessor();
    418403      SequentialProcessor seqProc = new SequentialProcessor();
     404
    419405      PredictorBuilder predictorBuilder = new PredictorBuilder();
    420406      predictorBuilder.GetVariableInfo("SVMModel").ActualName = "Model";
     
    426412      qualImpactCalc.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    427413
     414      seqProc.AddSubOperator(CreateEvaluator("Test"));
    428415      seqProc.AddSubOperator(predictorBuilder);
    429416      seqProc.AddSubOperator(evalImpactCalc);
     
    436423
    437424
    438     protected internal virtual IAnalyzerModel CreateSVMModel(IScope bestModelScope) {
     425    protected virtual IAnalyzerModel CreateSVMModel(IScope bestModelScope) {
    439426      AnalyzerModel model = new AnalyzerModel();
    440427      model.SetResult("TrainingMeanSquaredError", bestModelScope.GetVariableValue<DoubleData>("Quality", false).Data);
     
    486473    }
    487474
    488     private IOperator GetVariableInjector() {
     475    protected IOperator GetVariableInjector() {
    489476      return GetMainOperator().SubOperators[0].SubOperators[0];
    490477    }
    491478
    492     private IOperator GetMainOperator() {
     479    protected IOperator GetMainOperator() {
    493480      CombinedOperator svm = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
    494481      return svm.OperatorGraph.InitialOperator;
Note: See TracChangeset for help on using the changeset viewer.