Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Modeling/3.2/DefaultRegressionOperators.cs @ 2370

Last change on this file since 2370 was 2370, checked in by gkronber, 15 years ago

Added enumerable type for model results and changed analyzer model, the database backend and the model analysis operators to use the enumerable type instead of hard-coded strings. #755 (Hard-coded strings for variable names of data-modeling results)

File size: 12.4 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HeuristicLab.Core;
23using HeuristicLab.DataAnalysis;
24using HeuristicLab.Operators;
25using HeuristicLab.Modeling;
26using HeuristicLab.Data;
27
28namespace HeuristicLab.Modeling {
29  public static class DefaultRegressionOperators {
30    public static IOperator CreateProblemInjector() {
31      CombinedOperator op = new CombinedOperator();
32      op.Name = "ProblemInjector";
33      SequentialProcessor seq = new SequentialProcessor();
34
35      seq.AddSubOperator(new ProblemInjector());
36      DatasetShuffler shuffler = new DatasetShuffler();
37      shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";
38      shuffler.GetVariableInfo("ShuffleEnd").ActualName = "TrainingSamplesEnd";
39      seq.AddSubOperator(shuffler);
40      op.OperatorGraph.AddOperator(seq);
41      op.OperatorGraph.InitialOperator = seq;
42      return op;
43    }
44
45    public static IOperator CreatePostProcessingOperator() {
46      CombinedOperator op = new CombinedOperator();
47      op.Name = "Regression model analyser";
48      SequentialProcessor seq = new SequentialProcessor();
49      #region MSE
50      SimpleMSEEvaluator trainingMseEvaluator = new SimpleMSEEvaluator();
51      trainingMseEvaluator.Name = "TrainingMseEvaluator";
52      trainingMseEvaluator.GetVariableInfo("MSE").ActualName = ModelingResult.TrainingMeanSquaredError.ToString();
53      trainingMseEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
54      SimpleMSEEvaluator validationMseEvaluator = new SimpleMSEEvaluator();
55      validationMseEvaluator.Name = "ValidationMseEvaluator";
56      validationMseEvaluator.GetVariableInfo("MSE").ActualName = ModelingResult.ValidationMeanSquaredError.ToString();
57      validationMseEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
58      SimpleMSEEvaluator testMseEvaluator = new SimpleMSEEvaluator();
59      testMseEvaluator.Name = "TestMseEvaluator";
60      testMseEvaluator.GetVariableInfo("MSE").ActualName = ModelingResult.TestMeanSquaredError.ToString();
61      testMseEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
62      #endregion
63      #region MAPE
64      SimpleMeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
65      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
66      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.ValidationMeanAbsolutePercentageError.ToString();
67      trainingMapeEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
68      SimpleMeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
69      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
70      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.ValidationMeanAbsolutePercentageError.ToString();
71      validationMapeEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
72      SimpleMeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator();
73      testMapeEvaluator.Name = "TestMapeEvaluator";
74      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.TestMeanAbsolutePercentageError.ToString();
75      testMapeEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
76      #endregion
77      #region MAPRE
78      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
79      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
80      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.TrainingMeanAbsolutePercentageOfRangeError.ToString();
81      trainingMapreEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
82      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
83      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
84      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.ValidationMeanAbsolutePercentageOfRangeError.ToString();
85      validationMapreEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
86      SimpleMeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator();
87      testMapreEvaluator.Name = "TestMapreEvaluator";
88      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.TestMeanAbsolutePercentageOfRangeError.ToString();
89      testMapreEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
90      #endregion MAPRE
91      #region R2
92      SimpleR2Evaluator trainingR2Evaluator = new SimpleR2Evaluator();
93      trainingR2Evaluator.Name = "TrainingR2Evaluator";
94      trainingR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.TrainingCoefficientOfDetermination.ToString();
95      trainingR2Evaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
96      SimpleR2Evaluator validationR2Evaluator = new SimpleR2Evaluator();
97      validationR2Evaluator.Name = "ValidationR2Evaluator";
98      validationR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.ValidationCoefficientOfDetermination.ToString();
99      validationR2Evaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
100      SimpleR2Evaluator testR2Evaluator = new SimpleR2Evaluator();
101      testR2Evaluator.Name = "TestR2Evaluator";
102      testR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.TestCoefficientOfDetermination.ToString();
103      testR2Evaluator.GetVariableInfo("Values").ActualName = "TestValues";
104      #endregion
105      #region VAF
106      SimpleVarianceAccountedForEvaluator trainingVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
107      trainingVAFEvaluator.Name = "TrainingVAFEvaluator";
108      trainingVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.TrainingVarianceAccountedFor.ToString();
109      trainingVAFEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
110      SimpleVarianceAccountedForEvaluator validationVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
111      validationVAFEvaluator.Name = "ValidationVAFEvaluator";
112      validationVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.ValidationVarianceAccountedFor.ToString();
113      validationVAFEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
114      SimpleVarianceAccountedForEvaluator testVAFEvaluator = new SimpleVarianceAccountedForEvaluator();
115      testVAFEvaluator.Name = "TestVAFEvaluator";
116      testVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.TestVarianceAccountedFor.ToString();
117      testVAFEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
118      #endregion
119
120      seq.AddSubOperator(trainingMseEvaluator);
121      seq.AddSubOperator(validationMseEvaluator);
122      seq.AddSubOperator(testMseEvaluator);
123      seq.AddSubOperator(trainingMapeEvaluator);
124      seq.AddSubOperator(validationMapeEvaluator);
125      seq.AddSubOperator(testMapeEvaluator);
126      seq.AddSubOperator(trainingMapreEvaluator);
127      seq.AddSubOperator(validationMapreEvaluator);
128      seq.AddSubOperator(testMapreEvaluator);
129      seq.AddSubOperator(trainingR2Evaluator);
130      seq.AddSubOperator(validationR2Evaluator);
131      seq.AddSubOperator(testR2Evaluator);
132      seq.AddSubOperator(trainingVAFEvaluator);
133      seq.AddSubOperator(validationVAFEvaluator);
134      seq.AddSubOperator(testVAFEvaluator);
135
136      #region variable impacts
137      VariableEvaluationImpactCalculator evaluationImpactCalculator = new VariableEvaluationImpactCalculator();
138      evaluationImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
139      evaluationImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
140      VariableQualityImpactCalculator qualityImpactCalculator = new VariableQualityImpactCalculator();
141      qualityImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
142      qualityImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
143
144      seq.AddSubOperator(evaluationImpactCalculator);
145      seq.AddSubOperator(qualityImpactCalculator);
146      #endregion
147
148      op.OperatorGraph.AddOperator(seq);
149      op.OperatorGraph.InitialOperator = seq;
150      return op;
151    }
152
153    public static IAnalyzerModel PopulateAnalyzerModel(IScope modelScope, IAnalyzerModel model) {
154      model.Predictor = modelScope.GetVariableValue<IPredictor>("Predictor", false);
155      Dataset ds = modelScope.GetVariableValue<Dataset>("Dataset", true);
156      model.Dataset = ds;
157      model.TargetVariable = ds.GetVariableName(modelScope.GetVariableValue<IntData>("TargetVariable", true).Data);
158      model.Type = ModelType.Regression;
159      model.TrainingSamplesStart = modelScope.GetVariableValue<IntData>("TrainingSamplesStart", true).Data;
160      model.TrainingSamplesEnd = modelScope.GetVariableValue<IntData>("TrainingSamplesEnd", true).Data;
161      model.ValidationSamplesStart = modelScope.GetVariableValue<IntData>("ValidationSamplesStart", true).Data;
162      model.ValidationSamplesEnd = modelScope.GetVariableValue<IntData>("ValidationSamplesEnd", true).Data;
163      model.TestSamplesStart = modelScope.GetVariableValue<IntData>("TestSamplesStart", true).Data;
164      model.TestSamplesEnd = modelScope.GetVariableValue<IntData>("TestSamplesEnd", true).Data;
165
166      model.ExtractResult(modelScope, ModelingResult.TrainingMeanSquaredError);
167      model.ExtractResult(modelScope, ModelingResult.ValidationMeanSquaredError);
168      model.ExtractResult(modelScope, ModelingResult.TestMeanSquaredError);
169      model.ExtractResult(modelScope, ModelingResult.TrainingMeanAbsolutePercentageError);
170      model.ExtractResult(modelScope, ModelingResult.ValidationMeanAbsolutePercentageError);
171      model.ExtractResult(modelScope, ModelingResult.TestMeanAbsolutePercentageError);
172      model.ExtractResult(modelScope, ModelingResult.TrainingMeanAbsolutePercentageOfRangeError);
173      model.ExtractResult(modelScope, ModelingResult.ValidationMeanAbsolutePercentageOfRangeError);
174      model.ExtractResult(modelScope, ModelingResult.TestMeanAbsolutePercentageOfRangeError);
175      model.ExtractResult(modelScope, ModelingResult.TrainingCoefficientOfDetermination);
176      model.ExtractResult(modelScope, ModelingResult.ValidationCoefficientOfDetermination);
177      model.ExtractResult(modelScope, ModelingResult.TestCoefficientOfDetermination);
178      model.ExtractResult(modelScope, ModelingResult.TrainingVarianceAccountedFor);
179      model.ExtractResult(modelScope, ModelingResult.ValidationVarianceAccountedFor);
180      model.ExtractResult(modelScope, ModelingResult.TestVarianceAccountedFor);
181
182      ItemList evaluationImpacts = modelScope.GetVariableValue<ItemList>(ModelingResult.VariableEvaluationImpact.ToString(), false);
183      ItemList qualityImpacts = modelScope.GetVariableValue<ItemList>(ModelingResult.VariableQualityImpact.ToString(), false);
184      foreach (ItemList row in evaluationImpacts) {
185        string variableName = ((StringData)row[0]).Data;
186        double impact = ((DoubleData)row[1]).Data;
187        model.SetVariableResult(ModelingResult.VariableEvaluationImpact, variableName, impact);
188        model.AddInputVariable(variableName);
189      }
190      foreach (ItemList row in qualityImpacts) {
191        string variableName = ((StringData)row[0]).Data;
192        double impact = ((DoubleData)row[1]).Data;
193        model.SetVariableResult(ModelingResult.VariableQualityImpact, variableName, impact);
194        model.AddInputVariable(variableName);
195      }
196
197      return model;
198    }
199  }
200}
Note: See TracBrowser for help on using the repository browser.