Changeset 16432
- Timestamp:
- 12/21/18 14:05:32 (6 years ago)
- Location:
- stable
- Files:
-
- 5 edited
- 3 copied
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk merged: 15729,15753,16232 /trunk/sources merged: 15638,15667,15674
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Problems.DataAnalysis merged: 15638,15667,15674
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis.Views
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Views merged: 15729,15753,16232 /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views merged: 15638,15667,15674
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.Designer.cs
r15638 r16432 51 51 this.factorVarReplacementLabel = new System.Windows.Forms.Label(); 52 52 this.factorVarReplComboBox = new System.Windows.Forms.ComboBox(); 53 this.ascendingCheckBox = new System.Windows.Forms.CheckBox(); 54 this.sortByLabel = new System.Windows.Forms.Label(); 55 this.sortByComboBox = new System.Windows.Forms.ComboBox(); 56 this.backgroundWorker = new System.ComponentModel.BackgroundWorker(); 53 57 this.SuspendLayout(); 54 58 // … … 63 67 this.variableImactsArrayView.Name = "variableImactsArrayView"; 64 68 this.variableImactsArrayView.ReadOnly = true; 65 this.variableImactsArrayView.Size = new System.Drawing.Size( 363, 278);69 this.variableImactsArrayView.Size = new System.Drawing.Size(662, 278); 66 70 this.variableImactsArrayView.TabIndex = 2; 67 71 // 68 72 // dataPartitionComboBox 69 73 // 74 this.dataPartitionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 70 75 this.dataPartitionComboBox.FormattingEnabled = true; 71 76 this.dataPartitionComboBox.Items.AddRange(new object[] { … … 99 104 // replacementComboBox 100 105 // 106 this.replacementComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 101 107 this.replacementComboBox.FormattingEnabled = true; 102 108 this.replacementComboBox.Items.AddRange(new object[] { … … 122 128 // factorVarReplComboBox 123 129 // 130 this.factorVarReplComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 124 131 this.factorVarReplComboBox.FormattingEnabled = true; 125 132 this.factorVarReplComboBox.Items.AddRange(new object[] { … … 133 140 this.factorVarReplComboBox.SelectedIndexChanged += new System.EventHandler(this.replacementComboBox_SelectedIndexChanged); 134 141 // 142 // ascendingCheckBox 143 // 144 this.ascendingCheckBox.AutoSize = true; 145 this.ascendingCheckBox.Location = new System.Drawing.Point(534, 6); 146 this.ascendingCheckBox.Name = "ascendingCheckBox"; 147 this.ascendingCheckBox.Size = new System.Drawing.Size(76, 17); 148 this.ascendingCheckBox.TabIndex = 10; 149 this.ascendingCheckBox.Text = "Ascending"; 150 this.ascendingCheckBox.UseVisualStyleBackColor = true; 151 this.ascendingCheckBox.CheckedChanged += new System.EventHandler(this.ascendingCheckBox_CheckedChanged); 152 // 153 // sortByLabel 154 // 155 this.sortByLabel.AutoSize = true; 156 this.sortByLabel.Location = new System.Drawing.Point(324, 6); 157 this.sortByLabel.Name = "sortByLabel"; 158 this.sortByLabel.Size = new System.Drawing.Size(77, 13); 159 this.sortByLabel.TabIndex = 8; 160 this.sortByLabel.Text = "Sorting criteria:"; 161 // 162 // sortByComboBox 163 // 164 this.sortByComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 165 this.sortByComboBox.FormattingEnabled = true; 166 this.sortByComboBox.Location = new System.Drawing.Point(407, 3); 167 this.sortByComboBox.Name = "sortByComboBox"; 168 this.sortByComboBox.Size = new System.Drawing.Size(121, 21); 169 this.sortByComboBox.TabIndex = 9; 170 this.sortByComboBox.SelectedIndexChanged += new System.EventHandler(this.sortByComboBox_SelectedIndexChanged); 171 // 135 172 // ClassificationSolutionVariableImpactsView 136 173 // 137 174 this.AllowDrop = true; 138 175 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; 176 this.Controls.Add(this.ascendingCheckBox); 177 this.Controls.Add(this.sortByLabel); 178 this.Controls.Add(this.sortByComboBox); 139 179 this.Controls.Add(this.factorVarReplComboBox); 140 180 this.Controls.Add(this.factorVarReplacementLabel); … … 145 185 this.Controls.Add(this.variableImactsArrayView); 146 186 this.Name = "ClassificationSolutionVariableImpactsView"; 147 this.Size = new System.Drawing.Size(369, 365); 187 this.Size = new System.Drawing.Size(668, 365); 188 this.VisibleChanged += new System.EventHandler(this.ClassificationSolutionVariableImpactsView_VisibleChanged); 148 189 this.ResumeLayout(false); 149 190 this.PerformLayout(); … … 160 201 private System.Windows.Forms.Label factorVarReplacementLabel; 161 202 private System.Windows.Forms.ComboBox factorVarReplComboBox; 203 private System.Windows.Forms.CheckBox ascendingCheckBox; 204 private System.Windows.Forms.Label sortByLabel; 205 private System.Windows.Forms.ComboBox sortByComboBox; 206 private System.ComponentModel.BackgroundWorker backgroundWorker; 162 207 } 163 208 } -
stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionVariableImpactsView.cs
r15638 r16432 19 19 */ 20 20 #endregion 21 21 22 using System; 23 using System.Collections.Generic; 22 24 using System.Linq; 25 using System.Threading; 23 26 using System.Threading.Tasks; 27 using HeuristicLab.Common; 24 28 using HeuristicLab.Data; 25 29 using HeuristicLab.MainForm; … … 29 33 [Content(typeof(IClassificationSolution))] 30 34 public partial class ClassificationSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView { 31 35 #region Nested Types 36 private enum SortingCriteria { 37 ImpactValue, 38 Occurrence, 39 VariableName 40 } 41 #endregion 42 43 #region Fields 44 private Dictionary<string, double> rawVariableImpacts = new Dictionary<string, double>(); 45 private Thread thread; 46 #endregion 47 48 #region Getter/Setter 32 49 public new IClassificationSolution Content { 33 50 get { return (IClassificationSolution)base.Content; } … … 36 53 } 37 54 } 38 55 #endregion 56 57 #region Ctor 39 58 public ClassificationSolutionVariableImpactsView() 40 59 : base() { 41 60 InitializeComponent(); 61 62 this.sortByComboBox.Items.AddRange(Enum.GetValues(typeof(SortingCriteria)).Cast<object>().ToArray()); 63 this.sortByComboBox.SelectedItem = SortingCriteria.ImpactValue; 64 65 //Set the default values 42 66 this.dataPartitionComboBox.SelectedIndex = 0; 43 67 this.replacementComboBox.SelectedIndex = 0; 44 68 this.factorVarReplComboBox.SelectedIndex = 0; 45 69 } 46 47 #region events 70 #endregion 71 72 #region Events 48 73 protected override void RegisterContentEvents() { 49 74 base.RegisterContentEvents(); … … 71 96 variableImactsArrayView.Content = null; 72 97 } else { 73 UpdateVariableImpacts(); 74 } 75 } 76 77 private void UpdateVariableImpacts() { 78 if (Content == null || replacementComboBox.SelectedIndex < 0 79 || factorVarReplComboBox.SelectedIndex < 0 80 || dataPartitionComboBox.SelectedIndex < 0) return; 98 UpdateVariableImpact(); 99 } 100 } 101 102 private void ClassificationSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) { 103 if (thread == null) { return; } 104 105 if (thread.IsAlive) { thread.Abort(); } 106 thread = null; 107 } 108 109 110 private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) { 111 UpdateVariableImpact(); 112 } 113 114 private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) { 115 UpdateVariableImpact(); 116 } 117 118 private void sortByComboBox_SelectedIndexChanged(object sender, EventArgs e) { 119 //Update the default ordering (asc,desc), but remove the eventHandler beforehand (otherwise the data would be ordered twice) 120 ascendingCheckBox.CheckedChanged -= ascendingCheckBox_CheckedChanged; 121 switch ((SortingCriteria)sortByComboBox.SelectedItem) { 122 case SortingCriteria.ImpactValue: 123 ascendingCheckBox.Checked = false; 124 break; 125 case SortingCriteria.Occurrence: 126 ascendingCheckBox.Checked = true; 127 break; 128 case SortingCriteria.VariableName: 129 ascendingCheckBox.Checked = true; 130 break; 131 default: 132 throw new NotImplementedException("Ordering for selected SortingCriteria not implemented"); 133 } 134 ascendingCheckBox.CheckedChanged += ascendingCheckBox_CheckedChanged; 135 136 UpdateDataOrdering(); 137 } 138 139 private void ascendingCheckBox_CheckedChanged(object sender, EventArgs e) { 140 UpdateDataOrdering(); 141 } 142 143 #endregion 144 145 #region Helper Methods 146 private void UpdateVariableImpact() { 147 //Check if the selection is valid 148 if (Content == null) { return; } 149 if (replacementComboBox.SelectedIndex < 0) { return; } 150 if (dataPartitionComboBox.SelectedIndex < 0) { return; } 151 if (factorVarReplComboBox.SelectedIndex < 0) { return; } 152 153 //Prepare arguments 81 154 var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm; 155 var replMethod = (ClassificationSolutionVariableImpactsCalculator.ReplacementMethodEnum)replacementComboBox.Items[replacementComboBox.SelectedIndex]; 156 var factorReplMethod = (ClassificationSolutionVariableImpactsCalculator.FactorReplacementMethodEnum)factorVarReplComboBox.Items[factorVarReplComboBox.SelectedIndex]; 157 var dataPartition = (ClassificationSolutionVariableImpactsCalculator.DataPartitionEnum)dataPartitionComboBox.SelectedItem; 158 82 159 variableImactsArrayView.Caption = Content.Name + " Variable Impacts"; 83 var replMethod = 84 (ClassificationSolutionVariableImpactsCalculator.ReplacementMethodEnum) 85 replacementComboBox.Items[replacementComboBox.SelectedIndex]; 86 var factorReplMethod = 87 (ClassificationSolutionVariableImpactsCalculator.FactorReplacementMethodEnum) 88 factorVarReplComboBox.Items[factorVarReplComboBox.SelectedIndex]; 89 var dataPartition = 90 (ClassificationSolutionVariableImpactsCalculator.DataPartitionEnum)dataPartitionComboBox.SelectedItem; 160 161 mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name); 91 162 92 163 Task.Factory.StartNew(() => { 93 try { 94 mainForm.AddOperationProgressToView(this, "Calculating variable impacts for " + Content.Name); 95 96 var impacts = ClassificationSolutionVariableImpactsCalculator.CalculateImpacts(Content, dataPartition, replMethod, factorReplMethod); 97 var impactArray = new DoubleArray(impacts.Select(i => i.Item2).ToArray()); 98 impactArray.ElementNames = impacts.Select(i => i.Item1); 99 variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly(); 100 } finally { 101 mainForm.RemoveOperationProgressFromView(this); 102 } 103 }); 104 } 105 106 #endregion 107 108 private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) { 109 UpdateVariableImpacts(); 110 } 111 112 private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) { 113 UpdateVariableImpacts(); 114 } 164 thread = Thread.CurrentThread; 165 //Remember the original ordering of the variables 166 var impacts = ClassificationSolutionVariableImpactsCalculator.CalculateImpacts(Content, dataPartition, replMethod, factorReplMethod); 167 var problemData = Content.ProblemData; 168 var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction)); 169 var originalVariableOrdering = problemData.Dataset.VariableNames.Where(v => inputvariables.Contains(v)).Where(problemData.Dataset.VariableHasType<double>).ToList(); 170 171 rawVariableImpacts.Clear(); 172 originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(v, impacts.First(vv => vv.Item1 == v).Item2)); 173 }).ContinueWith((o) => { 174 UpdateDataOrdering(); 175 mainForm.RemoveOperationProgressFromView(this); 176 thread = null; 177 }, TaskScheduler.FromCurrentSynchronizationContext()); 178 } 179 180 /// <summary> 181 /// Updates the <see cref="variableImactsArrayView"/> according to the selected ordering <see cref="ascendingCheckBox"/> of the selected Column <see cref="sortByComboBox"/> 182 /// The default is "Descending" by "VariableImpact" (as in previous versions) 183 /// </summary> 184 private void UpdateDataOrdering() { 185 //Check if valid sortingCriteria is selected and data exists 186 if (sortByComboBox.SelectedIndex == -1) { return; } 187 if (rawVariableImpacts == null) { return; } 188 if (!rawVariableImpacts.Any()) { return; } 189 190 var selectedItem = (SortingCriteria)sortByComboBox.SelectedItem; 191 bool ascending = ascendingCheckBox.Checked; 192 193 IEnumerable<KeyValuePair<string, double>> orderedEntries = null; 194 195 //Sort accordingly 196 switch (selectedItem) { 197 case SortingCriteria.ImpactValue: 198 orderedEntries = rawVariableImpacts.OrderBy(v => v.Value); 199 break; 200 case SortingCriteria.Occurrence: 201 orderedEntries = rawVariableImpacts; 202 break; 203 case SortingCriteria.VariableName: 204 orderedEntries = rawVariableImpacts.OrderBy(v => v.Key, new NaturalStringComparer()); 205 break; 206 default: 207 throw new NotImplementedException("Ordering for selected SortingCriteria not implemented"); 208 } 209 210 if (!ascending) { orderedEntries = orderedEntries.Reverse(); } 211 212 //Write the data back 213 var impactArray = new DoubleArray(orderedEntries.Select(i => i.Value).ToArray()) { 214 ElementNames = orderedEntries.Select(i => i.Key) 215 }; 216 217 //Could be, if the View was closed 218 if (!variableImactsArrayView.IsDisposed) { 219 variableImactsArrayView.Content = (DoubleArray)impactArray.AsReadOnly(); 220 } 221 } 222 #endregion 115 223 } 116 224 } -
stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
r15406 r16432 120 120 </ItemGroup> 121 121 <ItemGroup> 122 <Compile Include="Classification\ClassificationSolutionVariableImpactsView.cs"> 123 <SubType>UserControl</SubType> 124 </Compile> 125 <Compile Include="Classification\ClassificationSolutionVariableImpactsView.Designer.cs"> 126 <DependentUpon>ClassificationSolutionVariableImpactsView.cs</DependentUpon> 127 </Compile> 122 128 <Compile Include="Controls\DensityChart.cs"> 123 129 <SubType>UserControl</SubType> -
stable/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
r15152 r16432 131 131 <Compile Include="Implementation\Classification\ClassificationEnsembleProblemData.cs" /> 132 132 <Compile Include="Implementation\Classification\ClassificationSolutionBase.cs" /> 133 <Compile Include="Implementation\Classification\ClassificationSolutionVariableImpactsCalculator.cs" /> 133 134 <Compile Include="Implementation\Classification\ConstantClassificationSolution.cs" /> 134 135 <Compile Include="Implementation\Classification\DiscriminantFunctionClassificationSolutionBase.cs" />
Note: See TracChangeset
for help on using the changeset viewer.