Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/01/10 12:31:04 (14 years ago)
Author:
gkronber
Message:

Adapted SVM classes to work correctly for overlapping training / test partitions. #1226

File:
1 edited

Legend:

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

    r4068 r4543  
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2727using SVM;
     28using System.Collections.Generic;
     29using System.Linq;
    2830
    2931namespace HeuristicLab.Problems.DataAnalysis.SupportVectorMachine {
     
    8082      int start = SamplesStart.Value;
    8183      int end = SamplesEnd.Value;
     84      IEnumerable<int> rows =
     85        Enumerable.Range(start, end - start)
     86        .Where(i => i < DataAnalysisProblemData.TestSamplesStart.Value || DataAnalysisProblemData.TestSamplesEnd.Value <= i);
    8287
    83       ValuesParameter.ActualValue = new DoubleMatrix(Evaluate(SupportVectorMachineModel, DataAnalysisProblemData, start, end));
     88      ValuesParameter.ActualValue = new DoubleMatrix(Evaluate(SupportVectorMachineModel, DataAnalysisProblemData, rows));
    8489      return base.Apply();
    8590    }
    8691
    87     public static double[,] Evaluate(SupportVectorMachineModel model, DataAnalysisProblemData problemData, int start, int end) {
    88       SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(problemData, start, end);
     92    public static double[,] Evaluate(SupportVectorMachineModel model, DataAnalysisProblemData problemData, IEnumerable<int> rowIndices) {
     93      SVM.Problem problem = SupportVectorMachineUtil.CreateSvmProblem(problemData, rowIndices);
    8994      SVM.Problem scaledProblem = model.RangeTransform.Scale(problem);
    9095
     
    9297
    9398      double[,] values = new double[scaledProblem.Count, 2];
     99      var rowEnumerator = rowIndices.GetEnumerator();
    94100      for (int i = 0; i < scaledProblem.Count; i++) {
    95         values[i, 0] = problemData.Dataset[start + i, targetVariableIndex];
     101        rowEnumerator.MoveNext();
     102        values[i, 0] = problemData.Dataset[rowEnumerator.Current, targetVariableIndex];
    96103        values[i, 1] = SVM.Prediction.Predict(model.Model, scaledProblem.X[i]);
    97104      }
Note: See TracChangeset for help on using the changeset viewer.