- Timestamp:
- 11/27/12 11:02:09 (12 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification
- Files:
-
- 3 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification
- Property svn:mergeinfo changed
/branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification merged: 8409,8915-8916,8935
- Property svn:mergeinfo changed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj
r8606 r8946 120 120 <Compile Include="ModelCreators\NormalDistributedThresholdsModelCreator.cs" /> 121 121 <Compile Include="MultiObjective\SymbolicClassificationMultiObjectiveValidationBestSolutionAnalyzer.cs" /> 122 <Compile Include="SymbolicClassificationSolutionImpactValuesCalculator.cs" /> 122 123 <Compile Include="SymbolicNearestNeighbourClassificationModel.cs" /> 123 124 <Compile Include="Plugin.cs" /> … … 258 259 --> 259 260 <PropertyGroup> 260 <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)261 <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir) 261 262 set ProjectDir=$(ProjectDir) 262 263 set SolutionDir=$(SolutionDir) … … 265 266 call PreBuildEvent.cmd 266 267 </PreBuildEvent> 267 <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">268 <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' "> 268 269 export ProjectDir=$(ProjectDir) 269 270 export SolutionDir=$(SolutionDir) -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/Properties
- Property svn:ignore
--- +++
- Property svn:ignore
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolutionImpactValuesCalculator.cs
r8942 r8946 20 20 #endregion 21 21 22 using System;23 22 using System.Collections.Generic; 24 using System.Linq;25 23 using HeuristicLab.Common; 26 24 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 27 25 28 26 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 29 public class Symbolic DiscriminantFunctionClassificationSolutionImpactValuesCalculator : SymbolicDataAnalysisSolutionImpactValuesCalculator {30 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateReplacementValues(ISymbolicExpressionTree tree,31 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter,32 IDataAnalysisProblemData problemData) {33 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix() 34 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateReplacementValue(node, tree, interpreter, problemData));27 public class SymbolicClassificationSolutionImpactValuesCalculator : SymbolicDataAnalysisSolutionImpactValuesCalculator { 28 public override double CalculateReplacementValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows) { 29 var classificationModel = (ISymbolicClassificationModel)model; 30 var classificationProblemData = (IClassificationProblemData)problemData; 31 32 return CalculateReplacementValue(node, classificationModel.SymbolicExpressionTree, classificationModel.Interpreter, classificationProblemData.Dataset, rows); 35 33 } 36 34 37 public override IEnumerable<Tuple<ISymbolicExpressionTreeNode, double>> CalculateImpactValues(ISymbolicExpressionTree tree, 38 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, 39 IDataAnalysisProblemData classificationProblemData, 40 double lowerEstimationLimit, double upperEstimationLimit) { 41 var problemData = (IClassificationProblemData)classificationProblemData; 42 var dataset = problemData.Dataset; 43 var rows = problemData.TrainingIndices; 44 string targetVariable = problemData.TargetVariable; 45 var targetClassValues = dataset.GetDoubleValues(targetVariable, rows); 46 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows).LimitToRange(lowerEstimationLimit, upperEstimationLimit).ToArray(); 35 public override double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double originalQuality = double.NaN) { 36 var classificationModel = (ISymbolicClassificationModel)model; 37 var classificationProblemData = (IClassificationProblemData)problemData; 38 39 var dataset = classificationProblemData.Dataset; 40 var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows); 41 47 42 OnlineCalculatorError errorState; 48 double originalGini = NormalizedGiniCalculator.Calculate(targetClassValues, originalOutput, out errorState); 49 if (errorState != OnlineCalculatorError.None) originalGini = 0.0; 43 if (double.IsNaN(originalQuality)) { 44 var originalClassValues = classificationModel.GetEstimatedClassValues(dataset, rows); 45 originalQuality = OnlineAccuracyCalculator.Calculate(targetClassValues, originalClassValues, out errorState); 46 if (errorState != OnlineCalculatorError.None) originalQuality = 0.0; 47 } 50 48 51 return from node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix() 52 select new Tuple<ISymbolicExpressionTreeNode, double>(node, CalculateImpact(tree, originalGini, node, interpreter, problemData, lowerEstimationLimit, upperEstimationLimit)); 49 var replacementValue = CalculateReplacementValue(classificationModel, node, classificationProblemData, rows); 50 var constantNode = new ConstantTreeNode(new Constant()) { Value = replacementValue }; 51 var cloner = new Cloner(); 52 cloner.RegisterClonedObject(node, constantNode); 53 var tempModel = cloner.Clone(classificationModel); 54 tempModel.RecalculateModelParameters(classificationProblemData, rows); 55 56 var estimatedClassValues = tempModel.GetEstimatedClassValues(dataset, rows); 57 double newQuality = OnlineAccuracyCalculator.Calculate(targetClassValues, estimatedClassValues, out errorState); 58 if (errorState != OnlineCalculatorError.None) newQuality = 0.0; 59 60 return originalQuality - newQuality; 53 61 } 54 62 55 private static double CalculateImpact(ISymbolicExpressionTree tree, double originalQuality, ISymbolicExpressionTreeNode node,56 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IClassificationProblemData problemData,57 double lowerEstimationLimit, double upperEstimationLimit) {58 var dataset = problemData.Dataset;59 var rows = problemData.TrainingIndices.ToList();60 string targetVariable = problemData.TargetVariable;61 var targetValues = dataset.GetDoubleValues(targetVariable, rows).ToList();62 63 var parent = node.Parent;64 var constantNode = (ConstantTreeNode)new Constant().CreateTreeNode();65 constantNode.Value = CalculateReplacementValue(node, tree, interpreter, problemData);66 SwitchNode(parent, node, constantNode);67 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows)68 .LimitToRange(lowerEstimationLimit, upperEstimationLimit)69 .ToArray();70 OnlineCalculatorError errorState;71 double quality = NormalizedGiniCalculator.Calculate(targetValues, newOutput, out errorState);72 if (errorState != OnlineCalculatorError.None) quality = 0.0;73 SwitchNode(parent, constantNode, node);74 // impact = 0 if no change75 // impact < 0 if new solution is better76 // impact > 0 if new solution is worse77 return originalQuality - quality;78 }79 63 } 80 64 }
Note: See TracChangeset
for help on using the changeset viewer.