Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/14/11 17:08:32 (12 years ago)
Author:
sforsten
Message:

#1669: First version with a simpler design as discussed with Michael Kommenda has been implemented and will be tested soon. Currently only the KotanchekFunction.cs is changed accordingly. Other benchmarks are going to follow soon.

The classes for the different distributions are not needed any longer. Static methods in RegressionBenchmark replace them.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs

    r6968 r6991  
    2020#endregion
    2121
    22 using System;
    2322using System.Collections;
    2423using System.Collections.Generic;
     
    2625using HeuristicLab.Common;
    2726using HeuristicLab.Data;
     27using HeuristicLab.Random;
    2828
    2929namespace HeuristicLab.Problems.DataAnalysis.Benchmarks {
    3030  public abstract class RegressionBenchmark : Benchmark, IRegressionBenchmarkProblemDataGenerator {
     31
     32    #region properties
     33    public abstract List<string> InputVariable { get; }
     34    public abstract string TargetVariable { get; }
     35    public abstract IntRange TrainingPartition { get; }
     36    public abstract IntRange TestPartition { get; }
     37    #endregion
    3138
    3239    protected RegressionBenchmark() { }
     
    3542    }
    3643
    37     #region properties
    38     public string TargetVariable { get; protected set; }
    39     public Dictionary<string, IntRange> Inputvariables { get; protected set; }
    40     public int AmountOfPoints { get; protected set; }
    41     public IntRange TrainingPartition { get; protected set; }
    42     public IntRange TestPartition { get; protected set; }
    43     #endregion
     44    protected abstract List<double> CalculateFunction(Dictionary<string, IList<double>> data);
    4445
    45     protected abstract double CalculateFunction(Dictionary<string, IList<double>> data, List<string> vars);
     46    protected abstract Dictionary<string, IList<double>> GenerateInput(Dictionary<string, IList<double>> data);
    4647
    4748    public IDataAnalysisProblemData GenerateProblemData() {
    48       //prepare dictionary
    4949      Dictionary<string, IList<double>> data = new Dictionary<string, IList<double>>();
    50       data.Add(TargetVariable, new List<double>());
    51       foreach (var variable in Inputvariables.Keys) {
     50      data.Add(this.TargetVariable, new List<double>());
     51      foreach (var variable in this.InputVariable) {
    5252        data.Add(variable, new List<double>());
    5353      }
    5454
    55       data = CalculateValues(data);
     55      data = GenerateInput(data);
    5656
    5757      List<IList> values = new List<IList>();
     
    6565      RegressionProblemData problemData = new RegressionProblemData(dataset, dataset.DoubleVariables.Skip(1), dataset.DoubleVariables.First());
    6666
    67       #region set ProblemData specific parameters
    6867      problemData.Name = "Data generated for benchmark problem \"" + this.Name + "\"";
    6968
    70       problemData.TargetVariableParameter.Value =
    71         problemData.TargetVariableParameter.ValidValues.First(v => v.Value == TargetVariable);
    72       problemData.InputVariables.SetItemCheckedState(
    73         problemData.InputVariables.Single(x => x.Value == TargetVariable), false);
    74 
    75       foreach (var variable in this.Inputvariables) {
    76         problemData.InputVariables.SetItemCheckedState(
    77           problemData.InputVariables.Single(x => x.Value == variable.Key), true);
    78       }
    7969
    8070      problemData.TestPartition.Start = this.TestPartition.Start;
    8171      problemData.TestPartition.End = this.TestPartition.End;
     72
    8273      problemData.TrainingPartition.Start = this.TrainingPartition.Start;
    8374      problemData.TrainingPartition.End = this.TrainingPartition.End;
    84       #endregion
    8575
    8676      return problemData;
    8777    }
    8878
    89     private Dictionary<string, IList<double>> CalculateValues(Dictionary<string, IList<double>> data) {
    90       Random rand = new Random();
    91       List<string> vars = new List<string>(Inputvariables.Keys);
    92       for (int i = 0; i < AmountOfPoints; i++) {
    93         foreach (var variable in vars) {
    94           data[variable].Add(rand.NextDouble() *
    95             (Inputvariables[variable].End - Inputvariables[variable].Start) +
    96             Inputvariables[variable].Start);
    97         }
     79    //private Dictionary<string, IList<double>> CalculateValues(Dictionary<string, IList<double>> data, DatasetDefinition dataDef) {
     80    //  Random rand = new Random();
     81    //  var combinationDataSet = AllCombinationsOf(dataDef.RangeVariables.Values.Select(range => range.Values).ToList());
     82    //  int index = 0;
     83    //  var help = dataDef.RangeVariables.Keys;
     84    //  foreach (var dataSet in combinationDataSet) {
     85    //    data[help.ElementAt(index)] = dataSet;
     86    //    index++;
     87    //  }
     88    //  List<string> vars = new List<string>(dataDef.RandomVariables.Keys);
     89    //  for (int i = 0; i < dataDef.AmountOfPoints; i++) {
     90    //    foreach (var variable in vars) {
     91    //      data[variable].Add(dataDef.RandomVariables[variable].Next());
     92    //    }
     93    //    //  data[TargetVariable].Add(CalculateFunction(data, vars));
     94    //  }
     95    //  int bla = 0;
     96    //  var test = data.Values.Select((ind) => (ind.ElementAt(bla)));
    9897
    99         data[TargetVariable].Add(CalculateFunction(data, vars));
     98    //  return data;
     99    //}
     100
     101    public static List<double> generateSteps(DoubleRange range, double stepWidth) {
     102      return Enumerable.Range(0, (int)((range.End - range.Start) / stepWidth) + 1)
     103                                      .Select(i => (range.Start + i * stepWidth))
     104                                      .ToList<double>();
     105    }
     106
     107    public static List<double> generateUniformDistributedValues(int amount, DoubleRange range) {
     108      List<double> values = new List<double>();
     109      System.Random rand = new System.Random();
     110      for (int i = 0; i < amount; i++) {
     111        values.Add(rand.NextDouble() * (range.End - range.Start) + range.Start);
    100112      }
    101       return data;
     113      return values;
     114    }
     115
     116    public static List<double> generateNormalDistributedValues(int amount, double mu, double sigma) {
     117      List<double> values = new List<double>();
     118      FastRandom rand = new FastRandom();
     119      for (int i = 0; i < amount; i++) {
     120        values.Add(NormalDistributedRandom.NextDouble(rand, mu, sigma));
     121      }
     122      return values;
     123    }
     124
     125    public static List<List<double>> AllCombinationsOf(List<List<double>> sets) {
     126
     127      var combinations = new List<List<double>>();
     128
     129      foreach (var value in sets[0])
     130        combinations.Add(new List<double> { value });
     131
     132      foreach (var set in sets.Skip(1))
     133        combinations = AddExtraSet(combinations, set);
     134
     135      return combinations;
     136    }
     137
     138    private static List<List<double>> AddExtraSet
     139         (List<List<double>> combinations, List<double> set) {
     140      var newCombinations = from value in set
     141                            from combination in combinations
     142                            select new List<double>(combination) { value };
     143
     144      return newCombinations.ToList();
    102145    }
    103146  }
Note: See TracChangeset for help on using the changeset viewer.