Changeset 7180


Ignore:
Timestamp:
12/12/11 23:05:25 (10 years ago)
Author:
gkronber
Message:

#1604 removed caching code for SVM models as caching of estimated values is done in the solutions now.

Location:
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkClassificationSolution.cs

    r6589 r7180  
    5151      return new NeuralNetworkClassificationSolution(this, cloner);
    5252    }
    53 
    5453    protected override void RecalculateResults() {
    5554      CalculateResults();
  • trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorMachineModel.cs

    r6604 r7180  
    9898      this.targetVariable = original.targetVariable;
    9999      this.allowedInputVariables = (string[])original.allowedInputVariables.Clone();
    100       foreach (var dataset in original.cachedPredictions.Keys) {
    101         this.cachedPredictions.Add(cloner.Clone(dataset), (double[])original.cachedPredictions[dataset].Clone());
    102       }
    103100      if (original.classValues != null)
    104101        this.classValues = (double[])original.classValues.Clone();
     
    162159    }
    163160    #endregion
    164     // cache for predictions, which is cloned but not persisted, must be cleared when the model is changed
    165     private Dictionary<Dataset, double[]> cachedPredictions = new Dictionary<Dataset, double[]>();
    166161    private IEnumerable<double> GetEstimatedValuesHelper(Dataset dataset, IEnumerable<int> rows) {
    167       if (!cachedPredictions.ContainsKey(dataset)) {
    168         // create an array of cached predictions which is initially filled with NaNs
    169         double[] predictions = Enumerable.Repeat(double.NaN, dataset.Rows).ToArray();
    170         CalculatePredictions(dataset, rows, predictions);
    171         cachedPredictions.Add(dataset, predictions);
    172       }
    173       // get the array of predictions and select the subset of requested rows
    174       double[] p = cachedPredictions[dataset];
    175       var requestedPredictions = from r in rows
    176                                  select p[r];
    177       // check if the requested predictions contain NaNs
    178       // (this means for the request rows some predictions have not been cached)
    179       if (requestedPredictions.Any(x => double.IsNaN(x))) {
    180         // updated the predictions for currently requested rows
    181         CalculatePredictions(dataset, rows, p);
    182         cachedPredictions[dataset] = p;
    183         // now we can be sure that for the current rows all predictions are available
    184         return from r in rows
    185                select p[r];
    186       } else {
    187         // there were no NaNs => just return the cached predictions
    188         return requestedPredictions;
    189       }
    190     }
    191 
    192     private void CalculatePredictions(Dataset dataset, IEnumerable<int> rows, double[] predictions) {
    193       // calculate and cache predictions for the currently requested rows
     162      // calculate predictions for the currently requested rows
    194163      SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(dataset, targetVariable, allowedInputVariables, rows);
    195164      SVM.Problem scaledProblem = Scaling.Scale(RangeTransform, problem);
    196165
    197       // row is the index in the original dataset,
    198       // i is the index in the scaled dataset (containing only the necessary rows)
    199       int i = 0;
    200       foreach (var row in rows) {
    201         predictions[row] = SVM.Prediction.Predict(Model, scaledProblem.X[i]);
    202         i++;
     166      for (int i = 0; i < scaledProblem.Count; i++) {
     167        yield return SVM.Prediction.Predict(Model, scaledProblem.X[i]);
    203168      }
    204169    }
     
    207172    public event EventHandler Changed;
    208173    private void OnChanged(EventArgs e) {
    209       cachedPredictions.Clear();
    210174      var handlers = Changed;
    211175      if (handlers != null)
Note: See TracChangeset for help on using the changeset viewer.