Free cookie consent management tool by TermsFeed Policy Generator

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

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

Fixed a bug in extraction of TrainingMAPE. #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.TrainingMeanAbsolutePercentageError.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.