Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/05/12 17:02:37 (12 years ago)
Author:
sforsten
Message:

#1776:

  • models can be selected with a check box
  • all strategies are now finished
  • major changes have been made to provide the same behaviour when getting the estimated training or test values of an ensemble
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs

    r7531 r7549  
    4646    protected double[] classValues;
    4747
    48     protected override IEnumerable<double> DiscriminantCalculateWeights(ItemCollection<IDiscriminantFunctionClassificationSolution> discriminantSolutions) {
    49       List<List<double>> estimatedTrainingValEnumerators = new List<List<double>>();
    50       List<List<double>> estimatedTrainingClassValEnumerators = new List<List<double>>();
     48    /// <summary>
     49    ///
     50    /// </summary>
     51    /// <param name="discriminantSolutions"></param>
     52    /// <returns>median instead of weights, because it doesn't use any weights</returns>
     53    protected override IEnumerable<double> DiscriminantCalculateWeights(IEnumerable<IDiscriminantFunctionClassificationSolution> discriminantSolutions) {
     54      List<List<double>> estimatedValues = new List<List<double>>();
     55      List<List<double>> estimatedClassValues = new List<List<double>>();
     56
     57      List<IClassificationProblemData> solutionProblemData = discriminantSolutions.Select(sol => sol.ProblemData).ToList();
     58      Dataset dataSet = solutionProblemData[0].Dataset;
     59      IEnumerable<int> rows = Enumerable.Range(0, dataSet.Rows);
    5160      foreach (var solution in discriminantSolutions) {
    52         estimatedTrainingValEnumerators.Add(solution.EstimatedTrainingValues.ToList());
    53         estimatedTrainingClassValEnumerators.Add(solution.EstimatedTrainingClassValues.ToList());
     61        estimatedValues.Add(solution.Model.GetEstimatedValues(dataSet, rows).ToList());
     62        estimatedClassValues.Add(solution.Model.GetEstimatedValues(dataSet, rows).ToList());
    5463      }
    5564
    5665      List<double> median = new List<double>();
    57 
    58       IClassificationProblemData problemData = discriminantSolutions.ElementAt(0).ProblemData;
    59       List<double> targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable).ToList();
    60       IEnumerable<double> trainingVal = GetValues(targetValues, problemData.TrainingIndizes);
    61 
    62       for (int i = 0; i < estimatedTrainingClassValEnumerators.First().Count; i++) {
    63         var points = (from solution in estimatedTrainingValEnumerators
    64                       select solution[i])
    65                       .OrderBy(p => p)
    66                       .ToList();
    67 
    68         median.Add(GetMedian(points));
     66      List<double> targetValues = dataSet.GetDoubleValues(solutionProblemData[0].TargetVariable).ToList();
     67      IList<double> curTrainingpoints = new List<double>();
     68      int removed = 0;
     69      int count = targetValues.Count;
     70      for (int point = 0; point < count; point++) {
     71        curTrainingpoints.Clear();
     72        for (int solutionPos = 0; solutionPos < solutionProblemData.Count; solutionPos++) {
     73          if (PointInTraining(solutionProblemData[solutionPos], point)) {
     74            curTrainingpoints.Add(estimatedValues[solutionPos][point]);
     75          }
     76        }
     77        if (curTrainingpoints.Count > 0)
     78          median.Add(GetMedian(curTrainingpoints.OrderBy(p => p).ToList()));
     79        else {
     80          //remove not used points
     81          targetValues.RemoveAt(point - removed);
     82          removed++;
     83        }
    6984      }
    70       AccuracyMaximizationThresholdCalculator.CalculateThresholds(problemData, median, trainingVal, out classValues, out threshold);
     85      AccuracyMaximizationThresholdCalculator.CalculateThresholds(solutionProblemData[0], median, targetValues, out classValues, out threshold);
    7186      return median;
    7287    }
    7388
    74     protected override double DiscriminantAggregateEstimatedClassValues(IEnumerable<double> estimatedClassValues, IEnumerable<double> estimatedValues) {
     89    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IClassificationSolution, double> estimatedValues) {
    7590      double classValue = classValues.First();
    76       double median = GetMedian(estimatedValues.ToList());
     91      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
     92      if (values.Count <= 0)
     93        return double.NaN;
     94      double median = GetMedian(values);
    7795      for (int i = 0; i < classValues.Count(); i++) {
    7896        if (median > threshold[i])
     
    87105      int count = estimatedValues.Count;
    88106      if (count % 2 == 0)
    89         return 0.5 * (estimatedValues[count / 2] + estimatedValues[count / 2 + 1]);
     107        return 0.5 * (estimatedValues[count / 2 - 1] + estimatedValues[count / 2]);
    90108      else
    91         return estimatedValues[(count + 1) / 2];
     109        return estimatedValues[count / 2];
    92110    }
    93111  }
Note: See TracChangeset for help on using the changeset viewer.