Changeset 7562 for branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs
- Timestamp:
- 03/06/12 15:08:13 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs
r7549 r7562 20 20 #endregion 21 21 22 using System.Collections; 22 23 using System.Collections.Generic; 23 24 using System.Linq; … … 84 85 } 85 86 AccuracyMaximizationThresholdCalculator.CalculateThresholds(solutionProblemData[0], median, targetValues, out classValues, out threshold); 86 return median;87 return Enumerable.Repeat<double>(1, discriminantSolutions.Count()); 87 88 } 88 89 89 90 protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IClassificationSolution, double> estimatedValues) { 90 double classValue = classValues.First();91 91 IList<double> values = estimatedValues.Select(x => x.Value).ToList(); 92 92 if (values.Count <= 0) 93 93 return double.NaN; 94 94 double median = GetMedian(values); 95 return GetClassValueToMedian(median); 96 } 97 private double GetClassValueToMedian(double median) { 98 double classValue = classValues.First(); 95 99 for (int i = 0; i < classValues.Count(); i++) { 96 100 if (median > threshold[i]) … … 100 104 } 101 105 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; 102 137 } 103 138
Note: See TracChangeset
for help on using the changeset viewer.