Changeset 6991 for branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs
- Timestamp:
- 11/14/11 17:08:32 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/RegressionBenchmarks/HeuristicLab.Problems.DataAnalysis.Benchmarks/3.4/Generator/RegressionBenchmark.cs
r6968 r6991 20 20 #endregion 21 21 22 using System;23 22 using System.Collections; 24 23 using System.Collections.Generic; … … 26 25 using HeuristicLab.Common; 27 26 using HeuristicLab.Data; 27 using HeuristicLab.Random; 28 28 29 29 namespace HeuristicLab.Problems.DataAnalysis.Benchmarks { 30 30 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 31 38 32 39 protected RegressionBenchmark() { } … … 35 42 } 36 43 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); 44 45 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); 46 47 47 48 public IDataAnalysisProblemData GenerateProblemData() { 48 //prepare dictionary49 49 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) { 52 52 data.Add(variable, new List<double>()); 53 53 } 54 54 55 data = CalculateValues(data);55 data = GenerateInput(data); 56 56 57 57 List<IList> values = new List<IList>(); … … 65 65 RegressionProblemData problemData = new RegressionProblemData(dataset, dataset.DoubleVariables.Skip(1), dataset.DoubleVariables.First()); 66 66 67 #region set ProblemData specific parameters68 67 problemData.Name = "Data generated for benchmark problem \"" + this.Name + "\""; 69 68 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 }79 69 80 70 problemData.TestPartition.Start = this.TestPartition.Start; 81 71 problemData.TestPartition.End = this.TestPartition.End; 72 82 73 problemData.TrainingPartition.Start = this.TrainingPartition.Start; 83 74 problemData.TrainingPartition.End = this.TrainingPartition.End; 84 #endregion85 75 86 76 return problemData; 87 77 } 88 78 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))); 98 97 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); 100 112 } 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(); 102 145 } 103 146 }
Note: See TracChangeset
for help on using the changeset viewer.