Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/20/10 15:49:22 (14 years ago)
Author:
gkronber
Message:

Implemented views for DataAnalysisProblems and DataAnalysisSolutions. #938 (Data types and operators for regression problems)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/DataAnalysisSolution.cs

    r3431 r3442  
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2727using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     28using System.Collections.Generic;
     29using System.Linq;
    2830
    2931namespace HeuristicLab.Problems.DataAnalysis {
     
    3335  [Item("DataAnalysisSolution", "Represents a solution for a data analysis problem which can be visualized in the GUI.")]
    3436  [StorableClass]
    35   public sealed class DataAnalysisSolution : Item {
     37  public class DataAnalysisSolution : Item {
    3638    [Storable]
    37     private IPredictor predictor;
    38     public IPredictor Predictor {
    39       get { return predictor; }
     39    private IModel model;
     40    public IModel Model {
     41      get { return model; }
    4042      set {
    41         if (predictor != value) {
    42           predictor = value;
    43           OnPredictorChanged();
     43        if (model != value) {
     44          model = value;
     45          OnModelChanged();
    4446        }
    4547      }
     
    5254      set {
    5355        if (problemData != value) {
     56          if (value == null) throw new ArgumentNullException();
    5457          if (problemData != null) DeregisterProblemDataEvents();
    5558          problemData = value;
    56           if (problemData != null) RegisterProblemDataEvents();
     59          RegisterProblemDataEvents();
    5760          OnProblemDataChanged();
    5861        }
    5962      }
    6063    }
    61    
     64
     65    private List<double> estimatedValues;
     66    public IEnumerable<double> EstimatedValues {
     67      get {
     68        return estimatedValues;
     69      }
     70    }
     71
     72    private List<double> estimatedTrainingValues;
     73    public IEnumerable<double> EstimatedTrainingValues {
     74      get {
     75        return estimatedTrainingValues;
     76      }
     77    }
     78
     79    private List<double> estimatedTestValues;
     80    public IEnumerable<double> EstimatedTestValues {
     81      get {
     82        return estimatedTestValues;
     83      }
     84    }
     85
    6286    public DataAnalysisSolution() : base() { }
    63     public DataAnalysisSolution(DataAnalysisProblemData problemData, IPredictor predictor)
     87    public DataAnalysisSolution(DataAnalysisProblemData problemData, IModel model)
    6488      : this() {
    6589      this.problemData = problemData;
    66       this.predictor = predictor;
     90      this.model = model;
    6791      Initialize();
    6892    }
     93
    6994    [StorableConstructor]
    7095    private DataAnalysisSolution(bool deserializing) : base(deserializing) { }
     
    75100    }
    76101
     102    private void RecalculateEstimatedValues() {
     103      estimatedValues = GetEstimatedValues(0, problemData.Dataset.Rows).ToList();
     104      int nTrainingValues = problemData.TrainingSamplesEnd.Value - problemData.TrainingSamplesStart.Value;
     105      estimatedTrainingValues = estimatedValues.Skip(problemData.TrainingSamplesStart.Value).Take(nTrainingValues).ToList();
     106      int nTestValues = problemData.TestSamplesEnd.Value - problemData.TestSamplesStart.Value;
     107      estimatedTestValues = estimatedValues.Skip(problemData.TestSamplesStart.Value).Take(nTestValues).ToList();
     108    }
     109
     110    private IEnumerable<double> GetEstimatedValues(int start, int end) {
     111      double[] xs = new double[ProblemData.InputVariables.Count];
     112      for (int row = 0; row < ProblemData.Dataset.Rows; row++) {
     113        for (int i = 0; i < xs.Length; i++) {
     114          var variableIndex = ProblemData.Dataset.GetVariableIndex(ProblemData.InputVariables[i].Value);
     115          xs[i] = ProblemData.Dataset[row, variableIndex];
     116        }
     117        yield return model.GetValue(xs);
     118      }
     119    }
     120
    77121    public override IDeepCloneable Clone(Cloner cloner) {
    78122      DataAnalysisSolution clone = new DataAnalysisSolution();
    79123      cloner.RegisterClonedObject(this, clone);
    80       clone.predictor = (IPredictor)cloner.Clone(predictor);
     124      clone.model = (IModel)cloner.Clone(model);
    81125      clone.problemData = problemData;
    82126      clone.Initialize();
     
    85129
    86130    #region Events
    87     public event EventHandler PredictorChanged;
    88     private void OnPredictorChanged() {
    89       var changed = PredictorChanged;
     131    public event EventHandler ModelChanged;
     132    private void OnModelChanged() {
     133      RecalculateEstimatedValues();
     134      var changed = ModelChanged;
    90135      if (changed != null)
    91136        changed(this, EventArgs.Empty);
     
    93138    public event EventHandler ProblemDataChanged;
    94139    private void OnProblemDataChanged() {
     140      RecalculateEstimatedValues();
    95141      var changed = ProblemDataChanged;
    96142      if (changed != null)
     
    99145
    100146    private void RegisterProblemDataEvents() {
    101       ProblemData.DatasetChanged += new EventHandler(ProblemData_DataSetChanged);
     147      ProblemData.ProblemDataChanged += new EventHandler(ProblemData_Changed);
    102148    }
    103149    private void DeregisterProblemDataEvents() {
    104       ProblemData.DatasetChanged += new EventHandler(ProblemData_DataSetChanged);
     150      ProblemData.ProblemDataChanged += new EventHandler(ProblemData_Changed);
    105151    }
    106152
    107     private void ProblemData_DataSetChanged(object sender, EventArgs e) {
     153    private void ProblemData_Changed(object sender, EventArgs e) {
    108154      OnProblemDataChanged();
    109155    }
Note: See TracChangeset for help on using the changeset viewer.