Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.Designer.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.Designer.cs	(revision 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.Designer.cs	(revision 8101)
@@ -45,26 +45,70 @@
     private void InitializeComponent() {
       this.SamplesComboBox = new System.Windows.Forms.ComboBox();
+      this.CorrectClassifiedConfidenceLabel = new System.Windows.Forms.Label();
+      this.CorrectClassifiedConfidence = new System.Windows.Forms.Label();
+      this.WrongClassifiedConfidenceLabel = new System.Windows.Forms.Label();
+      this.WrongClassifiedConfidence = new System.Windows.Forms.Label();
       this.SuspendLayout();
       // 
       // matrixView
       // 
-      this.matrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.matrixView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.matrixView.Dock = System.Windows.Forms.DockStyle.None;
       this.matrixView.Location = new System.Drawing.Point(3, 31);
-      this.matrixView.Size = new System.Drawing.Size(304, 251);
+      this.matrixView.Size = new System.Drawing.Size(653, 251);
       // 
       // SamplesComboBox
       // 
-      this.SamplesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.SamplesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.SamplesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.SamplesComboBox.FormattingEnabled = true;
       this.SamplesComboBox.Location = new System.Drawing.Point(4, 4);
       this.SamplesComboBox.Name = "SamplesComboBox";
-      this.SamplesComboBox.Size = new System.Drawing.Size(303, 21);
+      this.SamplesComboBox.Size = new System.Drawing.Size(309, 21);
       this.SamplesComboBox.TabIndex = 2;
       this.SamplesComboBox.SelectedIndexChanged += new System.EventHandler(this.SamplesComboBox_SelectedIndexChanged);
+      // 
+      // CorrectClassifiedConfidenceLabel
+      // 
+      this.CorrectClassifiedConfidenceLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.CorrectClassifiedConfidenceLabel.AutoSize = true;
+      this.CorrectClassifiedConfidenceLabel.Location = new System.Drawing.Point(319, 7);
+      this.CorrectClassifiedConfidenceLabel.Name = "CorrectClassifiedConfidenceLabel";
+      this.CorrectClassifiedConfidenceLabel.Size = new System.Drawing.Size(103, 13);
+      this.CorrectClassifiedConfidenceLabel.TabIndex = 3;
+      this.CorrectClassifiedConfidenceLabel.Text = "Conf. Correct Class.:";
+      // 
+      // CorrectClassifiedConfidence
+      // 
+      this.CorrectClassifiedConfidence.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.CorrectClassifiedConfidence.AutoSize = true;
+      this.CorrectClassifiedConfidence.Location = new System.Drawing.Point(428, 7);
+      this.CorrectClassifiedConfidence.Name = "CorrectClassifiedConfidence";
+      this.CorrectClassifiedConfidence.Size = new System.Drawing.Size(22, 13);
+      this.CorrectClassifiedConfidence.TabIndex = 4;
+      this.CorrectClassifiedConfidence.Text = "0.0";
+      // 
+      // WrongClassifiedConfidenceLabel
+      // 
+      this.WrongClassifiedConfidenceLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.WrongClassifiedConfidenceLabel.AutoSize = true;
+      this.WrongClassifiedConfidenceLabel.Location = new System.Drawing.Point(481, 7);
+      this.WrongClassifiedConfidenceLabel.Name = "WrongClassifiedConfidenceLabel";
+      this.WrongClassifiedConfidenceLabel.Size = new System.Drawing.Size(101, 13);
+      this.WrongClassifiedConfidenceLabel.TabIndex = 5;
+      this.WrongClassifiedConfidenceLabel.Text = "Conf. Wrong Class.:";
+      // 
+      // WrongClassifiedConfidence
+      // 
+      this.WrongClassifiedConfidence.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.WrongClassifiedConfidence.AutoSize = true;
+      this.WrongClassifiedConfidence.Location = new System.Drawing.Point(588, 7);
+      this.WrongClassifiedConfidence.Name = "WrongClassifiedConfidence";
+      this.WrongClassifiedConfidence.Size = new System.Drawing.Size(22, 13);
+      this.WrongClassifiedConfidence.TabIndex = 6;
+      this.WrongClassifiedConfidence.Text = "0.0";
       // 
       // ClassificationEnsembleSolutionEstimatedClassValuesView
@@ -72,9 +116,19 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.WrongClassifiedConfidence);
+      this.Controls.Add(this.WrongClassifiedConfidenceLabel);
+      this.Controls.Add(this.CorrectClassifiedConfidence);
+      this.Controls.Add(this.CorrectClassifiedConfidenceLabel);
       this.Controls.Add(this.SamplesComboBox);
       this.Name = "ClassificationEnsembleSolutionEstimatedClassValuesView";
+      this.Size = new System.Drawing.Size(659, 285);
       this.Controls.SetChildIndex(this.matrixView, 0);
       this.Controls.SetChildIndex(this.SamplesComboBox, 0);
+      this.Controls.SetChildIndex(this.CorrectClassifiedConfidenceLabel, 0);
+      this.Controls.SetChildIndex(this.CorrectClassifiedConfidence, 0);
+      this.Controls.SetChildIndex(this.WrongClassifiedConfidenceLabel, 0);
+      this.Controls.SetChildIndex(this.WrongClassifiedConfidence, 0);
       this.ResumeLayout(false);
+      this.PerformLayout();
 
     }
@@ -83,4 +137,8 @@
 
     private System.Windows.Forms.ComboBox SamplesComboBox;
+    private System.Windows.Forms.Label CorrectClassifiedConfidenceLabel;
+    private System.Windows.Forms.Label CorrectClassifiedConfidence;
+    private System.Windows.Forms.Label WrongClassifiedConfidenceLabel;
+    private System.Windows.Forms.Label WrongClassifiedConfidence;
 
   }
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 8101)
@@ -105,4 +105,10 @@
       IClassificationEnsembleSolutionWeightCalculator weightCalc = Content.WeightCalculator;
 
+      // needed to calculate average confidences of correct and wrong estimated classes
+      bool correctClassified;
+      double[] confidence = new double[2];
+      int[] classified = new int[2];
+      double curConfidence;
+
       for (int i = 0; i < indizes.Length; i++) {
         int row = indizes[i];
@@ -112,6 +118,16 @@
         if (solutionsCount > 0) {
           values[i, 2] = estimatedClassValues[i].ToString();
-          values[i, 3] = (target[i].IsAlmost(estimatedClassValues[i])).ToString();
-          values[i, 4] = weightCalc.GetConfidence(solutions, indizes[i], estimatedClassValues[i]).ToString();
+          correctClassified = target[i].IsAlmost(estimatedClassValues[i]);
+          values[i, 3] = correctClassified.ToString();
+          curConfidence = weightCalc.GetConfidence(solutions, indizes[i], estimatedClassValues[i]);
+          if (correctClassified) {
+            confidence[0] += curConfidence;
+            classified[0]++;
+          } else {
+            confidence[1] += curConfidence;
+            classified[1]++;
+          }
+
+          values[i, 4] = curConfidence.ToString();
 
           var groups =
@@ -129,4 +145,7 @@
         }
       }
+
+      CorrectClassifiedConfidence.Text = (confidence[0] / (double)classified[0]).ToString();
+      WrongClassifiedConfidence.Text = (confidence[1] / (double)classified[1]).ToString();
 
       StringMatrix matrix = new StringMatrix(values);
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 8101)
@@ -149,12 +149,9 @@
     <Compile Include="Implementation\Classification\ClassificationSolutionBase.cs" />
     <Compile Include="Implementation\Classification\DiscriminantFunctionClassificationSolutionBase.cs" />
-    <Compile Include="Implementation\Classification\WeightCalculators\AccuracyWeightCalculator.cs" />
     <Compile Include="Implementation\Classification\WeightCalculators\AverageThresholdCalculator.cs" />
-    <Compile Include="Implementation\Classification\WeightCalculators\ContinuousPointCertaintyWeightCalculator.cs" />
+    <Compile Include="Implementation\Classification\WeightCalculators\AverageThresholdClassificationCalculator.cs" />
+    <Compile Include="Implementation\Classification\WeightCalculators\MedianThresholdClassificationCalculator.cs" />
     <Compile Include="Implementation\Classification\WeightCalculators\DiscriminantClassificationWeightCalculator.cs" />
-    <Compile Include="Implementation\Classification\WeightCalculators\MedianPointThresholdCalculator.cs" />
     <Compile Include="Implementation\Classification\WeightCalculators\MedianThresholdCalculator.cs" />
-    <Compile Include="Implementation\Classification\WeightCalculators\NeighbourhoodWeightCalculator.cs" />
-    <Compile Include="Implementation\Classification\WeightCalculators\PointCertaintyWeightCalculator.cs" />
     <Compile Include="Implementation\Classification\WeightCalculators\MajorityVoteWeightCalculator.cs" />
     <Compile Include="Implementation\Classification\WeightCalculators\ClassificationWeightCalculator.cs" />
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 8101)
@@ -56,6 +56,7 @@
         if (value != null) {
           weightCalculator = value;
-          if (!ProblemData.IsEmpty)
+          if (!ProblemData.IsEmpty) {
             RecalculateResults();
+          }
         }
       }
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 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdCalculator.cs	(revision 8101)
@@ -57,22 +57,4 @@
     }
 
-    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IDiscriminantFunctionClassificationSolution, double> estimatedValues) {
-      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
-      if (values.Count <= 0)
-        return double.NaN;
-      double avg = values.Average();
-      return GetClassValueToAverage(avg);
-    }
-    private double GetClassValueToAverage(double avg) {
-      double classValue = classValues.First();
-      for (int i = 0; i < classValues.Count(); i++) {
-        if (avg > threshold[i])
-          classValue = classValues[i];
-        else
-          break;
-      }
-      return classValue;
-    }
-
     protected override double GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, int index, double estimatedClassValue) {
       // only works with binary classification
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdClassificationCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdClassificationCalculator.cs	(revision 8101)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/AverageThresholdClassificationCalculator.cs	(revision 8101)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [StorableClass]
+  [Item("AverageThresholdCalculator", "")]
+  public class AverageThresholdClassificationCalculator : AverageThresholdCalculator {
+
+    public AverageThresholdClassificationCalculator()
+      : base() {
+    }
+    [StorableConstructor]
+    protected AverageThresholdClassificationCalculator(bool deserializing) : base(deserializing) { }
+    protected AverageThresholdClassificationCalculator(AverageThresholdClassificationCalculator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AverageThresholdClassificationCalculator(this, cloner);
+    }
+
+    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IDiscriminantFunctionClassificationSolution, double> estimatedValues) {
+      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
+      if (values.Count <= 0)
+        return double.NaN;
+      double avg = values.Average();
+      return GetClassValueToAverage(avg);
+    }
+    protected double GetClassValueToAverage(double avg) {
+      double classValue = classValues.First();
+      for (int i = 0; i < classValues.Count(); i++) {
+        if (avg > threshold[i])
+          classValue = classValues[i];
+        else
+          break;
+      }
+      return classValue;
+    }
+  }
+}
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 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/DiscriminantClassificationWeightCalculator.cs	(revision 8101)
@@ -66,5 +66,5 @@
 
     protected virtual double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IDiscriminantFunctionClassificationSolution, double> estimatedValues) {
-      return AggregateEstimatedClassValues(estimatedClassValues);
+      return base.AggregateEstimatedClassValues(estimatedClassValues);
     }
 
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 7866)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdCalculator.cs	(revision 8101)
@@ -57,22 +57,4 @@
     }
 
-    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IDiscriminantFunctionClassificationSolution, double> estimatedValues) {
-      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
-      if (values.Count <= 0)
-        return double.NaN;
-      double median = GetMedian(values);
-      return GetClassValueToMedian(median);
-    }
-    private double GetClassValueToMedian(double median) {
-      double classValue = classValues.First();
-      for (int i = 0; i < classValues.Count(); i++) {
-        if (median > threshold[i])
-          classValue = classValues[i];
-        else
-          break;
-      }
-      return classValue;
-    }
-
     protected override double GetDiscriminantConfidence(IEnumerable<IDiscriminantFunctionClassificationSolution> solutions, int index, double estimatedClassValue) {
       // only works with binary classification
@@ -106,5 +88,5 @@
     }
 
-    private double GetMedian(IList<double> estimatedValues) {
+    protected double GetMedian(IList<double> estimatedValues) {
       int count = estimatedValues.Count;
       if (count % 2 == 0)
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdClassificationCalculator.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdClassificationCalculator.cs	(revision 8101)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/WeightCalculators/MedianThresholdClassificationCalculator.cs	(revision 8101)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  [StorableClass]
+  [Item("MedianThresholdClassificationCalculator", "")]
+  public class MedianThresholdClassificationCalculator : MedianThresholdCalculator {
+
+    public MedianThresholdClassificationCalculator()
+      : base() {
+    }
+    [StorableConstructor]
+    protected MedianThresholdClassificationCalculator(bool deserializing) : base(deserializing) { }
+    protected MedianThresholdClassificationCalculator(MedianThresholdClassificationCalculator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MedianThresholdClassificationCalculator(this, cloner);
+    }
+
+    protected override double DiscriminantAggregateEstimatedClassValues(IDictionary<IClassificationSolution, double> estimatedClassValues, IDictionary<IDiscriminantFunctionClassificationSolution, double> estimatedValues) {
+      IList<double> values = estimatedValues.Select(x => x.Value).ToList();
+      if (values.Count <= 0)
+        return double.NaN;
+      double median = GetMedian(values);
+      return GetClassValueToMedian(median);
+    }
+    private double GetClassValueToMedian(double median) {
+      double classValue = classValues.First();
+      for (int i = 0; i < classValues.Count(); i++) {
+        if (median > threshold[i])
+          classValue = classValues[i];
+        else
+          break;
+      }
+      return classValue;
+    }
+  }
+}
