Changeset 2388
- Timestamp:
- 09/24/09 16:52:24 (15 years ago)
- Location:
- trunk/sources/HeuristicLab.Modeling/3.2
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Modeling/3.2/DefaultClassificationOperators.cs
r2370 r2388 33 33 34 34 SequentialProcessor seq = new SequentialProcessor(); 35 seq.AddSubOperator(DefaultRegressionOperators.CreatePostProcessingOperator()); 36 37 SimpleAccuracyEvaluator trainingAccuracy = new SimpleAccuracyEvaluator(); 38 trainingAccuracy.Name = "TrainingAccuracyEvaluator"; 39 trainingAccuracy.GetVariableInfo("Accuracy").ActualName = ModelingResult.TrainingAccuracy.ToString(); 40 trainingAccuracy.GetVariableInfo("Values").ActualName = "TrainingValues"; 41 42 SimpleAccuracyEvaluator validationAccuracy = new SimpleAccuracyEvaluator(); 43 validationAccuracy.Name = "ValidationAccuracyEvaluator"; 44 validationAccuracy.GetVariableInfo("Accuracy").ActualName = ModelingResult.ValidationAccuracy.ToString(); 45 validationAccuracy.GetVariableInfo("Values").ActualName = "ValidationValues"; 46 47 SimpleAccuracyEvaluator testAccuracy = new SimpleAccuracyEvaluator(); 48 testAccuracy.Name = "TestAccuracyEvaluator"; 49 testAccuracy.GetVariableInfo("Accuracy").ActualName = ModelingResult.TestAccuracy.ToString(); 50 testAccuracy.GetVariableInfo("Values").ActualName = "TestValues"; 35 seq.AddSubOperator(DefaultModelAnalyzerOperators.CreatePostProcessingOperator(ModelType.Classification)); 51 36 52 37 SimpleConfusionMatrixEvaluator trainingConfusionMatrixEvaluator = new SimpleConfusionMatrixEvaluator(); … … 63 48 testConfusionMatrixEvaluator.GetVariableInfo("ConfusionMatrix").ActualName = "TestConfusionMatrix"; 64 49 65 seq.AddSubOperator(trainingAccuracy);66 seq.AddSubOperator(validationAccuracy);67 seq.AddSubOperator(testAccuracy);68 50 seq.AddSubOperator(trainingConfusionMatrixEvaluator); 69 51 seq.AddSubOperator(validationConfusionMatrixEvaluator); … … 81 63 82 64 public static IAnalyzerModel PopulateAnalyzerModel(IScope modelScope, IAnalyzerModel model) { 83 DefaultRegressionOperators.PopulateAnalyzerModel(modelScope, model); 84 model.ExtractResult(modelScope, ModelingResult.TrainingAccuracy); 85 model.ExtractResult(modelScope, ModelingResult.ValidationAccuracy); 86 model.ExtractResult(modelScope, ModelingResult.TestAccuracy); 87 model.Type = ModelType.Classification; 88 return model; 65 return DefaultModelAnalyzerOperators.PopulateAnalyzerModel(modelScope, model, ModelType.Classification); 89 66 } 90 67 } -
trunk/sources/HeuristicLab.Modeling/3.2/DefaultRegressionOperators.cs
r2379 r2388 44 44 45 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 NMSE 64 SimpleNMSEEvaluator trainingNmseEvaluator = new SimpleNMSEEvaluator(); 65 trainingNmseEvaluator.Name = "TrainingNmseEvaluator"; 66 trainingNmseEvaluator.GetVariableInfo("NMSE").ActualName = ModelingResult.TrainingNormalizedMeanSquaredError.ToString(); 67 trainingNmseEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues"; 68 SimpleNMSEEvaluator validationNmseEvaluator = new SimpleNMSEEvaluator(); 69 validationNmseEvaluator.Name = "ValidationMseEvaluator"; 70 validationNmseEvaluator.GetVariableInfo("NMSE").ActualName = ModelingResult.ValidationNormalizedMeanSquaredError.ToString(); 71 validationNmseEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues"; 72 SimpleNMSEEvaluator testNmseEvaluator = new SimpleNMSEEvaluator(); 73 testNmseEvaluator.Name = "TestNmseEvaluator"; 74 testNmseEvaluator.GetVariableInfo("NMSE").ActualName = ModelingResult.TestNormalizedMeanSquaredError.ToString(); 75 testNmseEvaluator.GetVariableInfo("Values").ActualName = "TestValues"; 76 #endregion 77 #region MAPE 78 SimpleMeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator(); 79 trainingMapeEvaluator.Name = "TrainingMapeEvaluator"; 80 trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.TrainingMeanAbsolutePercentageError.ToString(); 81 trainingMapeEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues"; 82 SimpleMeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator(); 83 validationMapeEvaluator.Name = "ValidationMapeEvaluator"; 84 validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.ValidationMeanAbsolutePercentageError.ToString(); 85 validationMapeEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues"; 86 SimpleMeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new SimpleMeanAbsolutePercentageErrorEvaluator(); 87 testMapeEvaluator.Name = "TestMapeEvaluator"; 88 testMapeEvaluator.GetVariableInfo("MAPE").ActualName = ModelingResult.TestMeanAbsolutePercentageError.ToString(); 89 testMapeEvaluator.GetVariableInfo("Values").ActualName = "TestValues"; 90 #endregion 91 #region MAPRE 92 SimpleMeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator(); 93 trainingMapreEvaluator.Name = "TrainingMapreEvaluator"; 94 trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.TrainingMeanAbsolutePercentageOfRangeError.ToString(); 95 trainingMapreEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues"; 96 SimpleMeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator(); 97 validationMapreEvaluator.Name = "ValidationMapreEvaluator"; 98 validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.ValidationMeanAbsolutePercentageOfRangeError.ToString(); 99 validationMapreEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues"; 100 SimpleMeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new SimpleMeanAbsolutePercentageOfRangeErrorEvaluator(); 101 testMapreEvaluator.Name = "TestMapreEvaluator"; 102 testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = ModelingResult.TestMeanAbsolutePercentageOfRangeError.ToString(); 103 testMapreEvaluator.GetVariableInfo("Values").ActualName = "TestValues"; 104 #endregion MAPRE 105 #region R2 106 SimpleR2Evaluator trainingR2Evaluator = new SimpleR2Evaluator(); 107 trainingR2Evaluator.Name = "TrainingR2Evaluator"; 108 trainingR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.TrainingCoefficientOfDetermination.ToString(); 109 trainingR2Evaluator.GetVariableInfo("Values").ActualName = "TrainingValues"; 110 SimpleR2Evaluator validationR2Evaluator = new SimpleR2Evaluator(); 111 validationR2Evaluator.Name = "ValidationR2Evaluator"; 112 validationR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.ValidationCoefficientOfDetermination.ToString(); 113 validationR2Evaluator.GetVariableInfo("Values").ActualName = "ValidationValues"; 114 SimpleR2Evaluator testR2Evaluator = new SimpleR2Evaluator(); 115 testR2Evaluator.Name = "TestR2Evaluator"; 116 testR2Evaluator.GetVariableInfo("R2").ActualName = ModelingResult.TestCoefficientOfDetermination.ToString(); 117 testR2Evaluator.GetVariableInfo("Values").ActualName = "TestValues"; 118 #endregion 119 #region VAF 120 SimpleVarianceAccountedForEvaluator trainingVAFEvaluator = new SimpleVarianceAccountedForEvaluator(); 121 trainingVAFEvaluator.Name = "TrainingVAFEvaluator"; 122 trainingVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.TrainingVarianceAccountedFor.ToString(); 123 trainingVAFEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues"; 124 SimpleVarianceAccountedForEvaluator validationVAFEvaluator = new SimpleVarianceAccountedForEvaluator(); 125 validationVAFEvaluator.Name = "ValidationVAFEvaluator"; 126 validationVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.ValidationVarianceAccountedFor.ToString(); 127 validationVAFEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues"; 128 SimpleVarianceAccountedForEvaluator testVAFEvaluator = new SimpleVarianceAccountedForEvaluator(); 129 testVAFEvaluator.Name = "TestVAFEvaluator"; 130 testVAFEvaluator.GetVariableInfo("VAF").ActualName = ModelingResult.TestVarianceAccountedFor.ToString(); 131 testVAFEvaluator.GetVariableInfo("Values").ActualName = "TestValues"; 132 #endregion 133 134 seq.AddSubOperator(trainingMseEvaluator); 135 seq.AddSubOperator(validationMseEvaluator); 136 seq.AddSubOperator(testMseEvaluator); 137 seq.AddSubOperator(trainingNmseEvaluator); 138 seq.AddSubOperator(validationNmseEvaluator); 139 seq.AddSubOperator(testNmseEvaluator); 140 seq.AddSubOperator(trainingMapeEvaluator); 141 seq.AddSubOperator(validationMapeEvaluator); 142 seq.AddSubOperator(testMapeEvaluator); 143 seq.AddSubOperator(trainingMapreEvaluator); 144 seq.AddSubOperator(validationMapreEvaluator); 145 seq.AddSubOperator(testMapreEvaluator); 146 seq.AddSubOperator(trainingR2Evaluator); 147 seq.AddSubOperator(validationR2Evaluator); 148 seq.AddSubOperator(testR2Evaluator); 149 seq.AddSubOperator(trainingVAFEvaluator); 150 seq.AddSubOperator(validationVAFEvaluator); 151 seq.AddSubOperator(testVAFEvaluator); 152 153 #region variable impacts 154 VariableEvaluationImpactCalculator evaluationImpactCalculator = new VariableEvaluationImpactCalculator(); 155 evaluationImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart"; 156 evaluationImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd"; 157 VariableQualityImpactCalculator qualityImpactCalculator = new VariableQualityImpactCalculator(); 158 qualityImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart"; 159 qualityImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd"; 160 161 seq.AddSubOperator(evaluationImpactCalculator); 162 seq.AddSubOperator(qualityImpactCalculator); 163 #endregion 164 165 op.OperatorGraph.AddOperator(seq); 166 op.OperatorGraph.InitialOperator = seq; 167 return op; 46 return DefaultModelAnalyzerOperators.CreatePostProcessingOperator(ModelType.Regression); 168 47 } 169 48 170 49 public static IAnalyzerModel PopulateAnalyzerModel(IScope modelScope, IAnalyzerModel model) { 171 model.Predictor = modelScope.GetVariableValue<IPredictor>("Predictor", false); 172 Dataset ds = modelScope.GetVariableValue<Dataset>("Dataset", true); 173 model.Dataset = ds; 174 model.TargetVariable = ds.GetVariableName(modelScope.GetVariableValue<IntData>("TargetVariable", true).Data); 175 model.Type = ModelType.Regression; 176 model.TrainingSamplesStart = modelScope.GetVariableValue<IntData>("TrainingSamplesStart", true).Data; 177 model.TrainingSamplesEnd = modelScope.GetVariableValue<IntData>("TrainingSamplesEnd", true).Data; 178 model.ValidationSamplesStart = modelScope.GetVariableValue<IntData>("ValidationSamplesStart", true).Data; 179 model.ValidationSamplesEnd = modelScope.GetVariableValue<IntData>("ValidationSamplesEnd", true).Data; 180 model.TestSamplesStart = modelScope.GetVariableValue<IntData>("TestSamplesStart", true).Data; 181 model.TestSamplesEnd = modelScope.GetVariableValue<IntData>("TestSamplesEnd", true).Data; 182 183 model.ExtractResult(modelScope, ModelingResult.TrainingMeanSquaredError); 184 model.ExtractResult(modelScope, ModelingResult.ValidationMeanSquaredError); 185 model.ExtractResult(modelScope, ModelingResult.TestMeanSquaredError); 186 model.ExtractResult(modelScope, ModelingResult.TrainingNormalizedMeanSquaredError); 187 model.ExtractResult(modelScope, ModelingResult.ValidationNormalizedMeanSquaredError); 188 model.ExtractResult(modelScope, ModelingResult.TestNormalizedMeanSquaredError); 189 model.ExtractResult(modelScope, ModelingResult.TrainingMeanAbsolutePercentageError); 190 model.ExtractResult(modelScope, ModelingResult.ValidationMeanAbsolutePercentageError); 191 model.ExtractResult(modelScope, ModelingResult.TestMeanAbsolutePercentageError); 192 model.ExtractResult(modelScope, ModelingResult.TrainingMeanAbsolutePercentageOfRangeError); 193 model.ExtractResult(modelScope, ModelingResult.ValidationMeanAbsolutePercentageOfRangeError); 194 model.ExtractResult(modelScope, ModelingResult.TestMeanAbsolutePercentageOfRangeError); 195 model.ExtractResult(modelScope, ModelingResult.TrainingCoefficientOfDetermination); 196 model.ExtractResult(modelScope, ModelingResult.ValidationCoefficientOfDetermination); 197 model.ExtractResult(modelScope, ModelingResult.TestCoefficientOfDetermination); 198 model.ExtractResult(modelScope, ModelingResult.TrainingVarianceAccountedFor); 199 model.ExtractResult(modelScope, ModelingResult.ValidationVarianceAccountedFor); 200 model.ExtractResult(modelScope, ModelingResult.TestVarianceAccountedFor); 201 202 ItemList evaluationImpacts = modelScope.GetVariableValue<ItemList>(ModelingResult.VariableEvaluationImpact.ToString(), false); 203 ItemList qualityImpacts = modelScope.GetVariableValue<ItemList>(ModelingResult.VariableQualityImpact.ToString(), false); 204 foreach (ItemList row in evaluationImpacts) { 205 string variableName = ((StringData)row[0]).Data; 206 double impact = ((DoubleData)row[1]).Data; 207 model.SetVariableResult(ModelingResult.VariableEvaluationImpact, variableName, impact); 208 model.AddInputVariable(variableName); 209 } 210 foreach (ItemList row in qualityImpacts) { 211 string variableName = ((StringData)row[0]).Data; 212 double impact = ((DoubleData)row[1]).Data; 213 model.SetVariableResult(ModelingResult.VariableQualityImpact, variableName, impact); 214 model.AddInputVariable(variableName); 215 } 216 217 return model; 50 return DefaultModelAnalyzerOperators.PopulateAnalyzerModel(modelScope, model, ModelType.Regression); 218 51 } 219 52 } -
trunk/sources/HeuristicLab.Modeling/3.2/DefaultTimeSeriesOperators.cs
r2379 r2388 39 39 40 40 public static IOperator CreatePostProcessingOperator() { 41 CombinedOperator op = new CombinedOperator(); 42 op.Name = "Time series prognosis model analyzer"; 43 44 SequentialProcessor seq = new SequentialProcessor(); 45 seq.AddSubOperator(DefaultRegressionOperators.CreatePostProcessingOperator()); 46 47 #region theil inequality 48 SimpleTheilInequalityCoefficientEvaluator trainingTheil = new SimpleTheilInequalityCoefficientEvaluator(); 49 trainingTheil.Name = "TrainingTheilInequalityEvaluator"; 50 trainingTheil.GetVariableInfo("Values").ActualName = "TrainingValues"; 51 trainingTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = ModelingResult.TrainingTheilInequality.ToString(); 52 SimpleTheilInequalityCoefficientEvaluator validationTheil = new SimpleTheilInequalityCoefficientEvaluator(); 53 validationTheil.Name = "ValidationTheilInequalityEvaluator"; 54 validationTheil.GetVariableInfo("Values").ActualName = "ValidationValues"; 55 validationTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = ModelingResult.ValidationTheilInequality.ToString(); 56 SimpleTheilInequalityCoefficientEvaluator testTheil = new SimpleTheilInequalityCoefficientEvaluator(); 57 testTheil.Name = "TestTheilInequalityEvaluator"; 58 testTheil.GetVariableInfo("Values").ActualName = "TestValues"; 59 testTheil.GetVariableInfo("TheilInequalityCoefficient").ActualName = ModelingResult.TestTheilInequality.ToString(); 60 61 seq.AddSubOperator(trainingTheil); 62 seq.AddSubOperator(validationTheil); 63 seq.AddSubOperator(testTheil); 64 #endregion 65 66 #region directional symmetry 67 SimpleDirectionalSymmetryEvaluator trainingDS = new SimpleDirectionalSymmetryEvaluator(); 68 trainingDS.Name = "TrainingDirectionalSymmetryEvaluator"; 69 trainingDS.GetVariableInfo("Values").ActualName = "TrainingValues"; 70 trainingDS.GetVariableInfo("DirectionalSymmetry").ActualName = ModelingResult.TrainingDirectionalSymmetry.ToString(); 71 SimpleDirectionalSymmetryEvaluator validationDS = new SimpleDirectionalSymmetryEvaluator(); 72 validationDS.Name = "ValidationDirectionalSymmetryEvaluator"; 73 validationDS.GetVariableInfo("Values").ActualName = "ValidationValues"; 74 validationDS.GetVariableInfo("DirectionalSymmetry").ActualName = ModelingResult.ValidationDirectionalSymmetry.ToString(); 75 SimpleDirectionalSymmetryEvaluator testDS = new SimpleDirectionalSymmetryEvaluator(); 76 testDS.Name = "TestDirectionalSymmetryEvaluator"; 77 testDS.GetVariableInfo("Values").ActualName = "TestValues"; 78 testDS.GetVariableInfo("DirectionalSymmetry").ActualName = ModelingResult.TestDirectionalSymmetry.ToString(); 79 80 seq.AddSubOperator(trainingDS); 81 seq.AddSubOperator(validationDS); 82 seq.AddSubOperator(testDS); 83 #endregion 84 85 #region weighted directional symmetry 86 SimpleWeightedDirectionalSymmetryEvaluator trainingWDS = new SimpleWeightedDirectionalSymmetryEvaluator(); 87 trainingWDS.Name = "TrainingWeightedDirectionalSymmetryEvaluator"; 88 trainingWDS.GetVariableInfo("Values").ActualName = "TrainingValues"; 89 trainingWDS.GetVariableInfo("WeightedDirectionalSymmetry").ActualName = ModelingResult.TrainingWeightedDirectionalSymmetry.ToString(); 90 SimpleWeightedDirectionalSymmetryEvaluator validationWDS = new SimpleWeightedDirectionalSymmetryEvaluator(); 91 validationWDS.Name = "ValidationWeightedDirectionalSymmetryEvaluator"; 92 validationWDS.GetVariableInfo("Values").ActualName = "ValidationValues"; 93 validationWDS.GetVariableInfo("WeightedDirectionalSymmetry").ActualName = ModelingResult.ValidationWeightedDirectionalSymmetry.ToString(); 94 SimpleWeightedDirectionalSymmetryEvaluator testWDS = new SimpleWeightedDirectionalSymmetryEvaluator(); 95 testWDS.Name = "TestWeightedDirectionalSymmetryEvaluator"; 96 testWDS.GetVariableInfo("Values").ActualName = "TestValues"; 97 testWDS.GetVariableInfo("WeightedDirectionalSymmetry").ActualName = ModelingResult.TestWeightedDirectionalSymmetry.ToString(); 98 99 seq.AddSubOperator(trainingWDS); 100 seq.AddSubOperator(validationWDS); 101 seq.AddSubOperator(testWDS); 102 #endregion 103 104 op.OperatorGraph.AddOperator(seq); 105 op.OperatorGraph.InitialOperator = seq; 106 return op; 41 return DefaultModelAnalyzerOperators.CreatePostProcessingOperator(ModelType.TimeSeriesPrognosis); 107 42 } 108 43 109 44 public static IAnalyzerModel PopulateAnalyzerModel(IScope modelScope, IAnalyzerModel model) { 110 DefaultRegressionOperators.PopulateAnalyzerModel(modelScope, model); 111 model.ExtractResult(modelScope, ModelingResult.TrainingTheilInequality); 112 model.ExtractResult(modelScope, ModelingResult.ValidationTheilInequality); 113 model.ExtractResult(modelScope, ModelingResult.TestTheilInequality); 114 model.ExtractResult(modelScope, ModelingResult.TrainingDirectionalSymmetry); 115 model.ExtractResult(modelScope, ModelingResult.ValidationDirectionalSymmetry); 116 model.ExtractResult(modelScope, ModelingResult.TestDirectionalSymmetry); 117 model.ExtractResult(modelScope, ModelingResult.TrainingWeightedDirectionalSymmetry); 118 model.ExtractResult(modelScope, ModelingResult.ValidationWeightedDirectionalSymmetry); 119 model.ExtractResult(modelScope, ModelingResult.TestWeightedDirectionalSymmetry); 120 model.Type = ModelType.TimeSeriesPrognosis; 121 return model; 45 return DefaultModelAnalyzerOperators.PopulateAnalyzerModel(modelScope, model, ModelType.TimeSeriesPrognosis); 122 46 } 123 47 } -
trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj
r2383 r2388 84 84 <Compile Include="AnalyzerModel.cs" /> 85 85 <Compile Include="BestSolutionStorer.cs" /> 86 <Compile Include="DefaultModelAnalyzerOperators.cs" /> 86 87 <Compile Include="Matrix.cs" /> 87 88 <Compile Include="ModelingResultCalculators.cs" /> -
trunk/sources/HeuristicLab.Modeling/3.2/ModelingResultCalculators.cs
r2387 r2388 24 24 using System.Linq; 25 25 using System.Text; 26 using HeuristicLab.Core; 26 27 27 28 namespace HeuristicLab.Modeling { 28 29 public abstract class ModelingResultCalculators { 30 private enum DatasetPart { Training, Validation, Test }; 31 29 32 private static readonly Dictionary<ModelingResult, Func<double[,], double>> ClassificationModelingResults; 30 33 private static readonly Dictionary<ModelingResult, Func<double[,], double>> RegressionModelingResults; 31 34 private static readonly Dictionary<ModelingResult, Func<double[,], double>> TimeSeriesPrognosisModelingResults; 35 private static readonly Dictionary<ModelingResult, IOperator> ClassificationModelingResultEvaluators; 36 private static readonly Dictionary<ModelingResult, IOperator> RegressionModelingResultEvaluators; 37 private static readonly Dictionary<ModelingResult, IOperator> TimeSeriesPrognosisModelingResultEvaluators; 38 39 private static readonly Dictionary<Type, IEnumerable<ModelingResult>> regressionResults = 40 new Dictionary<Type, IEnumerable<ModelingResult>>() { 41 { typeof(SimpleMSEEvaluator), 42 new ModelingResult[] { 43 ModelingResult.TrainingMeanSquaredError, 44 ModelingResult.ValidationMeanSquaredError, 45 ModelingResult.TestMeanSquaredError 46 }}, 47 { typeof(SimpleNMSEEvaluator), 48 new ModelingResult[] { 49 ModelingResult.TrainingNormalizedMeanSquaredError, 50 ModelingResult.ValidationNormalizedMeanSquaredError, 51 ModelingResult.TestNormalizedMeanSquaredError 52 } 53 }, 54 { typeof(SimpleR2Evaluator), 55 new ModelingResult[] { 56 ModelingResult.TrainingCoefficientOfDetermination, 57 ModelingResult.ValidationCoefficientOfDetermination, 58 ModelingResult.TestCoefficientOfDetermination 59 } 60 }, 61 { typeof(SimpleVarianceAccountedForEvaluator), 62 new ModelingResult[] { 63 ModelingResult.TrainingVarianceAccountedFor, 64 ModelingResult.ValidationVarianceAccountedFor, 65 ModelingResult.TestVarianceAccountedFor 66 } 67 }, 68 { typeof(SimpleMeanAbsolutePercentageErrorEvaluator), 69 new ModelingResult[] { 70 ModelingResult.TrainingMeanAbsolutePercentageError, 71 ModelingResult.ValidationMeanAbsolutePercentageError, 72 ModelingResult.TestMeanAbsolutePercentageError 73 } 74 }, 75 { typeof(SimpleMeanAbsolutePercentageOfRangeErrorEvaluator), 76 new ModelingResult[] { 77 ModelingResult.TrainingMeanAbsolutePercentageOfRangeError, 78 ModelingResult.ValidationMeanAbsolutePercentageOfRangeError, 79 ModelingResult.TestMeanAbsolutePercentageOfRangeError 80 } 81 } 82 }; 83 84 private static readonly Dictionary<Type, IEnumerable<ModelingResult>> timeSeriesResults = 85 new Dictionary<Type, IEnumerable<ModelingResult>>() { 86 { typeof(SimpleTheilInequalityCoefficientEvaluator), 87 new ModelingResult[] { 88 ModelingResult.TrainingTheilInequality, 89 ModelingResult.ValidationTheilInequality, 90 ModelingResult.TestTheilInequality 91 } 92 }, 93 { typeof(SimpleDirectionalSymmetryEvaluator), 94 new ModelingResult[] { 95 ModelingResult.TrainingDirectionalSymmetry, 96 ModelingResult.ValidationDirectionalSymmetry, 97 ModelingResult.TestDirectionalSymmetry 98 } 99 }, 100 { typeof(SimpleWeightedDirectionalSymmetryEvaluator), 101 new ModelingResult[] { 102 ModelingResult.TrainingWeightedDirectionalSymmetry, 103 ModelingResult.ValidationWeightedDirectionalSymmetry, 104 ModelingResult.TestWeightedDirectionalSymmetry 105 } 106 } 107 }; 108 109 private static readonly Dictionary<Type, IEnumerable<ModelingResult>> classificationResults = 110 new Dictionary<Type, IEnumerable<ModelingResult>>() { 111 { typeof(SimpleAccuracyEvaluator), 112 new ModelingResult[] { 113 ModelingResult.TrainingAccuracy, 114 ModelingResult.ValidationAccuracy, 115 ModelingResult.TestAccuracy 116 } 117 } 118 }; 119 32 120 33 121 static ModelingResultCalculators() { 34 122 RegressionModelingResults = new Dictionary<ModelingResult, Func<double[,], double>>(); 123 ClassificationModelingResults = new Dictionary<ModelingResult, Func<double[,], double>>(); 124 TimeSeriesPrognosisModelingResults = new Dictionary<ModelingResult, Func<double[,], double>>(); 35 125 36 126 //Mean squared errors … … 83 173 TimeSeriesPrognosisModelingResults[ModelingResult.ValidationWeightedDirectionalSymmetry] = SimpleWeightedDirectionalSymmetryEvaluator.Calculate; 84 174 TimeSeriesPrognosisModelingResults[ModelingResult.TestWeightedDirectionalSymmetry] = SimpleWeightedDirectionalSymmetryEvaluator.Calculate; 175 176 #region result evaluators 177 178 RegressionModelingResultEvaluators = new Dictionary<ModelingResult, IOperator>(); 179 foreach (Type evaluatorT in regressionResults.Keys) { 180 foreach (ModelingResult r in regressionResults[evaluatorT]) { 181 RegressionModelingResultEvaluators[r] = CreateEvaluator(evaluatorT, r); 182 } 183 } 184 185 timeSeriesResults = CombineDictionaries(regressionResults, timeSeriesResults); 186 TimeSeriesPrognosisModelingResultEvaluators = new Dictionary<ModelingResult, IOperator>(); 187 foreach (Type evaluatorT in timeSeriesResults.Keys) { 188 foreach (ModelingResult r in timeSeriesResults[evaluatorT]) { 189 TimeSeriesPrognosisModelingResultEvaluators[r] = CreateEvaluator(evaluatorT, r); 190 } 191 } 192 193 classificationResults = CombineDictionaries(regressionResults, classificationResults); 194 ClassificationModelingResultEvaluators = new Dictionary<ModelingResult, IOperator>(); 195 foreach (Type evaluatorT in classificationResults.Keys) { 196 foreach (ModelingResult r in classificationResults[evaluatorT]) { 197 ClassificationModelingResultEvaluators[r] = CreateEvaluator(evaluatorT, r); 198 } 199 } 200 201 #endregion 85 202 } 86 203 87 204 public static Dictionary<ModelingResult, Func<double[,], double>> GetModelingResult(ModelType modelType) { 88 IEnumerable<KeyValuePair<ModelingResult,Func<double[,],double>>> ret = new Dictionary<ModelingResult,Func<double[,],double>>();89 205 switch (modelType) { 90 206 case ModelType.Regression: 91 ret = ret.Union( RegressionModelingResults); 92 break; 207 return CombineDictionaries(RegressionModelingResults, new Dictionary<ModelingResult, Func<double[,], double>>()); 93 208 case ModelType.Classification: 94 ret = ret.Union(RegressionModelingResults); 95 ret = ret.Union(ClassificationModelingResults); 96 break; 209 return CombineDictionaries(RegressionModelingResults, ClassificationModelingResults); 97 210 case ModelType.TimeSeriesPrognosis: 98 ret = ret.Union(RegressionModelingResults); 99 ret = ret.Union(TimeSeriesPrognosisModelingResults); 100 break; 211 return CombineDictionaries(RegressionModelingResults, ClassificationModelingResults); 101 212 default: 102 throw new ArgumentException("Modeling result mapping for ModelType " + modelType + " not defined."); 103 } 104 return ret.ToDictionary<KeyValuePair<ModelingResult, Func<double[,], double>>, ModelingResult, Func<double[,], double>>(x => x.Key, x => x.Value); 213 throw new ArgumentException("Modeling result mapping for ModelType " + modelType + " not defined."); 214 } 105 215 } 106 216 … … 113 223 return TimeSeriesPrognosisModelingResults[modelingResult]; 114 224 else 115 throw new ArgumentException("Calculator for modeling reuslt " + modelingResult + " not defined."); 225 throw new ArgumentException("Calculator for modeling result " + modelingResult + " not defined."); 226 } 227 228 public static IOperator CreateModelingResultEvaluator(ModelingResult modelingResult) { 229 IOperator opTemplate = null; 230 if (RegressionModelingResultEvaluators.ContainsKey(modelingResult)) 231 opTemplate = RegressionModelingResultEvaluators[modelingResult]; 232 else if (ClassificationModelingResultEvaluators.ContainsKey(modelingResult)) 233 opTemplate = ClassificationModelingResultEvaluators[modelingResult]; 234 else if (TimeSeriesPrognosisModelingResultEvaluators.ContainsKey(modelingResult)) 235 opTemplate = TimeSeriesPrognosisModelingResultEvaluators[modelingResult]; 236 else 237 throw new ArgumentException("Evaluator for modeling result " + modelingResult + " not defined."); 238 return (IOperator)opTemplate.Clone(); 239 } 240 241 private static IOperator CreateEvaluator(Type evaluatorType, ModelingResult result) { 242 SimpleEvaluatorBase evaluator = (SimpleEvaluatorBase)Activator.CreateInstance(evaluatorType); 243 evaluator.GetVariableInfo("Values").ActualName = GetDatasetPart(result) + "Values"; 244 evaluator.GetVariableInfo(evaluator.OutputVariableName).ActualName = result.ToString(); 245 return evaluator; 246 } 247 248 private static DatasetPart GetDatasetPart(ModelingResult result) { 249 if (result.ToString().StartsWith("Training")) return DatasetPart.Training; 250 else if (result.ToString().StartsWith("Validation")) return DatasetPart.Validation; 251 else if (result.ToString().StartsWith("Test")) return DatasetPart.Test; 252 else throw new ArgumentException("Can't determine dataset part of modeling result " + result + "."); 253 } 254 255 private static Dictionary<T1, T2> CombineDictionaries<T1, T2>( 256 Dictionary<T1, T2> x, 257 Dictionary<T1, T2> y) { 258 Dictionary<T1, T2> result = new Dictionary<T1, T2>(x); 259 return x.Union(y).ToDictionary<KeyValuePair<T1, T2>, T1, T2>(p => p.Key, p => p.Value); 116 260 } 117 261 }
Note: See TracChangeset
for help on using the changeset viewer.