Free cookie consent management tool by TermsFeed Policy Generator

Changeset 5692


Ignore:
Timestamp:
03/15/11 15:51:55 (13 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
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.ExtLibs

    • Property svn:mergeinfo set to (toggle deleted branches)
      /branches/DataAnalysis Refactoring/HeuristicLab.ExtLibsmergedeligible
      /branches/CloningRefactoring/HeuristicLab.ExtLibs4656-4721
      /branches/DataAnalysis/HeuristicLab.ExtLibs4458-4459,​4462,​4464
      /branches/GP.Symbols (TimeLag, Diff, Integral)/HeuristicLab.ExtLibs5060
      /branches/NET40/sources/HeuristicLab.ExtLibs5138-5162
      /branches/ParallelEngine/HeuristicLab.ExtLibs5175-5192
      /branches/SuccessProgressAnalysis/HeuristicLab.ExtLibs5370-5682
  • trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Model.cs

    r4545 r5692  
    3131    private int _numberOfClasses;
    3232    private int _supportVectorCount;
    33     private int[] _supportVectorIndizes;
    3433    private Node[][] _supportVectors;
    3534    private double[][] _supportVectorCoefficients;
     
    7776      set {
    7877        _supportVectorCount = value;
    79       }
    80     }
    81 
    82     /// <summary>
    83     /// Indizes of support vectors identified in the training.
    84     /// </summary>
    85     public int[] SupportVectorIndizes {
    86       get {
    87         return _supportVectorIndizes;
    88       }
    89       set {
    90         _supportVectorIndizes = value;
    9178      }
    9279    }
     
    215202      model.ClassLabels = null;
    216203      model.NumberOfSVPerClass = null;
    217       model.SupportVectorIndizes = new int[0];
    218204
    219205      bool headerFinished = false;
     
    416402        output.Write("nr_sv");
    417403        for (int i = 0; i < nr_class; i++)
    418           output.Write(" " + model.NumberOfSVPerClass[i].ToString("r"));
     404          output.Write(" " + model.NumberOfSVPerClass[i]);
    419405        output.Write(Environment.NewLine);
    420406      }
  • trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/1.6.3/LibSVM-1.6.3/Solver.cs

    r4068 r5692  
    14601460          if (Math.Abs(f.alpha[i]) > 0) ++nSV;
    14611461        model.SupportVectorCount = nSV;
    1462         model.SupportVectorIndizes = new int[nSV];
    14631462        model.SupportVectors = new Node[nSV][];
    14641463        model.SupportVectorCoefficients[0] = new double[nSV];
     
    14681467          if (Math.Abs(f.alpha[i]) > 0) {
    14691468            model.SupportVectors[j] = prob.X[i];
    1470             model.SupportVectorIndizes[j] = i;
    14711469            model.SupportVectorCoefficients[0][j] = f.alpha[i];
    14721470
     
    15961594        model.SupportVectorCount = nnz;
    15971595        model.SupportVectors = new Node[nnz][];
    1598         model.SupportVectorIndizes = new int[nnz];
    15991596        p = 0;
    16001597        for (i = 0; i < l; i++) {
    16011598          if (nonzero[i]) {
    16021599            model.SupportVectors[p] = x[i];
    1603             model.SupportVectorIndizes[p] = i;
    16041600            p++;
    16051601          }
  • trunk/sources/HeuristicLab.Problems.DataAnalysis

  • 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
  • trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/SupportVectorMachine/SupportVectorMachineModel.cs

    r5445 r5692  
    3737  [Item("SupportVectorMachineModel", "Represents a support vector machine model.")]
    3838  public sealed class SupportVectorMachineModel : NamedItem, IDataAnalysisModel {
    39     [StorableConstructor]
    40     private SupportVectorMachineModel(bool deserializing) : base(deserializing) { }
    41     private SupportVectorMachineModel(SupportVectorMachineModel original, Cloner cloner)
    42       : base(original, cloner) {
    43       // only using a shallow copy here! (gkronber)
    44       this.model = original.model;
    45       this.rangeTransform = original.rangeTransform;
    46     }
    47     public SupportVectorMachineModel() : base() { }
    48 
    4939    private SVM.Model model;
    5040    /// <summary>
     
    7767    }
    7868
     69    public IEnumerable<double[]> SupportVectors {
     70      get {
     71        return from sv in Model.SupportVectors
     72               select (from svx in sv
     73                       select svx.Value).ToArray();
     74      }
     75    }
     76
     77    [StorableConstructor]
     78    private SupportVectorMachineModel(bool deserializing) : base(deserializing) { }
     79    private SupportVectorMachineModel(SupportVectorMachineModel original, Cloner cloner)
     80      : base(original, cloner) {
     81      // only using a shallow copy here! (gkronber)
     82      this.model = original.model;
     83      this.rangeTransform = original.rangeTransform;
     84    }
     85    public SupportVectorMachineModel() : base() { }
     86
    7987    public IEnumerable<double> GetEstimatedValues(DataAnalysisProblemData problemData, int start, int end) {
    8088      SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(problemData, Enumerable.Range(start, end - start));
     
    96104
    97105    #region persistence
    98     [Storable]
    99     private int[] SupportVectorIndizes {
    100       get { return this.Model.SupportVectorIndizes; }
    101       set { this.Model.SupportVectorIndizes = value; }
    102     }
    103 
    104106    [Storable]
    105107    private string ModelAsString {
Note: See TracChangeset for help on using the changeset viewer.