Changeset 7180 for trunk/sources
- Timestamp:
- 12/12/11 23:05:25 (13 years ago)
- 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 51 51 return new NeuralNetworkClassificationSolution(this, cloner); 52 52 } 53 54 53 protected override void RecalculateResults() { 55 54 CalculateResults(); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorMachineModel.cs
r6604 r7180 98 98 this.targetVariable = original.targetVariable; 99 99 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 }103 100 if (original.classValues != null) 104 101 this.classValues = (double[])original.classValues.Clone(); … … 162 159 } 163 160 #endregion 164 // cache for predictions, which is cloned but not persisted, must be cleared when the model is changed165 private Dictionary<Dataset, double[]> cachedPredictions = new Dictionary<Dataset, double[]>();166 161 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 194 163 SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(dataset, targetVariable, allowedInputVariables, rows); 195 164 SVM.Problem scaledProblem = Scaling.Scale(RangeTransform, problem); 196 165 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]); 203 168 } 204 169 } … … 207 172 public event EventHandler Changed; 208 173 private void OnChanged(EventArgs e) { 209 cachedPredictions.Clear();210 174 var handlers = Changed; 211 175 if (handlers != null)
Note: See TracChangeset
for help on using the changeset viewer.