Changeset 12568 for branches/HeuristicLab.VariableInteractionNetworks/HeuristicLab.VariableInteractionNetworks/3.3
- Timestamp:
- 07/01/15 21:06:50 (9 years ago)
- Location:
- branches/HeuristicLab.VariableInteractionNetworks/HeuristicLab.VariableInteractionNetworks/3.3
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.VariableInteractionNetworks/HeuristicLab.VariableInteractionNetworks/3.3/Plugin.cs.frame
r12462 r12568 47 47 [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")] 48 48 [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")] 49 [PluginDependency("HeuristicLab.Problems.Instances", "3. 4")]49 [PluginDependency("HeuristicLab.Problems.Instances", "3.3")] 50 50 [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")] 51 51 public class Plugin : PluginBase { -
branches/HeuristicLab.VariableInteractionNetworks/HeuristicLab.VariableInteractionNetworks/3.3/SymbolicDataAnalysisVariableImpactsAnalyzer.cs
r12460 r12568 11 11 using HeuristicLab.Problems.DataAnalysis.Symbolic; 12 12 using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression; 13 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 13 14 14 15 namespace HeuristicLab.VariableInteractionNetworks … … 33 34 private const string LastGenerationsParameterName = "LastGenerations"; 34 35 private const string MaximumGenerationsParameterName = "MaximumGenerations"; 35 private const string OptimizedConstantsParameterName = "OptimizedConstants"; 36 37 private readonly SymbolicDataAnalysisExpressionTreeSimplifier simplifier; 38 private readonly SymbolicRegressionSolutionImpactValuesCalculator impactsCalculator; 36 private const string OptimizeConstantsParameterName = "OptimizeConstants"; 37 private const string PruneTreesParameterName = "PruneTrees"; 38 39 private SymbolicDataAnalysisExpressionTreeSimplifier simplifier; 40 private SymbolicRegressionSolutionImpactValuesCalculator impactsCalculator; 39 41 40 42 #region parameters … … 87 89 get { return (IFixedValueParameter<IntValue>)Parameters[LastGenerationsParameterName]; } 88 90 } 89 public IFixedValueParameter<BoolValue> OptimizedParameter 90 { 91 get { return (IFixedValueParameter<BoolValue>)Parameters[OptimizedConstantsParameterName]; } 91 public IFixedValueParameter<BoolValue> OptimizeConstantsParameter 92 { 93 get { return (IFixedValueParameter<BoolValue>)Parameters[OptimizeConstantsParameterName]; } 94 } 95 public IFixedValueParameter<BoolValue> PruneTreesParameter 96 { 97 get { return (IFixedValueParameter<BoolValue>)Parameters[PruneTreesParameterName]; } 92 98 } 93 99 private ILookupParameter<IntValue> MaximumGenerationsParameter … … 119 125 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName)); 120 126 Parameters.Add(new LookupParameter<DoubleLimit>(EstimationLimitsParameterName)); 121 Parameters.Add(new FixedValueParameter<IntValue>(MaxCOIterationsParameterName)); 127 Parameters.Add(new FixedValueParameter<IntValue>(MaxCOIterationsParameterName)); 122 128 Parameters.Add(new LookupParameter<DataTable>(VariableImpactsParameterName, "The relative variable relevance calculated as the average relative variable frequency over the whole run.")); 123 129 Parameters.Add(new FixedValueParameter<PercentValue>(PercentageBestParameterName)); 124 130 Parameters.Add(new FixedValueParameter<IntValue>(LastGenerationsParameterName)); 125 Parameters.Add(new FixedValueParameter<BoolValue>(OptimizedConstantsParameterName)); 131 Parameters.Add(new FixedValueParameter<BoolValue>(OptimizeConstantsParameterName, new BoolValue(false))); 132 Parameters.Add(new FixedValueParameter<BoolValue>(PruneTreesParameterName, new BoolValue(false))); 126 133 Parameters.Add(new LookupParameter<IntValue>(MaximumGenerationsParameterName, "The maximum number of generations which should be processed.")); 127 134 135 impactsCalculator = new SymbolicRegressionSolutionImpactValuesCalculator(); 128 136 simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier(); 129 impactsCalculator = new SymbolicRegressionSolutionImpactValuesCalculator();130 137 } 131 138 … … 133 140 protected SymbolicRegressionVariableImpactsAnalyzer(bool deserializing) : base(deserializing) { } 134 141 142 [StorableHook(HookType.AfterDeserialization)] 143 private void AfterDeserialization() 144 { 145 impactsCalculator = new SymbolicRegressionSolutionImpactValuesCalculator(); 146 simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier(); 147 } 148 135 149 protected SymbolicRegressionVariableImpactsAnalyzer(SymbolicRegressionVariableImpactsAnalyzer original, Cloner cloner) 136 150 : base(original, cloner) 137 151 { 152 impactsCalculator = new SymbolicRegressionSolutionImpactValuesCalculator(); 153 simplifier = new SymbolicDataAnalysisExpressionTreeSimplifier(); 138 154 } 139 155 … … 158 174 int lastGen = LastGenerationsParameter.Value.Value; 159 175 160 if (lastGen > maxGen) 161 lastGen = maxGen; 162 if (maxGen - gen < lastGen) 176 if (gen < maxGen - lastGen) 163 177 return base.Apply(); 164 178 … … 176 190 var estimationLimits = EstimationLimitsParameter.ActualValue; // lookup parameter => ActualValue 177 191 var percentageBest = PercentageBestParameter.Value.Value; 178 var optimizedConstants = OptimizedParameter.Value.Value; 192 var optimizeConstants = OptimizeConstantsParameter.Value.Value; 193 var pruneTrees = PruneTreesParameter.Value.Value; 179 194 180 195 var allowedInputVariables = problemData.AllowedInputVariables.ToList(); … … 188 203 VariableImpactsParameter.ActualValue = datatable; 189 204 results.Add(new Result("Average variable impacts", "The relative variable relevance calculated as the average relative variable frequency over the whole run.", new DataTable())); 190 205 191 206 foreach (var v in allowedInputVariables) 192 207 { … … 197 212 datatable = VariableImpactsParameter.ActualValue; 198 213 int nTrees = (int)Math.Round(trees.Length * percentageBest); 199 200 // simplify trees 201 var simplifiedTrees = trees.Take(nTrees).Select(x => simplifier.Simplify(x)); 214 var bestTrees = trees.Take(nTrees).Select(x => (ISymbolicExpressionTree)x.Clone()).ToList(); 215 216 if (optimizeConstants) 217 { 218 foreach (var tree in bestTrees) 219 SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, tree, problemData, problemData.TrainingIndices, applyLinearScaling, maxCOIterations, estimationLimits.Upper, estimationLimits.Lower); 220 } 221 var simplifiedTrees = bestTrees.Select(x => simplifier.Simplify(x)).ToList(); 202 222 var variableCounts = problemData.AllowedInputVariables.ToDictionary(x => x, x => simplifiedTrees.Count(t => t.IterateNodesPrefix().Any(n => n is VariableTreeNode && ((VariableTreeNode)n).VariableName == x))); 203 for each (var simplifiedTree in simplifiedTrees)204 { 205 if (optimizedConstants == true)206 { 207 SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, simplifiedTree, problemData, problemData.TrainingIndices, applyLinearScaling, maxCOIterations, estimationLimits.Upper, estimationLimits.Lower);208 }223 for (int i = 0; i < simplifiedTrees.Count; ++i) 224 { 225 var simplifiedTree = simplifiedTrees[i]; 226 227 if (pruneTrees) 228 simplifiedTree = SymbolicRegressionPruningOperator.Prune(simplifiedTree, impactsCalculator, interpreter, problemData, estimationLimits, problemData.TrainingIndices); 209 229 210 230 var quality = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(interpreter, simplifiedTree, estimationLimits.Lower, estimationLimits.Upper, problemData, problemData.TrainingIndices, applyLinearScaling); … … 216 236 { 217 237 var avgImpact = g.Average(x => impactsCalculator.CalculateImpactValue(model, x, problemData, problemData.TrainingIndices, quality)); 238 if (double.IsNaN(avgImpact)) 239 avgImpact = 0; 218 240 variableImpacts[g.Key] += avgImpact; 219 241 } … … 222 244 foreach (var pair in variableImpacts) 223 245 { 224 datatable.Rows[pair.Key].Values.Add(pair.Value / variableCounts[pair.Key]); 246 var v = variableCounts[pair.Key] > 0 ? pair.Value / variableCounts[pair.Key] : 0; 247 datatable.Rows[pair.Key].Values.Add(v); 225 248 } 226 249 results["Average variable impacts"].Value = datatable;
Note: See TracChangeset
for help on using the changeset viewer.