Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/06/12 15:08:13 (12 years ago)
Author:
sforsten
Message:

#1776:

  • bug fix in NeighbourhoodWeightCalculator
  • added GetConfidence method to IClassificationEnsembleSolutionWeightCalculator
  • adjusted the confidence column in ClassificationEnsembleSolutionEstimatedClassValuesView
File:
1 edited

Legend:

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

    r7549 r7562  
    2020#endregion
    2121
     22using System.Collections;
    2223using System.Collections.Generic;
    2324using System.Linq;
     
    8485      }
    8586      AccuracyMaximizationThresholdCalculator.CalculateThresholds(solutionProblemData[0], median, targetValues, out classValues, out threshold);
    86       return median;
     87      return Enumerable.Repeat<double>(1, discriminantSolutions.Count());
    8788    }
    8889
    8990    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IClassificationSolution, double> estimatedValues) {
    90       double classValue = classValues.First();
    9191      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
    9292      if (values.Count <= 0)
    9393        return double.NaN;
    9494      double median = GetMedian(values);
     95      return GetClassValueToMedian(median);
     96    }
     97    private double GetClassValueToMedian(double median) {
     98      double classValue = classValues.First();
    9599      for (int i = 0; i < classValues.Count(); i++) {
    96100        if (median > threshold[i])
     
    100104      }
    101105      return classValue;
     106    }
     107
     108    protected override double GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, int index, double estimatedClassValue) {
     109      // only works with binary classification
     110      if (!classValues.Count().Equals(2))
     111        return double.NaN;
     112      Dataset dataset = solutions.First().ProblemData.Dataset;
     113      IList<double> values = solutions.Select(s => s.Model.GetEstimatedValues(dataset, Enumerable.Repeat(index, 1)).First()).ToList();
     114      if (values.Count <= 0)
     115        return double.NaN;
     116      double median = GetMedian(values);
     117      if (estimatedClassValue.Equals(classValues[0])) {
     118        if (median < estimatedClassValue)
     119          return 1;
     120        else if (median >= threshold[1])
     121          return 0;
     122        else {
     123          double distance = threshold[1] - classValues[0];
     124          return (1 / distance) * (median - classValues[0]);
     125        }
     126      } else if (estimatedClassValue.Equals(classValues[1])) {
     127        if (median > estimatedClassValue)
     128          return 1;
     129        else if (median <= threshold[1])
     130          return 0;
     131        else {
     132          double distance = classValues[1] - threshold[1];
     133          return (1 / distance) * (classValues[1] - median);
     134        }
     135      } else
     136        return double.NaN;
    102137    }
    103138
Note: See TracChangeset for help on using the changeset viewer.