Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/06/17 14:31:05 (7 years ago)
Author:
gkronber
Message:

#2779: merged r14889,r14890,r14943,r15024,r15088,r15094 from trunk to stable

Location:
stable/HeuristicLab.Problems.DataAnalysis.Views/3.4
Files:
1 edited
2 copied

Legend:

Unmodified
Added
Removed
  • stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj

    r15137 r15161  
    271271    <Compile Include="Regression\RegressionSolutionResidualsLineChartView.Designer.cs">
    272272      <DependentUpon>RegressionSolutionResidualsLineChartView.cs</DependentUpon>
     273    </Compile>
     274    <Compile Include="Regression\RegressionSolutionResidualAnalysisView.cs">
     275      <SubType>UserControl</SubType>
     276    </Compile>
     277    <Compile Include="Regression\RegressionSolutionResidualAnalysisView.Designer.cs">
     278      <DependentUpon>RegressionSolutionResidualAnalysisView.cs</DependentUpon>
    273279    </Compile>
    274280    <Compile Include="Regression\RegressionSolutionVariableImpactsView.cs">
  • stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionResidualAnalysisView.cs

    r14890 r15161  
    2020#endregion
    2121using System;
     22using System.Collections.Generic;
    2223using System.Drawing;
    2324using System.Linq;
    24 using System.Runtime.Remoting.Contexts;
    25 using System.Threading.Tasks;
    2625using HeuristicLab.Data;
    2726using HeuristicLab.MainForm;
     
    3130  [View("Residual Analysis")]
    3231  [Content(typeof(IRegressionSolution))]
    33   public partial class RegressionSolutionResidualAnalysisView : DataAnalysisSolutionEvaluationView {
     32  public sealed partial class RegressionSolutionResidualAnalysisView : DataAnalysisSolutionEvaluationView {
     33
     34    // names should be relatively save to prevent collisions with variable names in the dataset
     35    private const string TargetLabel = "> Target";
     36    private const string PredictionLabel = "> Prediction";
     37    private const string ResidualLabel = "> Residual";
     38    private const string AbsResidualLabel = "> Residual (abs.)";
     39    private const string RelativeErrorLabel = "> Relative Error";
     40    private const string AbsRelativeErrorLabel = "> Relative Error (abs.)";
     41    private const string PartitionLabel = "> Partition";
    3442
    3543    public new IRegressionSolution Content {
    3644      get { return (IRegressionSolution)base.Content; }
    37       set {
    38         base.Content = value;
    39       }
     45      set { base.Content = value; }
    4046    }
    4147
    42     public RegressionSolutionResidualAnalysisView()
    43       : base() {
     48    public RegressionSolutionResidualAnalysisView() : base() {
    4449      InitializeComponent();
    4550    }
     
    5863    }
    5964
    60     protected virtual void Content_ProblemDataChanged(object sender, EventArgs e) {
     65    private void Content_ProblemDataChanged(object sender, EventArgs e) {
    6166      OnContentChanged();
    6267    }
    6368
    64     protected virtual void Content_ModelChanged(object sender, EventArgs e) {
     69    private void Content_ModelChanged(object sender, EventArgs e) {
    6570      OnContentChanged();
    6671    }
     
    8388      var ds = problemData.Dataset;
    8489      var runs = new RunCollection();
     90      // determine relevant variables (at least two different values)
     91      var doubleVars = ds.DoubleVariables.Where(vn => ds.GetDoubleValues(vn).Max() > ds.GetDoubleValues(vn).Min()).ToArray();
     92      var stringVars = ds.StringVariables.Where(vn => ds.GetStringValues(vn).Distinct().Skip(1).Any()).ToArray();
     93      var dateTimeVars = ds.DateTimeVariables.Where(vn => ds.GetDateTimeValues(vn).Distinct().Skip(1).Any()).ToArray();
     94
    8595      // produce training and test values separately as they might overlap (e.g. for ensembles)
    8696      var predictedValuesTrain = Content.EstimatedTrainingValues.ToArray();
    8797      int j = 0; // idx for predictedValues array
    88       var partitionId = "Partition";
    89       while (ds.VariableNames.Contains(partitionId)) partitionId += "_";
    9098      foreach (var i in problemData.TrainingIndices) {
    91         var run = CreateRunForIdx(i, problemData);
     99        var run = CreateRunForIdx(i, problemData, doubleVars, stringVars, dateTimeVars);
    92100        var targetValue = ds.GetDoubleValue(problemData.TargetVariable, i);
    93101        AddErrors(run, predictedValuesTrain[j++], targetValue);
    94         run.Results.Add(partitionId, new StringValue("Training"));
     102        run.Results.Add(PartitionLabel, new StringValue("Training"));
    95103        run.Color = Color.Gold;
    96104        runs.Add(run);
     
    99107      j = 0;
    100108      foreach (var i in problemData.TestIndices) {
    101         var run = CreateRunForIdx(i, problemData);
     109        var run = CreateRunForIdx(i, problemData, doubleVars, stringVars, dateTimeVars);
    102110        var targetValue = ds.GetDoubleValue(problemData.TargetVariable, i);
    103111        AddErrors(run, predictedValuesTest[j++], targetValue);
    104         run.Results.Add(partitionId, new StringValue("Test"));
     112        run.Results.Add(PartitionLabel, new StringValue("Test"));
    105113        run.Color = Color.Red;
    106114        runs.Add(run);
     
    119127      var residual = target - pred;
    120128      var relError = residual / target;
    121       var predId = "Prediction";
    122       while (run.Results.ContainsKey(predId)) predId += "_";
    123       var resId = "Residual";
    124       while (run.Results.ContainsKey(resId)) resId += "_";
    125       var relErrorId = "Rel. Error";
    126       while (run.Results.ContainsKey(relErrorId)) relErrorId+= "_";
    127       run.Results.Add(predId, new DoubleValue(pred));
    128       run.Results.Add(resId, new DoubleValue(residual));
    129       run.Results.Add(relErrorId, new DoubleValue(relError));
     129      run.Results.Add(TargetLabel, new DoubleValue(target));
     130      run.Results.Add(PredictionLabel, new DoubleValue(pred));
     131      run.Results.Add(ResidualLabel, new DoubleValue(residual));
     132      run.Results.Add(AbsResidualLabel, new DoubleValue(Math.Abs(residual)));
     133      run.Results.Add(RelativeErrorLabel, new DoubleValue(relError));
     134      run.Results.Add(AbsRelativeErrorLabel, new DoubleValue(Math.Abs(relError)));
    130135    }
    131136
    132     private IRun CreateRunForIdx(int i, IRegressionProblemData problemData) {
     137    private IRun CreateRunForIdx(int i, IRegressionProblemData problemData, IEnumerable<string> doubleVars, IEnumerable<string> stringVars, IEnumerable<string> dateTimeVars) {
    133138      var ds = problemData.Dataset;
    134139      var run = new Run();
    135       foreach (var variableName in ds.DoubleVariables) {
     140      foreach (var variableName in doubleVars) {
    136141        run.Results.Add(variableName, new DoubleValue(ds.GetDoubleValue(variableName, i)));
    137142      }
    138       foreach (var variableName in ds.StringVariables) {
     143      foreach (var variableName in stringVars) {
    139144        run.Results.Add(variableName, new StringValue(ds.GetStringValue(variableName, i)));
    140145      }
    141 
     146      foreach (var variableName in dateTimeVars) {
     147        run.Results.Add(variableName, new DateTimeValue(ds.GetDateTimeValue(variableName, i)));
     148      }
    142149      return run;
    143150    }
Note: See TracChangeset for help on using the changeset viewer.