Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/12/12 10:31:56 (12 years ago)
Author:
mkommend
Message:

#1081: Improved performance of time series prognosis.

Location:
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Views/3.4
Files:
4 edited

Legend:

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

    r7886 r7989  
    312312    </BootstrapperPackage>
    313313  </ItemGroup>
    314   <ItemGroup>
    315     <Folder Include="obj\" />
    316   </ItemGroup>
     314  <ItemGroup />
    317315  <ItemGroup>
    318316    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/TimeSeriesPrognosisSolutionView.cs

    r7183 r7989  
    2222using System.Windows.Forms;
    2323using HeuristicLab.Core;
    24 using HeuristicLab.Data;
    2524using HeuristicLab.MainForm;
    2625
    2726namespace HeuristicLab.Problems.DataAnalysis.Views {
    2827  [View("TimeSeriesPrognosisnSolution View")]
    29   [Content(typeof(TimeSeriesPrognosisSolutionBase), false)]
     28  [Content(typeof(TimeSeriesPrognosisSolution), false)]
    3029  public partial class TimeSeriesPrognosisSolutionView : DataAnalysisSolutionView {
    3130    public TimeSeriesPrognosisSolutionView() {
     
    3332    }
    3433
    35     public new TimeSeriesPrognosisSolutionBase Content {
    36       get { return (TimeSeriesPrognosisSolutionBase)base.Content; }
     34    public new TimeSeriesPrognosisSolution Content {
     35      get { return (TimeSeriesPrognosisSolution)base.Content; }
    3736      set { base.Content = value; }
    3837    }
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionLineChartView.cs

    r7463 r7989  
    5858    }
    5959
    60     private void UpdateTargetVariables() {
    61       // populate combobox
    62       targetVariableComboBox.Items.Clear();
    63       if (Content != null) {
    64         if (testPrognosisStart < Content.ProblemData.TestPartition.Start || testPrognosisStart >= Content.ProblemData.TestPartition.End) {
    65           testPrognosisStart = Content.ProblemData.TestPartition.Start;
    66         }
    67         foreach (var targetVariable in Content.ProblemData.TargetVariables)
    68           targetVariableComboBox.Items.Add(targetVariable);
    69 
    70         targetVariableComboBox.SelectedIndex = 0;
    71       }
    72     }
    73 
    74 
    75 
    7660    private void RedrawChart() {
    7761      this.chart.Series.Clear();
     
    7963        this.chart.ChartAreas[0].AxisX.Minimum = 0;
    8064        this.chart.ChartAreas[0].AxisX.Maximum = Content.ProblemData.Dataset.Rows - 1;
    81         string targetVariable = (string)targetVariableComboBox.SelectedItem;
    82         int varIndex = Content.ProblemData.TargetVariables.ToList().IndexOf(targetVariable);
     65        string targetVariable = Content.ProblemData.TargetVariable;
    8366
    8467        this.chart.Series.Add(TARGETVARIABLE_SERIES_NAME);
     
    9477          this.chart.Series[PROGNOSEDVALUES_TRAINING_SERIES_NAME].Points
    9578            .DataBindXY(Content.ProblemData.TrainingIndizes.ToArray(),
    96                         Content.PrognosedTrainingValues.SelectMany(x => x).Skip(varIndex).TakeEvery(Content.ProblemData.TargetVariables.Count()).ToArray());
     79                        Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes.Take(1), Content.ProblemData.TrainingPartition.Size).SelectMany(x => x).ToArray());
    9780        } else {
    9881          this.chart.Series[PROGNOSEDVALUES_TRAINING_SERIES_NAME].Points
    9982            .DataBindXY(Content.ProblemData.TrainingIndizes.ToArray(),
    100                         Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes, 1).SelectMany(x => x.Single()).Skip(varIndex).TakeEvery(Content.ProblemData.TargetVariables.Count()).ToArray());
     83                        Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes, 1).SelectMany(x => x).ToArray());
    10184        }
    10285        this.chart.Series[PROGNOSEDVALUES_TRAINING_SERIES_NAME].Tag = Content;
     
    11093        this.chart.Series[PROGNOSEDVALUES_TEST_SERIES_NAME].ChartType = SeriesChartType.FastLine;
    11194        if (prognosedValuesCheckbox.Checked) {
    112           int offsetToStart = testPrognosisStart - Content.ProblemData.TestPartition.Start;
    11395          this.chart.Series[PROGNOSEDVALUES_TEST_SERIES_NAME].Points
    114             .DataBindXY(Content.ProblemData.TestIndizes.Skip(offsetToStart).ToArray(),
    115                         Content.GetPrognosedValues(Enumerable.Range(testPrognosisStart, 1), Content.ProblemData.TestPartition.End - testPrognosisStart)
    116                         .SelectMany(x => x.SelectMany(y => y))
    117                         .Skip(varIndex)
    118                         .TakeEvery(Content.ProblemData.TargetVariables.Count())
    119                         .ToArray());
     96            .DataBindXY(Content.ProblemData.TestIndizes.ToArray(),
     97                        Content.GetPrognosedValues(Content.ProblemData.TestIndizes.Take(1), Content.ProblemData.TestPartition.Size).SelectMany(x => x).ToArray());
    12098        } else {
    12199          this.chart.Series[PROGNOSEDVALUES_TEST_SERIES_NAME].Points
    122100            .DataBindXY(Content.ProblemData.TestIndizes.ToArray(),
    123                         Content.GetPrognosedValues(Content.ProblemData.TestIndizes, 1)
    124                         .SelectMany(x => x.Single())
    125                         .Skip(varIndex)
    126                         .TakeEvery(Content.ProblemData.TargetVariables.Count())
    127                         .ToArray());
     101                        Content.GetPrognosedValues(Content.ProblemData.TestIndizes, 1).SelectMany(x => x).ToArray());
    128102        }
    129103        this.chart.Series[PROGNOSEDVALUES_TEST_SERIES_NAME].Tag = Content;
     
    159133    protected override void OnContentChanged() {
    160134      base.OnContentChanged();
    161       UpdateTargetVariables();
     135      RedrawChart();
    162136    }
    163137
    164138    private void Content_ProblemDataChanged(object sender, EventArgs e) {
    165       UpdateTargetVariables();
     139      RedrawChart();
    166140    }
    167141    private void Content_ModelChanged(object sender, EventArgs e) {
     
    212186              this.CreateAndAddStripLine("Training and Test", start, row, Color.FromArgb(40, Color.Green), Color.FromArgb(40, Color.Red), ChartHatchStyle.WideUpwardDiagonal);
    213187              break;
    214             default:
    215               // should not happen
    216               break;
     188            default: throw new NotSupportedException();
    217189          }
    218190          curAttr = attr[row];
     
    242214        }
    243215      } else if (Content != null) {
    244         string targetVariable = (string)targetVariableComboBox.SelectedItem;
    245         int varIndex = Content.ProblemData.TargetVariables.ToList().IndexOf(targetVariable);
    246 
     216        string targetVariable = Content.ProblemData.TargetVariable;
    247217
    248218        IEnumerable<int> indizes = null;
    249219        IEnumerable<double> predictedValues = null;
     220
    250221        switch (series.Name) {
    251222          case PROGNOSEDVALUES_TRAINING_SERIES_NAME:
    252223            indizes = Content.ProblemData.TrainingIndizes.ToArray();
    253             predictedValues =
    254               Content.PrognosedTrainingValues.SelectMany(x => x).Skip(varIndex).TakeEvery(
    255                 Content.ProblemData.TargetVariables.Count()).ToArray();
     224            predictedValues = Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes.Take(1), Content.ProblemData.TrainingPartition.Size).First();
    256225            break;
    257226          case PROGNOSEDVALUES_TEST_SERIES_NAME:
    258227            testPrognosisStart = Content.ProblemData.TestPartition.Start;
    259228            indizes = Content.ProblemData.TestIndizes.ToArray();
    260             predictedValues = Content.PrognosedTestValues.SelectMany(x => x).Skip(varIndex).TakeEvery(
    261               Content.ProblemData.TargetVariables.Count()).ToArray();
     229            predictedValues = Content.GetPrognosedValues(Content.ProblemData.TestIndizes.Take(1), Content.ProblemData.TestPartition.Size).First();
    262230            break;
    263231        }
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Views/3.4/TimeSeriesPrognosis/TimeSeriesPrognosisSolutionPrognosedValuesView.cs

    r7154 r7989  
    8282
    8383    private void UpdateEstimatedValues() {
    84       if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
    85       else {
    86         StringMatrix matrix = null;
    87         List<string> columnNames = new List<string>();
    88         if (Content != null) {
    89           columnNames.Add("Id");
     84      if (InvokeRequired) {
     85        Invoke((Action)UpdateEstimatedValues);
     86        return;
     87      }
     88      if (Content == null) return;
    9089
    91           string[,] values = new string[Content.ProblemData.Dataset.Rows, 1 + 3 * Content.ProblemData.TargetVariables.Count()];
    92           foreach (var row in Enumerable.Range(0, Content.ProblemData.Dataset.Rows))
    93             values[row, 0] = row.ToString();
     90      var targetVariable = Content.ProblemData.TargetVariable;
     91      StringMatrix matrix = null;
     92      List<string> columnNames = new List<string>();
     93      columnNames.Add("Id");
    9494
    95           var allPrognosedTraining = Content.PrognosedTrainingValues.SelectMany(x=>x).ToArray();
    96           var allPrognosedTest = Content.PrognosedTestValues.SelectMany(x => x).ToArray();
    97 
    98           int i = 0;
    99           int targetVariableIndex = 0;
    100           foreach (var targetVariable in Content.ProblemData.TargetVariables) {
    101             var prognosedTraining =
    102               allPrognosedTraining.Skip(targetVariableIndex).TakeEvery(Content.ProblemData.TargetVariables.Count());
    103             var prognosedTest =
    104               allPrognosedTest.Skip(targetVariableIndex).TakeEvery(Content.ProblemData.TargetVariables.Count());
    105 
    106             double[] target = Content.ProblemData.Dataset.GetDoubleValues(targetVariable).ToArray();
    107 
    108             var prognosedTrainingEnumerator = prognosedTraining.GetEnumerator();
    109             foreach (var row in Content.ProblemData.TrainingIndizes) {
    110               prognosedTrainingEnumerator.MoveNext();
    111               values[row, i + 2] = prognosedTrainingEnumerator.Current.ToString();
    112             }
    113 
    114             var prognosedTestEnumerator = prognosedTest.GetEnumerator();
    115             foreach (var row in Content.ProblemData.TestIndizes) {
    116               prognosedTestEnumerator.MoveNext();
    117               values[row, i + 3] = prognosedTestEnumerator.Current.ToString();
    118             }
    119 
    120             foreach (var row in Enumerable.Range(0, Content.ProblemData.Dataset.Rows)) {
    121               values[row, i + 1] = target[row].ToString();
    122             }
    123 
    124             columnNames.AddRange(new string[] { targetVariable + "(actual)", targetVariable + "(training)", targetVariable + "(test)" });
    125             i += 3;
    126             targetVariableIndex++;
    127           } // foreach
     95      string[,] values = new string[Content.ProblemData.Dataset.Rows, 4];
     96      var prognosedTraining = Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes.Take(1), Content.ProblemData.TrainingPartition.Size).First();
     97      var prognosedTest = Content.GetPrognosedValues(Content.ProblemData.TrainingIndizes.Take(1), Content.ProblemData.TestPartition.Size).First();
     98      double[] target = Content.ProblemData.Dataset.GetDoubleValues(targetVariable).ToArray();
    12899
    129100
    130           matrix = new StringMatrix(values);
    131           matrix.ColumnNames = columnNames.ToArray();
    132           matrix.SortableView = true;
     101      foreach (var row in Enumerable.Range(0, Content.ProblemData.Dataset.Rows)) {
     102        values[row, 0] = row.ToString();
     103        values[row, 1] = target[row].ToString();
     104      }
    133105
    134         } // if
    135         matrixView.Content = matrix;
     106      var rowsEnumerator = Content.ProblemData.TrainingIndizes.GetEnumerator();
     107      var prognosisEnumerator = prognosedTraining.GetEnumerator();
     108      while (rowsEnumerator.MoveNext() & prognosisEnumerator.MoveNext()) {
     109        var row = rowsEnumerator.Current;
     110        var prognosis = prognosisEnumerator.Current;
     111        values[row, 2] = prognosis.ToString();
    136112      }
     113
     114      rowsEnumerator = Content.ProblemData.TestIndizes.GetEnumerator();
     115      prognosisEnumerator = prognosedTest.GetEnumerator();
     116      while (rowsEnumerator.MoveNext() & prognosisEnumerator.MoveNext()) {
     117        var row = rowsEnumerator.Current;
     118        var prognosis = prognosisEnumerator.Current;
     119        values[row, 3] = prognosis.ToString();
     120      }
     121
     122      columnNames.AddRange(new string[] { targetVariable + "(actual)", targetVariable + "(training)", targetVariable + "(test)" });
     123      matrix = new StringMatrix(values);
     124      matrix.ColumnNames = columnNames.ToArray();
     125      matrix.SortableView = true;
    137126    }
    138127    #endregion
Note: See TracChangeset for help on using the changeset viewer.