Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/07/10 10:03:21 (14 years ago)
Author:
mkommend
Message:

added draft version of classification (ticket #939)

Location:
branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3

    • Property svn:ignore
      •  

        old new  
        33obj
        44HeuristicLabProblemsDataAnalysisClassifcationPlugin.cs
         5HeuristicLabProblemsDataAnalysisClassificationPlugin.cs
  • branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/SingleObjectiveSymbolicClassificationEvaluator.cs

    r4323 r4366  
    6161    }
    6262
    63     public ILookupParameter<DataAnalysisProblemData> RegressionProblemDataParameter {
    64       get { return (ILookupParameter<DataAnalysisProblemData>)Parameters[RegressionProblemDataParameterName]; }
     63    public ILookupParameter<ClassificationProblemData> RegressionProblemDataParameter {
     64      get { return (ILookupParameter<ClassificationProblemData>)Parameters[RegressionProblemDataParameterName]; }
    6565    }
    6666
     
    9292      get { return SymbolicExpressionTreeParameter.ActualValue; }
    9393    }
    94     public DataAnalysisProblemData RegressionProblemData {
     94    public ClassificationProblemData RegressionProblemData {
    9595      get { return RegressionProblemDataParameter.ActualValue; }
    9696    }
     
    118118      Parameters.Add(new LookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic expression tree."));
    119119      Parameters.Add(new LookupParameter<SymbolicExpressionTree>(FunctionTreeParameterName, "The symbolic regression solution encoded as a symbolic expression tree."));
    120       Parameters.Add(new LookupParameter<DataAnalysisProblemData>(RegressionProblemDataParameterName, "The problem data on which the symbolic regression solution should be evaluated."));
     120      Parameters.Add(new LookupParameter<ClassificationProblemData>(RegressionProblemDataParameterName, "The problem data on which the symbolic regression solution should be evaluated."));
    121121      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesStartParameterName, "The start index of the dataset partition on which the symbolic regression solution should be evaluated."));
    122122      Parameters.Add(new ValueLookupParameter<IntValue>(SamplesEndParameterName, "The end index of the dataset partition on which the symbolic regression solution should be evaluated."));
     
    139139      int seed = Random.Next();
    140140      IEnumerable<int> rows = GenerateRowsToEvaluate(seed, RelativeNumberOfEvaluatedSamples.Value, SamplesStart.Value, SamplesEnd.Value);
     141
    141142      double quality = Evaluate(SymbolicExpressionTreeInterpreter, SymbolicExpressionTree, LowerEstimationLimit.Value, UpperEstimationLimit.Value,
    142         RegressionProblemData.Dataset,
    143         RegressionProblemData.TargetVariable.Value, rows);
     143        RegressionProblemData.Dataset, RegressionProblemData.TargetVariable.Value, RegressionProblemData.SortedClassValues, rows);
    144144      QualityParameter.ActualValue = new DoubleValue(quality);
    145145      return base.Apply();
     
    157157      Dataset dataset,
    158158      string targetVariable,
     159      IEnumerable<double> sortedClassValues,
    159160      IEnumerable<int> rows);
    160161  }
  • branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/SymbolicClassificationMeanSquaredErrorEvaluator.cs

    r4323 r4366  
    2222using System;
    2323using System.Collections.Generic;
     24using System.Linq;
     25using HeuristicLab.Common;
    2426using HeuristicLab.Core;
    2527using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     
    3739    }
    3840
    39     public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
    40       double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, rows);
     41    public override double Evaluate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<double> sortedClassValues, IEnumerable<int> rows) {
     42      double mse = Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, dataset, targetVariable, sortedClassValues, rows);
    4143      return mse;
    4244    }
    4345
    44     public static double Calculate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<int> rows) {
     46    public static double Calculate(ISymbolicExpressionTreeInterpreter interpreter, SymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, Dataset dataset, string targetVariable, IEnumerable<double> sortedClassValues, IEnumerable<int> rows) {
    4547      IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, dataset, rows);
    4648      IEnumerable<double> originalValues = dataset.GetEnumeratedVariableValues(targetVariable, rows);
     
    4951      OnlineMeanSquaredErrorEvaluator mseEvaluator = new OnlineMeanSquaredErrorEvaluator();
    5052
     53
     54      double firstClassValue = sortedClassValues.First();
     55      double lastClassValue = sortedClassValues.Last();
    5156      while (originalEnumerator.MoveNext() && estimatedEnumerator.MoveNext()) {
    5257        double estimated = estimatedEnumerator.Current;
     
    5459        if (double.IsNaN(estimated))
    5560          estimated = upperEstimationLimit;
     61        else if (estimated < original && original.IsAlmost(firstClassValue))
     62          estimated = original;
     63        else if (estimated > original && original.IsAlmost(lastClassValue))
     64          estimated = original;
    5665        else
    5766          estimated = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, estimated));
  • branches/HeuristicLab.Classification/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Symbolic/SymbolicClassificationProblem.cs

    r4323 r4366  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Linq;
    2425using HeuristicLab.Core;
     
    2829using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Creators;
    2930using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Interfaces;
     31using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
    3032using HeuristicLab.Parameters;
    3133using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3234using HeuristicLab.PluginInfrastructure;
    3335using HeuristicLab.Problems.DataAnalysis.Symbolic;
     36using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols;
    3437
    3538namespace HeuristicLab.Problems.DataAnalysis.Classification {
     
    5255      protected set { SymbolicExpressionTreeInterpreterParameter.Value = value; }
    5356    }
    54     public ValueParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
    55       get { return (ValueParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
     57    public IValueParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
     58      get { return (IValueParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
    5659    }
    5760
     
    6063      protected set { FunctionTreeGrammarParameter.Value = value; }
    6164    }
    62     public ValueParameter<ISymbolicExpressionGrammar> FunctionTreeGrammarParameter {
    63       get { return (ValueParameter<ISymbolicExpressionGrammar>)Parameters[FunctionTreeGrammarParameterName]; }
     65    public IValueParameter<ISymbolicExpressionGrammar> FunctionTreeGrammarParameter {
     66      get { return (IValueParameter<ISymbolicExpressionGrammar>)Parameters[FunctionTreeGrammarParameterName]; }
    6467    }
    6568
     
    6871      protected set { MaxExpressionLengthParameter.Value = value; }
    6972    }
    70     public ValueParameter<IntValue> MaxExpressionLengthParameter {
    71       get { return (ValueParameter<IntValue>)Parameters[MaxExpressionLengthParameterName]; }
     73    public IValueParameter<IntValue> MaxExpressionLengthParameter {
     74      get { return (IValueParameter<IntValue>)Parameters[MaxExpressionLengthParameterName]; }
    7275    }
    7376
     
    8487      protected set { UpperEstimationLimitParameter.Value = value; }
    8588    }
    86     public ValueParameter<DoubleValue> UpperEstimationLimitParameter {
    87       get { return (ValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }
     89    public IValueParameter<DoubleValue> UpperEstimationLimitParameter {
     90      get { return (IValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }
    8891    }
    8992
     
    9295      protected set { LowerEstimationLimitParameter.Value = value; }
    9396    }
    94     public ValueParameter<DoubleValue> LowerEstimationLimitParameter {
    95       get { return (ValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }
     97    public IValueParameter<DoubleValue> LowerEstimationLimitParameter {
     98      get { return (IValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }
    9699    }
    97100
     
    100103      protected set { MaxFunctionDefiningBranchesParameter.Value = value; }
    101104    }
    102     public ValueParameter<IntValue> MaxFunctionDefiningBranchesParameter {
    103       get { return (ValueParameter<IntValue>)Parameters[MaxFunctionDefiningBranchensParameterName]; }
     105    public IValueParameter<IntValue> MaxFunctionDefiningBranchesParameter {
     106      get { return (IValueParameter<IntValue>)Parameters[MaxFunctionDefiningBranchensParameterName]; }
    104107    }
    105108
     
    108111      protected set { MaxFunctionArgumentsParameter.Value = value; }
    109112    }
    110     public ValueParameter<IntValue> MaxFunctionArgumentsParameter {
    111       get { return (ValueParameter<IntValue>)Parameters[MaxFunctionArgumentsParameterName]; }
     113    public IValueParameter<IntValue> MaxFunctionArgumentsParameter {
     114      get { return (IValueParameter<IntValue>)Parameters[MaxFunctionArgumentsParameterName]; }
    112115    }
    113116
     
    225228      Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>().OfType<IOperator>());
    226229      Operators.Add(new MinAverageMaxSymbolicExpressionTreeSizeAnalyzer());
     230      Operators.Add(new ValidationBestSymbolicClassificationSolutionAnalyzer());
    227231    }
    228232
     
    249253
    250254    private void ParameterizeGrammar() {
     255      List<LaggedVariable> laggedSymbols = FunctionTreeGrammar.Symbols.OfType<LaggedVariable>().ToList();
     256      foreach (Symbol symbol in laggedSymbols)
     257        FunctionTreeGrammar.RemoveSymbol(symbol);
    251258      foreach (var varSymbol in FunctionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols.Variable>()) {
    252259        varSymbol.VariableNames = ClassificationProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value);
     
    287294
    288295    private void ParameterizeAnalyzers() {
    289 
     296      foreach (ISymbolicExpressionTreeAnalyzer analyzer in Operators.OfType<ISymbolicExpressionTreeAnalyzer>()) {
     297        analyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     298        var bestValidationSolutionAnalyzer = analyzer as ValidationBestSymbolicClassificationSolutionAnalyzer;
     299        if (bestValidationSolutionAnalyzer != null) {
     300          bestValidationSolutionAnalyzer.ClassificationProblemDataParameter.ActualName = ClassificationProblemDataParameter.Name;
     301          bestValidationSolutionAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
     302          bestValidationSolutionAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
     303          bestValidationSolutionAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
     304          bestValidationSolutionAnalyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     305          bestValidationSolutionAnalyzer.ValidationSamplesStartParameter.Value = ValidationSamplesStart;
     306          bestValidationSolutionAnalyzer.ValidationSamplesEndParameter.Value = ValidationSamplesEnd;
     307        }
     308      }
    290309    }
    291310    #endregion
Note: See TracChangeset for help on using the changeset viewer.