Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/08/19 12:06:01 (5 years ago)
Author:
pfleck
Message:

#2972 Updated UI for PDP variable values selection.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionPartialDependencePlotView.cs

    r16445 r16516  
    120120        Content.ProblemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).ToList();
    121121
    122 
     122      // ToDo: set default values with the variableValuesMode
    123123      var doubleVariables = allowedInputVariables.Where(problemData.Dataset.VariableHasType<double>);
    124       var doubleVariableValues = (IEnumerable<IList>)doubleVariables.Select(x => new List<double> { problemData.Dataset.GetDoubleValues(x, problemData.TrainingIndices).Median() });
     124      var doubleVariableValues = (IEnumerable<IList>)doubleVariables.Select(x => new List<double> {
     125        problemData.Dataset.GetDoubleValues(x, problemData.TrainingIndices).Median()
     126      });
    125127
    126128      var factorVariables = allowedInputVariables.Where(problemData.Dataset.VariableHasType<string>);
    127129      var factorVariableValues = (IEnumerable<IList>)factorVariables.Select(x => new List<string> {
    128         problemData.Dataset.GetStringValues(x, problemData.TrainingIndices)
    129         .GroupBy(val => val).OrderByDescending(g => g.Count()).First().Key // most frequent value
     130        MostCommon(problemData.Dataset.GetStringValues(x, problemData.TrainingIndices))
    130131      });
    131132
    132       if (sharedFixedVariables != null)
     133      if (sharedFixedVariables != null) {
    133134        sharedFixedVariables.ItemChanged -= SharedFixedVariables_ItemChanged;
     135        sharedFixedVariables.Reset -= SharedFixedVariables_Reset;
     136      }
    134137
    135138      sharedFixedVariables = new ModifiableDataset(doubleVariables.Concat(factorVariables), doubleVariableValues.Concat(factorVariableValues));
     
    230233
    231234      sharedFixedVariables.ItemChanged += SharedFixedVariables_ItemChanged;
     235      sharedFixedVariables.Reset += SharedFixedVariables_Reset;
    232236
    233237      rowNrNumericUpDown.Maximum = Content.ProblemData.Dataset.Rows - 1;
     
    237241
    238242    private void SharedFixedVariables_ItemChanged(object sender, EventArgs<int, int> e) {
     243      SharedFixedVariablesChanged();
     244    }
     245    private void SharedFixedVariables_Reset(object sender, EventArgs e) {
     246      SharedFixedVariablesChanged();
     247    }
     248    private void SharedFixedVariablesChanged() {
     249      if (!setVariableValues) // set mode to "nothing" if change was not initiated from a "mode change"
     250        variableValuesModeComboBox.SelectedIndex = -1;
     251
    239252      double yValue = Content.Model.GetEstimatedValues(sharedFixedVariables, new[] { 0 }).Single();
    240253      string title = Content.ProblemData.TargetVariable + ": " + yValue.ToString("G5", CultureInfo.CurrentCulture);
     
    245258      }
    246259    }
    247 
    248260
    249261    private void OnPartialDependencePlotPostPaint(object o, EventArgs e) {
     
    567579    }
    568580
     581    // flag that the current change is not triggered by a manual change from within a single plot
     582    private bool setVariableValues = false;
     583    private void variableValuesComboBox_SelectedValueChanged(object sender, EventArgs e) {
     584      if (variableValuesModeComboBox.SelectedIndex == -1)
     585        return; // changed to "manual" due to manual change of a variable
     586      setVariableValues = true;
     587      UpdateVariableValues();
     588      setVariableValues = false;
     589    }
    569590    private void rowNrNumericUpDown_ValueChanged(object sender, EventArgs e) {
    570       int rowNumber = (int)rowNrNumericUpDown.Value;
     591      if ((string)variableValuesModeComboBox.SelectedItem != "Row") {
     592        variableValuesModeComboBox.SelectedItem = "Row"; // triggers UpdateVariableValues
     593      } else {
     594        setVariableValues = true;
     595        UpdateVariableValues();
     596        setVariableValues = false;
     597      }
     598    }
     599    private void UpdateVariableValues() {
     600      string mode = (string)variableValuesModeComboBox.SelectedItem;
     601
    571602      var dataset = Content.ProblemData.Dataset;
    572 
    573       object[] newRow = sharedFixedVariables.VariableNames
    574         .Select<string, object>(variableName => {
    575           if (dataset.DoubleVariables.Contains(variableName)) {
    576             return dataset.GetDoubleValue(variableName, rowNumber);
    577           } else if (dataset.StringVariables.Contains(variableName)) {
    578             return dataset.GetStringValue(variableName, rowNumber);
    579           } else {
    580             throw new NotSupportedException("Only double and string(factor) columns are currently supported.");
    581           }
    582         }).ToArray();
     603      object[] newRow;
     604
     605      if (mode == "Row") {
     606        int rowNumber = (int)rowNrNumericUpDown.Value;
     607        newRow = sharedFixedVariables.VariableNames
     608          .Select<string, object>(variableName => {
     609            if (dataset.DoubleVariables.Contains(variableName)) {
     610              return dataset.GetDoubleValue(variableName, rowNumber);
     611            } else if (dataset.StringVariables.Contains(variableName)) {
     612              return dataset.GetStringValue(variableName, rowNumber);
     613            } else {
     614              throw new NotSupportedException("Only double and string(factor) columns are currently supported.");
     615            }
     616          }).ToArray();
     617      } else {
     618        //int si = densityComboBox.SelectedIndex;
     619        newRow = sharedFixedVariables.VariableNames
     620          .Select<string, object>(variableName => {
     621            if (dataset.DoubleVariables.Contains(variableName)) {
     622              var values = dataset.GetDoubleValues(variableName/*, GetDensityIndices(si)*/);
     623              return
     624                mode == "Mean" ? values.Average() :
     625                mode == "Median" ? values.Median() :
     626                mode == "Most Common" ? MostCommon(values) :
     627                throw new NotSupportedException();
     628            } else if (dataset.StringVariables.Contains(variableName)) {
     629              var values = dataset.GetStringValues(variableName/*, GetDensityIndices(si)*/);
     630              return
     631                mode == "Mean" ? MostCommon(values) :
     632                mode == "Median" ? MostCommon(values) :
     633                mode == "Most Common" ? MostCommon(values) :
     634                throw new NotSupportedException();
     635            } else {
     636              throw new NotSupportedException("Only double and string(factor) columns are currently supported.");
     637            }
     638          }).ToArray();
     639      }
    583640
    584641      sharedFixedVariables.ReplaceRow(0, newRow);
     642    }
     643
     644    private static T MostCommon<T>(IEnumerable<T> values) {
     645      return values.GroupBy(x => x).OrderByDescending(g => g.Count()).Select(g => g.Key).First();
    585646    }
    586647  }
Note: See TracChangeset for help on using the changeset viewer.