Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 8297)
@@ -28,5 +28,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis.Interfaces.Classification;
+using HeuristicLab.Problems.DataAnalysis.Interfaces;
 
 namespace HeuristicLab.Problems.DataAnalysis {
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdCalculator.cs	(revision 8297)
@@ -66,4 +66,25 @@
         return double.NaN;
       double avg = values.Average();
+      return GetAverageConfidence(avg, estimatedClassValue);
+    }
+
+    public override IEnumerable<double> GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      if (!classValues.Count().Equals(2))
+        return Enumerable.Repeat(double.NaN, indices.Count());
+
+      Dataset dataset = solutions.First().ProblemData.Dataset;
+      double[][] values = solutions.Select(s => s.Model.GetEstimatedValues(dataset, indices).ToArray()).ToArray();
+      double[] confidences = new double[indices.Count()];
+      double[] estimatedClassValueArr = estimatedClassValue.ToArray();
+
+      for (int i = 0; i < indices.Count(); i++) {
+        double avg = values.Select(x => x[i]).Average();
+        confidences[i] = GetAverageConfidence(avg, estimatedClassValueArr[i]);
+      }
+
+      return confidences;
+    }
+
+    protected double GetAverageConfidence(double avg, double estimatedClassValue) {
       if (estimatedClassValue.Equals(classValues[0])) {
         if (avg < estimatedClassValue)
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/ClassificationWeightCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/ClassificationWeightCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/ClassificationWeightCalculator.cs	(revision 8297)
@@ -26,5 +26,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis.Interfaces.Classification;
+using HeuristicLab.Problems.DataAnalysis.Interfaces;
 
 namespace HeuristicLab.Problems.DataAnalysis {
@@ -124,4 +124,22 @@
     }
 
+    public virtual IEnumerable<double> GetConfidence(IEnumerable<IClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      if (solutions.Count() < 1)
+        return Enumerable.Repeat(double.NaN, indices.Count());
+
+      Dataset dataset = solutions.First().ProblemData.Dataset;
+      Dictionary<IClassificationSolution, double[]> solValues = solutions.ToDictionary(x => x, x => x.Model.GetEstimatedClassValues(dataset, indices).ToArray());
+      double[] estimatedClassValueArr = estimatedClassValue.ToArray();
+      double[] confidences = new double[indices.Count()];
+
+      for (int i = 0; i < indices.Count(); i++) {
+        var correctSolutions = solValues.Where(x => DoubleExtensions.IsAlmost(x.Value[i], estimatedClassValueArr[i]));
+        confidences[i] = (from sol in correctSolutions
+                          select weights[sol.Key]).Sum();
+      }
+
+      return confidences;
+    }
+
     #region Helper
     protected IEnumerable<double> GetValues(IList<double> targetValues, IEnumerable<int> indizes) {
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/DiscriminantClassificationWeightCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/DiscriminantClassificationWeightCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/DiscriminantClassificationWeightCalculator.cs	(revision 8297)
@@ -24,5 +24,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis.Interfaces.Classification;
+using HeuristicLab.Problems.DataAnalysis.Interfaces;
 
 namespace HeuristicLab.Problems.DataAnalysis {
@@ -95,4 +95,17 @@
       return base.GetConfidence(solutions, index, estimatedClassValue);
     }
+
+    public sealed override IEnumerable<double> GetConfidence(IEnumerable<IClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      if (solutions.Count() < 1 || !solutions.All(x => x is IDiscriminantFunctionClassificationSolution))
+        return Enumerable.Repeat(double.NaN, indices.Count());
+
+      IEnumerable<IDiscriminantFunctionClassificationSolution> discriminantSolutions = solutions.Cast<IDiscriminantFunctionClassificationSolution>();
+
+      return GetDiscriminantConfidence(discriminantSolutions, indices, estimatedClassValue);
+    }
+
+    public virtual IEnumerable<double> GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      return base.GetConfidence(solutions, indices, estimatedClassValue);
+    }
   }
 }
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MajorityVoteWeightCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MajorityVoteWeightCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MajorityVoteWeightCalculator.cs	(revision 8297)
@@ -61,4 +61,21 @@
       return ((double)correctEstimated / (double)solutions.Count() - 0.5) * 2;
     }
+
+    public override IEnumerable<double> GetConfidence(IEnumerable<IClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      if (solutions.Count() < 1)
+        return Enumerable.Repeat(double.NaN, indices.Count());
+      Dataset dataset = solutions.First().ProblemData.Dataset;
+      var estimationsPerSolution = solutions.Select(s => s.Model.GetEstimatedClassValues(dataset, indices).ToArray()).ToArray();
+      double[] estimatedClassValueArr = estimatedClassValue.ToArray();
+      double correctEstimated;
+      double[] confidences = new double[indices.Count()];
+
+      for (int i = 0; i < indices.Count(); i++) {
+        correctEstimated = estimationsPerSolution.Where(x => DoubleExtensions.IsAlmost(x[i], estimatedClassValueArr[i])).Count();
+        confidences[i] = (correctEstimated / (double)solutions.Count() - 0.5) * 2;
+      }
+
+      return confidences;
+    }
   }
 }
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs	(revision 8297)
@@ -66,4 +66,25 @@
         return double.NaN;
       double median = GetMedian(values);
+      return GetMedianConfidence(median, estimatedClassValue);
+    }
+
+    public override IEnumerable<double> GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue) {
+      if (!classValues.Count().Equals(2))
+        return Enumerable.Repeat(double.NaN, indices.Count());
+
+      Dataset dataset = solutions.First().ProblemData.Dataset;
+      double[][] values = solutions.Select(s => s.Model.GetEstimatedValues(dataset, indices).ToArray()).ToArray();
+      double[] confidences = new double[indices.Count()];
+      double[] estimatedClassValueArr = estimatedClassValue.ToArray();
+
+      for (int i = 0; i < indices.Count(); i++) {
+        double avg = values.Select(x => x[i]).Average();
+        confidences[i] = GetMedianConfidence(avg, estimatedClassValueArr[i]);
+      }
+
+      return confidences;
+    }
+
+    protected double GetMedianConfidence(double median, double estimatedClassValue) {
       if (estimatedClassValue.Equals(classValues[0])) {
         if (median < estimatedClassValue)
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolutionWeightCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolutionWeightCalculator.cs	(revision 8177)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolutionWeightCalculator.cs	(revision 8297)
@@ -23,5 +23,5 @@
 using HeuristicLab.Core;
 
-namespace HeuristicLab.Problems.DataAnalysis.Interfaces.Classification {
+namespace HeuristicLab.Problems.DataAnalysis.Interfaces {
   public delegate bool CheckPoint(IClassificationProblemData problemData, int point);
 
@@ -30,4 +30,5 @@
     IEnumerable<double> AggregateEstimatedClassValues(IEnumerable<IClassificationSolution> solutions, Dataset dataset, IEnumerable<int> rows, CheckPoint handler);
     double GetConfidence(IEnumerable<IClassificationSolution> solutions, int index, double estimatedClassValue);
+    IEnumerable<double> GetConfidence(IEnumerable<IClassificationSolution> solutions, IEnumerable<int> indices, IEnumerable<double> estimatedClassValue);
 
     CheckPoint GetTestClassDelegate();
