Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/15/08 12:26:48 (16 years ago)
Author:
mkommend
Message:

namespaces changed to HeuristicLab.GP.StructureIdentification.Classification
(ticket #177)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyser.cs

    r667 r668  
    2929
    3030
    31 namespace HeuristicLab.GP.Classification {
     31namespace HeuristicLab.GP.StructureIdentification.Classification {
    3232  public class ROCAnalyser : OperatorBase {
    33     private ItemList values;
    3433
    3534    public override string Description {
     
    5655        rocValues.Clear();
    5756
     57      //ROC Curve starts at 0,0
     58      ItemList row = new ItemList();
     59      row.Add(new DoubleData(0));
     60      row.Add(new DoubleData(0));
     61      rocValues.Add(row);
     62
    5863      //calculate new ROC Values
     64      double estimated;
     65      double original;
     66      double positiveClassKey;
     67      double negativeClassKey;
     68      double truePositiveRate;
     69      double falsePositiveRate;
    5970
     71      //initialize classes dictionary
     72      Dictionary<double, List<double>> classes = new Dictionary<double, List<double>>();
     73      foreach (ItemList value in values) {
     74        estimated = ((DoubleData)value[0]).Data;
     75        original = ((DoubleData)value[1]).Data;
     76        if (!classes.ContainsKey(original))
     77          classes[original] = new List<double>();
     78        classes[original].Add(estimated);
     79      }
     80
     81      //check for 2 classes classification problem
     82      if (classes.Keys.Count != 2)
     83        throw new Exception("ROCAnalyser only handles  2 class classification problems");
     84
     85      //sort estimated values in classes dictionary
     86      foreach (List<double> estimatedValues in classes.Values)
     87        estimatedValues.Sort();
     88
     89      //calculate truePosivite- & falsePositiveRate
     90      positiveClassKey = classes.Keys.Min<double>();
     91      negativeClassKey = classes.Keys.Max<double>();
     92      for (int i = 0; i < classes[negativeClassKey].Count; i++) {
     93        truePositiveRate = classes[positiveClassKey].Count<double>(value => value < classes[negativeClassKey][i]) / classes[positiveClassKey].Count;
     94        //stop calculation if truePositiveRate = 1; save runtime
     95        if (truePositiveRate == 1)
     96          break;
     97        falsePositiveRate = (i) / classes[negativeClassKey].Count;
     98        row = new ItemList();
     99        row.Add(new DoubleData(falsePositiveRate));
     100        row.Add(new DoubleData(truePositiveRate));
     101        rocValues.Add(row);
     102      }
     103
     104      //ROC ends at 1,1
     105      row = new ItemList();
     106      row.Add(new DoubleData(1));
     107      row.Add(new DoubleData(1));
     108      rocValues.Add(row);
    60109
    61110      return null;
Note: See TracChangeset for help on using the changeset viewer.