Changeset 6612 for trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4
- Timestamp:
- 07/29/11 13:09:35 (13 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleModel.cs
r6603 r6612 74 74 models.Add(model); 75 75 } 76 public void Remove(IRegressionModel model) { 77 models.Remove(model); 78 } 76 79 77 80 public IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows) { -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs
r6592 r6612 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HeuristicLab.Collections; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; … … 40 41 } 41 42 43 private readonly ItemCollection<IRegressionSolution> regressionSolutions; 44 public IItemCollection<IRegressionSolution> RegressionSolutions { 45 get { return regressionSolutions; } 46 } 47 42 48 [Storable] 43 49 private Dictionary<IRegressionModel, IntRange> trainingPartitions; … … 46 52 47 53 [StorableConstructor] 48 private RegressionEnsembleSolution(bool deserializing) : base(deserializing) { } 54 private RegressionEnsembleSolution(bool deserializing) 55 : base(deserializing) { 56 regressionSolutions = new ItemCollection<IRegressionSolution>(); 57 } 58 [StorableHook(HookType.AfterDeserialization)] 59 private void AfterDeserialization() { 60 foreach (var model in Model.Models) { 61 IRegressionProblemData problemData = (IRegressionProblemData)ProblemData.Clone(); 62 problemData.TrainingPartition.Start = trainingPartitions[model].Start; 63 problemData.TrainingPartition.End = trainingPartitions[model].End; 64 problemData.TestPartition.Start = testPartitions[model].Start; 65 problemData.TestPartition.End = testPartitions[model].End; 66 67 regressionSolutions.Add(model.CreateRegressionSolution(problemData)); 68 } 69 RegisterRegressionSolutionsEventHandler(); 70 } 71 49 72 private RegressionEnsembleSolution(RegressionEnsembleSolution original, Cloner cloner) 50 73 : base(original, cloner) { … … 57 80 testPartitions[cloner.Clone(pair.Key)] = cloner.Clone(pair.Value); 58 81 } 59 RecalculateResults(); 82 83 regressionSolutions = cloner.Clone(original.regressionSolutions); 84 RegisterRegressionSolutionsEventHandler(); 60 85 } 61 86 62 87 public RegressionEnsembleSolution(IEnumerable<IRegressionModel> models, IRegressionProblemData problemData) 63 : base(new RegressionEnsembleModel(models), new RegressionEnsembleProblemData(problemData)) { 64 trainingPartitions = new Dictionary<IRegressionModel, IntRange>(); 65 testPartitions = new Dictionary<IRegressionModel, IntRange>(); 66 AddModelsAndPartitions(models, 67 from m in models select (IntRange)problemData.TrainingPartition.Clone(), 68 from m in models select (IntRange)problemData.TestPartition.Clone()); 69 RecalculateResults(); 70 } 88 : this(models, problemData, 89 models.Select(m => (IntRange)problemData.TrainingPartition.Clone()), 90 models.Select(m => (IntRange)problemData.TestPartition.Clone()) 91 ) { } 71 92 72 93 public RegressionEnsembleSolution(IEnumerable<IRegressionModel> models, IRegressionProblemData problemData, IEnumerable<IntRange> trainingPartitions, IEnumerable<IntRange> testPartitions) 73 : base(new RegressionEnsembleModel( models), new RegressionEnsembleProblemData(problemData)) {94 : base(new RegressionEnsembleModel(Enumerable.Empty<IRegressionModel>()), new RegressionEnsembleProblemData(problemData)) { 74 95 this.trainingPartitions = new Dictionary<IRegressionModel, IntRange>(); 75 96 this.testPartitions = new Dictionary<IRegressionModel, IntRange>(); 76 AddModelsAndPartitions(models, trainingPartitions, testPartitions); 77 RecalculateResults(); 97 this.regressionSolutions = new ItemCollection<IRegressionSolution>(); 98 99 List<IRegressionSolution> solutions = new List<IRegressionSolution>(); 100 var modelEnumerator = models.GetEnumerator(); 101 var trainingPartitionEnumerator = trainingPartitions.GetEnumerator(); 102 var testPartitionEnumerator = testPartitions.GetEnumerator(); 103 104 while (modelEnumerator.MoveNext() & trainingPartitionEnumerator.MoveNext() & testPartitionEnumerator.MoveNext()) { 105 var p = (IRegressionProblemData)problemData.Clone(); 106 p.TrainingPartition.Start = trainingPartitionEnumerator.Current.Start; 107 p.TrainingPartition.End = trainingPartitionEnumerator.Current.End; 108 p.TestPartition.Start = testPartitionEnumerator.Current.Start; 109 p.TestPartition.End = testPartitionEnumerator.Current.End; 110 111 solutions.Add(modelEnumerator.Current.CreateRegressionSolution(p)); 112 } 113 if (modelEnumerator.MoveNext() | trainingPartitionEnumerator.MoveNext() | testPartitionEnumerator.MoveNext()) { 114 throw new ArgumentException(); 115 } 116 117 RegisterRegressionSolutionsEventHandler(); 118 regressionSolutions.AddRange(solutions); 78 119 } 79 120 … … 81 122 return new RegressionEnsembleSolution(this, cloner); 82 123 } 124 private void RegisterRegressionSolutionsEventHandler() { 125 regressionSolutions.ItemsAdded += new CollectionItemsChangedEventHandler<IRegressionSolution>(regressionSolutions_ItemsAdded); 126 regressionSolutions.ItemsRemoved += new CollectionItemsChangedEventHandler<IRegressionSolution>(regressionSolutions_ItemsRemoved); 127 regressionSolutions.CollectionReset += new CollectionItemsChangedEventHandler<IRegressionSolution>(regressionSolutions_CollectionReset); 128 } 83 129 84 130 protected override void RecalculateResults() { … … 86 132 } 87 133 134 #region Evaluation 88 135 public override IEnumerable<double> EstimatedTrainingValues { 89 136 get { … … 154 201 return estimatedValues.DefaultIfEmpty(double.NaN).Average(); 155 202 } 156 157 158 public void AddModelsAndPartitions(IEnumerable<IRegressionSolution> solutions) { 159 foreach (var solution in solutions) { 160 var ensembleSolution = solution as RegressionEnsembleSolution; 161 if (ensembleSolution != null) { 162 var data = from m in ensembleSolution.Model.Models 163 let train = ensembleSolution.trainingPartitions[m] 164 let test = ensembleSolution.testPartitions[m] 165 select new { m, train, test }; 166 167 foreach (var d in data) { 168 Model.Add(d.m); 169 trainingPartitions[d.m] = (IntRange)d.train.Clone(); 170 testPartitions[d.m] = (IntRange)d.test.Clone(); 171 } 172 } else { 173 Model.Add(solution.Model); 174 trainingPartitions[solution.Model] = (IntRange)solution.ProblemData.TrainingPartition.Clone(); 175 testPartitions[solution.Model] = (IntRange)solution.ProblemData.TestPartition.Clone(); 176 } 177 } 178 203 #endregion 204 205 public void AddRegressionSolutions(IEnumerable<IRegressionSolution> solutions) { 206 regressionSolutions.AddRange(solutions); 207 } 208 public void RemoveRegressionSolutions(IEnumerable<IRegressionSolution> solutions) { 209 regressionSolutions.RemoveRange(solutions); 210 } 211 212 private void regressionSolutions_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IRegressionSolution> e) { 213 foreach (var solution in e.Items) AddRegressionSolution(solution); 179 214 RecalculateResults(); 180 215 } 181 182 private void AddModelsAndPartitions(IEnumerable<IRegressionModel> models, IEnumerable<IntRange> trainingPartitions, IEnumerable<IntRange> testPartitions) { 183 var modelEnumerator = models.GetEnumerator(); 184 var trainingPartitionEnumerator = trainingPartitions.GetEnumerator(); 185 var testPartitionEnumerator = testPartitions.GetEnumerator(); 186 187 while (modelEnumerator.MoveNext() & trainingPartitionEnumerator.MoveNext() & testPartitionEnumerator.MoveNext()) { 188 this.trainingPartitions[modelEnumerator.Current] = (IntRange)trainingPartitionEnumerator.Current.Clone(); 189 this.testPartitions[modelEnumerator.Current] = (IntRange)testPartitionEnumerator.Current.Clone(); 190 } 191 if (modelEnumerator.MoveNext() | trainingPartitionEnumerator.MoveNext() | testPartitionEnumerator.MoveNext()) { 192 throw new ArgumentException(); 193 } 216 private void regressionSolutions_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRegressionSolution> e) { 217 foreach (var solution in e.Items) RemoveRegressionSolution(solution); 218 RecalculateResults(); 219 } 220 private void regressionSolutions_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRegressionSolution> e) { 221 foreach (var solution in e.OldItems) RemoveRegressionSolution(solution); 222 foreach (var solution in e.Items) AddRegressionSolution(solution); 223 RecalculateResults(); 224 } 225 226 private void AddRegressionSolution(IRegressionSolution solution) { 227 if (Model.Models.Contains(solution.Model)) throw new ArgumentException(); 228 Model.Add(solution.Model); 229 trainingPartitions[solution.Model] = solution.ProblemData.TrainingPartition; 230 testPartitions[solution.Model] = solution.ProblemData.TestPartition; 231 } 232 233 private void RemoveRegressionSolution(IRegressionSolution solution) { 234 if (!Model.Models.Contains(solution.Model)) throw new ArgumentException(); 235 Model.Remove(solution.Model); 236 trainingPartitions.Remove(solution.Model); 237 testPartitions.Remove(solution.Model); 194 238 } 195 239 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionEnsembleModel.cs
r6520 r6612 24 24 public interface IRegressionEnsembleModel : IRegressionModel { 25 25 void Add(IRegressionModel model); 26 void Remove(IRegressionModel model); 26 27 IEnumerable<IRegressionModel> Models { get; } 27 28 IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows); -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionEnsembleSolution.cs
r6233 r6612 21 21 22 22 using System.Collections.Generic; 23 using HeuristicLab.Core; 23 24 namespace HeuristicLab.Problems.DataAnalysis { 24 25 public interface IRegressionEnsembleSolution : IRegressionSolution { 25 26 new IRegressionEnsembleModel Model { get; } 27 IItemCollection<IRegressionSolution> RegressionSolutions { get; } 26 28 IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows); 27 29 }
Note: See TracChangeset
for help on using the changeset viewer.