Changeset 13003
- Timestamp:
- 10/14/15 21:47:38 (9 years ago)
- Location:
- trunk/sources
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/SymbolicRegressionSolutionErrorCharacteristicsCurveView.cs
r12012 r13003 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using System.Linq; 24 using System.Windows.Forms;25 25 using HeuristicLab.Algorithms.DataAnalysis; 26 26 using HeuristicLab.MainForm; … … 31 31 [Content(typeof(ISymbolicRegressionSolution))] 32 32 public partial class SymbolicRegressionSolutionErrorCharacteristicsCurveView : RegressionSolutionErrorCharacteristicsCurveView { 33 private IRegressionSolution linearRegressionSolution;34 33 public SymbolicRegressionSolutionErrorCharacteristicsCurveView() { 35 34 InitializeComponent(); … … 41 40 } 42 41 43 protected override void OnContentChanged() {44 if (Content != null)45 linearRegressionSolution = CreateLinearRegressionSolution();46 else47 linearRegressionSolution = null;48 49 base.OnContentChanged();50 }51 52 protected override void UpdateChart() {53 base.UpdateChart();54 if (Content == null || linearRegressionSolution == null) return;55 AddRegressionSolution(linearRegressionSolution);56 }57 58 42 private IRegressionSolution CreateLinearRegressionSolution() { 59 43 if (Content == null) throw new InvalidOperationException(); 60 44 double rmse, cvRmsError; 61 45 var problemData = (IRegressionProblemData)ProblemData.Clone(); 62 if (!problemData.TrainingIndices.Any()) return null; // don't create an LR model if the problem does not have a training set (e.g. loaded into an existing model)46 if (!problemData.TrainingIndices.Any()) return null; // don't create an LR model if the problem does not have a training set (e.g. loaded into an existing model) 63 47 64 48 //clear checked inputVariables … … 77 61 78 62 var solution = LinearRegression.CreateLinearRegressionSolution(problemData, out rmse, out cvRmsError); 79 solution.Name = " Linear Model";63 solution.Name = "Baseline (linear subset)"; 80 64 return solution; 81 65 } 82 66 83 protected override void Content_ModelChanged(object sender, EventArgs e) {84 linearRegressionSolution = CreateLinearRegressionSolution();85 base.Content_ModelChanged(sender, e);86 }87 67 88 protected override void Content_ProblemDataChanged(object sender, EventArgs e) {89 linearRegressionSolution = CreateLinearRegressionSolution();90 base.Content_ProblemDataChanged(sender, e);68 protected override IEnumerable<IRegressionSolution> CreateBaselineSolutions() { 69 foreach (var sol in base.CreateBaselineSolutions()) yield return sol; 70 yield return CreateLinearRegressionSolution(); 91 71 } 92 72 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
r12817 r13003 448 448 <Name>HeuristicLab.PluginInfrastructure-3.3</Name> 449 449 <Private>False</Private> 450 </ProjectReference> 451 <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj"> 452 <Project>{5AC82412-911B-4FA2-A013-EDC5E3F3FCC2}</Project> 453 <Name>HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4</Name> 454 </ProjectReference> 455 <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj"> 456 <Project>{3D28463F-EC96-4D82-AFEE-38BE91A0CA00}</Project> 457 <Name>HeuristicLab.Problems.DataAnalysis.Symbolic-3.4</Name> 450 458 </ProjectReference> 451 459 <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj"> -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Plugin.cs.frame
r12817 r13003 44 44 [PluginDependency("HeuristicLab.Persistence", "3.3")] 45 45 [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")] 46 [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")] 47 [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")] 46 48 [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")] 47 49 public class HeuristicLabProblemsDataAnalysisViewsPlugin : PluginBase { -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs
r13002 r13003 25 25 using System.Windows.Forms; 26 26 using System.Windows.Forms.DataVisualization.Charting; 27 using HeuristicLab.Algorithms.DataAnalysis; 27 28 using HeuristicLab.Common; 28 29 using HeuristicLab.MainForm; 30 using HeuristicLab.Optimization; 29 31 30 32 namespace HeuristicLab.Problems.DataAnalysis.Views { … … 62 64 } 63 65 66 // the view holds one regression solution as content but also contains several other regression solutions for comparison 67 // the following invariants must hold 68 // (Solutions.IsEmpty && Content == null) || 69 // (Solutions[0] == Content && Solutions.All(s => s.ProblemData.TargetVariable == Content.TargetVariable)) 70 64 71 public new IRegressionSolution Content { 65 72 get { return (IRegressionSolution)base.Content; } 66 73 set { base.Content = value; } 67 74 } 75 76 private readonly IList<IRegressionSolution> solutions = new List<IRegressionSolution>(); 77 public IEnumerable<IRegressionSolution> Solutions { 78 get { return solutions.AsEnumerable(); } 79 } 80 68 81 public IRegressionProblemData ProblemData { 69 82 get { … … 86 99 protected virtual void Content_ModelChanged(object sender, EventArgs e) { 87 100 if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ModelChanged, sender, e); 88 else UpdateChart(); 101 else { 102 // recalculate baseline solutions (for symbolic regression models the features used in the model might have changed) 103 solutions.Clear(); // remove all 104 solutions.Add(Content); // re-add the first solution 105 // and recalculate all other solutions 106 foreach (var sol in CreateBaselineSolutions()) { 107 solutions.Add(sol); 108 } 109 UpdateChart(); 110 } 89 111 } 90 112 protected virtual void Content_ProblemDataChanged(object sender, EventArgs e) { 91 113 if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ProblemDataChanged, sender, e); 92 114 else { 115 // recalculate baseline solutions 116 solutions.Clear(); // remove all 117 solutions.Add(Content); // re-add the first solution 118 // and recalculate all other solutions 119 foreach (var sol in CreateBaselineSolutions()) { 120 solutions.Add(sol); 121 } 93 122 UpdateChart(); 94 123 } … … 96 125 protected override void OnContentChanged() { 97 126 base.OnContentChanged(); 127 // the content object is always stored as the first element in solutions 128 solutions.Clear(); 129 ReadOnly = Content == null; 130 if (Content != null) { 131 // recalculate all solutions 132 solutions.Add(Content); 133 if (ProblemData.TrainingIndices.Any()) { 134 foreach (var sol in CreateBaselineSolutions()) 135 solutions.Add(sol); 136 // more solutions can be added by drag&drop 137 } 138 } 98 139 UpdateChart(); 99 140 } … … 109 150 if (cmbSamples.SelectedItem.ToString() == TestSamples && !ProblemData.TestIndices.Any()) return; 110 151 111 if (Content.ProblemData.TrainingIndices.Any()) { 112 AddRegressionSolution(CreateConstantSolution()); 113 } 114 115 AddRegressionSolution(Content); 152 foreach (var sol in Solutions) { 153 AddSeries(sol); 154 } 116 155 117 156 chart.ChartAreas[0].AxisX.Title = residualComboBox.SelectedItem.ToString(); 118 157 } 119 158 120 protected void Add RegressionSolution(IRegressionSolution solution) {159 protected void AddSeries(IRegressionSolution solution) { 121 160 if (chart.Series.Any(s => s.Name == solution.Name)) return; 122 161 … … 239 278 } 240 279 241 #region Baseline242 280 private void Chart_MouseDoubleClick(object sender, MouseEventArgs e) { 243 281 HitTestResult result = chart.HitTest(e.X, e.Y); … … 247 285 } 248 286 249 private ConstantRegressionSolution CreateConstantSolution() { 287 protected virtual IEnumerable<IRegressionSolution> CreateBaselineSolutions() { 288 yield return CreateConstantSolution(); 289 yield return CreateLinearSolution(); 290 } 291 292 private IRegressionSolution CreateConstantSolution() { 250 293 double averageTrainingTarget = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices).Average(); 251 294 var model = new ConstantRegressionModel(averageTrainingTarget); 252 295 var solution = new ConstantRegressionSolution(model, (IRegressionProblemData)ProblemData.Clone()); 253 solution.Name = "Baseline ";296 solution.Name = "Baseline (constant)"; 254 297 return solution; 255 298 } 256 #endregion 299 private IRegressionSolution CreateLinearSolution() { 300 double rmsError, cvRmsError; 301 var solution = LinearRegression.CreateLinearRegressionSolution((IRegressionProblemData)ProblemData.Clone(), out rmsError, out cvRmsError); 302 solution.Name = "Baseline (linear)"; 303 return solution; 304 } 257 305 258 306 private void chart_MouseMove(object sender, MouseEventArgs e) { … … 266 314 267 315 private void chart_DragDrop(object sender, DragEventArgs e) { 268 if (e.Data.GetDataPresent("HeuristicLab")) { 269 var regressionSolution = (IRegressionSolution)e.Data.GetData("HeuristicLab"); 270 AddRegressionSolution(regressionSolution); 316 if (e.Data.GetDataPresent(HeuristicLab.Common.Constants.DragDropDataFormat)) { 317 318 var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); 319 var dataAsRegressionSolution = data as IRegressionSolution; 320 var dataAsResult = data as IResult; 321 322 if (dataAsRegressionSolution != null) { 323 solutions.Add((IRegressionSolution)dataAsRegressionSolution.Clone()); 324 } else if (dataAsResult != null && dataAsResult.Value is IRegressionSolution) { 325 solutions.Add((IRegressionSolution)dataAsResult.Value.Clone()); 326 } 327 328 UpdateChart(); 271 329 } 272 330 } 273 331 274 332 private void chart_DragEnter(object sender, DragEventArgs e) { 275 e.Effect = DragDropEffects.Copy; 333 e.Effect = DragDropEffects.None; 334 if (!e.Data.GetDataPresent(HeuristicLab.Common.Constants.DragDropDataFormat)) return; 335 336 var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat); 337 var dataAsRegressionSolution = data as IRegressionSolution; 338 var dataAsResult = data as IResult; 339 340 if (!ReadOnly && 341 (dataAsRegressionSolution != null || (dataAsResult != null && dataAsResult.Value is IRegressionSolution))) { 342 e.Effect = DragDropEffects.Copy; 343 } 276 344 } 277 345 -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionErrorCharacteristicsCurveView.cs
r12012 r13003 28 28 [Content(typeof(ITimeSeriesPrognosisSolution))] 29 29 public partial class TimeSeriesPrognosisSolutionErrorCharacteristicsCurveView : RegressionSolutionErrorCharacteristicsCurveView { 30 31 32 30 public TimeSeriesPrognosisSolutionErrorCharacteristicsCurveView() 33 31 : base() { … … 46 44 } 47 45 48 protected override void UpdateChart() {49 base.UpdateChart();50 if (Content == null) return;46 protected override IEnumerable<IRegressionSolution> CreateBaselineSolutions() { 47 foreach (var sol in base.CreateBaselineSolutions()) 48 yield return sol; 51 49 52 50 IEnumerable<double> trainingStartValues = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices.Select(r => r - 1).Where(r => r > 0)).ToList(); 53 if (trainingStartValues.Any()) { 54 //AR1 model 55 double alpha, beta; 56 OnlineCalculatorError errorState; 57 OnlineLinearScalingParameterCalculator.Calculate(ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices.Where(x => x > 0)), trainingStartValues, out alpha, out beta, out errorState); 58 var ar1model = new TimeSeriesPrognosisAutoRegressiveModel(ProblemData.TargetVariable, new double[] { beta }, alpha).CreateTimeSeriesPrognosisSolution(ProblemData); 59 ar1model.Name = "AR(1) Model"; 60 AddRegressionSolution(ar1model); 61 } 51 //AR1 model 52 double alpha, beta; 53 OnlineCalculatorError errorState; 54 OnlineLinearScalingParameterCalculator.Calculate(ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices.Where(x => x > 0)), trainingStartValues, out alpha, out beta, out errorState); 55 var ar1Solution = new TimeSeriesPrognosisAutoRegressiveModel(ProblemData.TargetVariable, new double[] { beta }, alpha).CreateTimeSeriesPrognosisSolution(ProblemData); 56 ar1Solution.Name = "AR(1)"; 57 yield return ar1Solution; 62 58 } 63 59 }
Note: See TracChangeset
for help on using the changeset viewer.