Changeset 16516 for branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionPartialDependencePlotView.cs
- Timestamp:
- 01/08/19 12:06:01 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2972_PDPRowSelect/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionPartialDependencePlotView.cs
r16445 r16516 120 120 Content.ProblemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).ToList(); 121 121 122 122 // ToDo: set default values with the variableValuesMode 123 123 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 }); 125 127 126 128 var factorVariables = allowedInputVariables.Where(problemData.Dataset.VariableHasType<string>); 127 129 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)) 130 131 }); 131 132 132 if (sharedFixedVariables != null) 133 if (sharedFixedVariables != null) { 133 134 sharedFixedVariables.ItemChanged -= SharedFixedVariables_ItemChanged; 135 sharedFixedVariables.Reset -= SharedFixedVariables_Reset; 136 } 134 137 135 138 sharedFixedVariables = new ModifiableDataset(doubleVariables.Concat(factorVariables), doubleVariableValues.Concat(factorVariableValues)); … … 230 233 231 234 sharedFixedVariables.ItemChanged += SharedFixedVariables_ItemChanged; 235 sharedFixedVariables.Reset += SharedFixedVariables_Reset; 232 236 233 237 rowNrNumericUpDown.Maximum = Content.ProblemData.Dataset.Rows - 1; … … 237 241 238 242 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 239 252 double yValue = Content.Model.GetEstimatedValues(sharedFixedVariables, new[] { 0 }).Single(); 240 253 string title = Content.ProblemData.TargetVariable + ": " + yValue.ToString("G5", CultureInfo.CurrentCulture); … … 245 258 } 246 259 } 247 248 260 249 261 private void OnPartialDependencePlotPostPaint(object o, EventArgs e) { … … 567 579 } 568 580 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 } 569 590 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 571 602 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 } 583 640 584 641 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(); 585 646 } 586 647 }
Note: See TracChangeset
for help on using the changeset viewer.