Index: branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs
===================================================================
--- branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs	(revision 6206)
+++ branches/PersistenceSpeedUp/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs	(revision 6760)
@@ -22,5 +22,4 @@
 using System.Linq;
 using System.Windows.Forms;
-using HeuristicLab.Core.Views;
 using HeuristicLab.Data;
 using HeuristicLab.Data.Views;
@@ -31,16 +30,16 @@
   [View("Estimated Class Values")]
   [Content(typeof(IClassificationSolution))]
-  public partial class ClassificationSolutionEstimatedClassValuesView : ItemView, IClassificationSolutionEvaluationView {
-    private const string TARGETVARIABLE_SERIES_NAME = "TargetVariable";
-    private const string ESTIMATEDVALUES_SERIES_NAME = "EstimatedClassValues";
+  public partial class ClassificationSolutionEstimatedClassValuesView : DataAnalysisSolutionEvaluationView {
+    private const string TARGETVARIABLE_SERIES_NAME = "Target Variable";
+    private const string ESTIMATEDVALUES_SERIES_NAME = "Estimated Class Values (all)";
+    private const string ESTIMATEDVALUES_TRAINING_SERIES_NAME = "Estimated Class Values (training)";
+    private const string ESTIMATEDVALUES_TEST_SERIES_NAME = "Estimated Class Values (test)";
 
     public new IClassificationSolution Content {
       get { return (IClassificationSolution)base.Content; }
-      set {
-        base.Content = value;
-      }
+      set { base.Content = value; }
     }
 
-    private StringConvertibleMatrixView matrixView;
+    protected StringConvertibleMatrixView matrixView;
 
     public ClassificationSolutionEstimatedClassValuesView()
@@ -80,20 +79,35 @@
     }
 
-    private void UpdateEstimatedValues() {
+    protected virtual void UpdateEstimatedValues() {
       if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
       else {
-        DoubleMatrix matrix = null;
+        StringMatrix matrix = null;
         if (Content != null) {
-          double[,] values = new double[Content.ProblemData.Dataset.Rows, 2];
+          string[,] values = new string[Content.ProblemData.Dataset.Rows, 5];
 
-          double[] target = Content.ProblemData.Dataset.GetVariableValues(Content.ProblemData.TargetVariable);
+          double[] target = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable).ToArray();
           double[] estimated = Content.EstimatedClassValues.ToArray();
           for (int row = 0; row < target.Length; row++) {
-            values[row, 0] = target[row];
-            values[row, 1] = estimated[row];
+            values[row, 0] = row.ToString();
+            values[row, 1] = target[row].ToString();
+            values[row, 2] = estimated[row].ToString();
           }
 
-          matrix = new DoubleMatrix(values);
-          matrix.ColumnNames = new string[] { TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME };
+          var estimatedTraining = Content.EstimatedTrainingClassValues.GetEnumerator();
+          estimatedTraining.MoveNext();
+          foreach (var trainingRow in Content.ProblemData.TrainingIndizes) {
+            values[trainingRow, 3] = estimatedTraining.Current.ToString();
+            estimatedTraining.MoveNext();
+          }
+          var estimatedTest = Content.EstimatedTestClassValues.GetEnumerator();
+          estimatedTest.MoveNext();
+          foreach (var testRow in Content.ProblemData.TestIndizes) {
+            values[testRow, 4] = estimatedTest.Current.ToString();
+            estimatedTest.MoveNext();
+          }
+
+          matrix = new StringMatrix(values);
+          matrix.ColumnNames = new string[] { "Id", TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME };
+          matrix.SortableView = true;
         }
         matrixView.Content = matrix;
