Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/15/11 15:51:55 (14 years ago)
Author:
gkronber
Message:

#1426 merged r5690 from data analysis refactoring branch (see #1418) into trunk to fix persistence problems of SVMs.

Location:
trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/SupportVectorRegression/SupportVectorRegressionSolution.cs

    r5445 r5692  
    4646    }
    4747
    48     public Dataset SupportVectors {
    49       get { return CalculateSupportVectors(); }
    50     }
    51 
    5248    private List<double> estimatedValues;
    5349    public override IEnumerable<double> EstimatedValues {
     
    7066    }
    7167
     68    public Dataset SupportVectors {
     69      get {
     70        int nCol = inputVariables.Count;
     71        double[,] data = new double[Model.Model.SupportVectorCount, nCol];
     72        int row = 0;
     73        foreach (var sv in Model.SupportVectors) {
     74          for (int col = 0; col < nCol; col++) {
     75            data[row, col] = sv[col];
     76          }
     77          row++;
     78        }
     79        return new Dataset(inputVariables, data);
     80      }
     81    }
     82
     83    [Storable]
     84    private List<string> inputVariables;
     85
    7286    [StorableConstructor]
    7387    private SupportVectorRegressionSolution(bool deserializing) : base(deserializing) { }
    74     private SupportVectorRegressionSolution(SupportVectorRegressionSolution original, Cloner cloner) : base(original, cloner) { }
     88    private SupportVectorRegressionSolution(SupportVectorRegressionSolution original, Cloner cloner)
     89      : base(original, cloner) {
     90      this.inputVariables = new List<string>(original.inputVariables);
     91    }
    7592    public SupportVectorRegressionSolution() : base() { }
    7693    public SupportVectorRegressionSolution(DataAnalysisProblemData problemData, SupportVectorMachineModel model, IEnumerable<string> inputVariables, double lowerEstimationLimit, double upperEstimationLimit)
    7794      : base(problemData, lowerEstimationLimit, upperEstimationLimit) {
    7895      this.Model = model;
     96      this.inputVariables = new List<string>(inputVariables);
     97    }
     98
     99    [StorableHook(HookType.AfterDeserialization)]
     100    private void AfterDeserialization() {
     101      #region backwards compatibility
     102      if (inputVariables == null) inputVariables = ProblemData.InputVariables.CheckedItems.Select(x => x.Value.Value).ToList();
     103      #endregion
    79104    }
    80105
    81106    public override IDeepCloneable Clone(Cloner cloner) {
    82107      return new SupportVectorRegressionSolution(this, cloner);
    83     }
    84 
    85     protected override void OnProblemDataChanged() {
    86       Model.Model.SupportVectorIndizes = new int[0];
    87       base.OnProblemDataChanged();
    88     }
    89 
    90     private Dataset CalculateSupportVectors() {
    91       if (Model.Model.SupportVectorIndizes.Length == 0)
    92         return new Dataset(new List<string>(), new double[0, 0]);
    93 
    94       double[,] data = new double[Model.Model.SupportVectorIndizes.Length, ProblemData.Dataset.Columns];
    95       for (int i = 0; i < Model.Model.SupportVectorIndizes.Length; i++) {
    96         for (int column = 0; column < ProblemData.Dataset.Columns; column++)
    97           data[i, column] = ProblemData.Dataset[Model.Model.SupportVectorIndizes[i], column];
    98       }
    99       return new Dataset(ProblemData.Dataset.VariableNames, data);
    100108    }
    101109
Note: See TracChangeset for help on using the changeset viewer.