Example 1: MultiClassification

This example trains a 3-layer network using Fisher's Iris data with four continuous input attributes and three output classifications. This is perhaps the best known database to be found in the pattern recognition literature. Fisher's paper is a classic in the field. The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant.

The structure of the network consists of four input nodes and three layers, with four perceptrons in the first hidden layer, three perceptrons in the second hidden layer and three in the output layer.

The four input attributes represent

  1. Sepal length
  2. Sepal width
  3. Petal length
  4. Petal width

The output attribute represents the class of the iris plant and are encoded using binary encoding.

  1. Iris Setosa
  2. Iris Versicolour
  3. Iris Virginica

There are a total of 46 weights in this network, including the bias weights. All hidden layers use the logistic activation function. Since the target output is multi-classification the softmax activation function is used in the output layer and the MultiClassification error function class is used by the trainer. The error class MultiClassification combines the cross-entropy error calculations and the softmax function.

using System;
using Imsl.DataMining.Neural;
using PrintMatrix = Imsl.Math.PrintMatrix;
using PrintMatrixFormat = Imsl.Math.PrintMatrixFormat;

//*****************************************************************************
// Three Layer Feed-Forward Network with 4 inputs, all 
// continuous, and 3 classification categories.
//
//  new classification training_ex5.c
//
// This is perhaps the best known database to be found in the pattern
//     recognition literature.  Fisher's paper is a classic in the field.
//     The data set contains 3 classes of 50 instances each,
//     where each class refers to a type of iris plant.  One class is
//     linearly separable from the other 2; the latter are NOT linearly
//     separable from each other.
//
//  Predicted attribute: class of iris plant.
//     1=Iris Setosa, 2=Iris Versicolour, and 3=Iris Virginica
//
//  Input Attributes (4 Continuous Attributes)
//     X1: Sepal length, X2: Sepal width, X3: Petal length, and X4: Petal width
//*****************************************************************************

[Serializable]
public class MultiClassificationEx1
{
   private static int nObs = 150; // number of training patterns
   private static int nInputs = 4; // 9 nominal coded as 0=x, 1=o, 2=blank
   private static int nOutputs = 3; // one continuous output (nClasses=2)

   
   // irisData[]:  The raw data matrix.  This is a 2-D matrix with 150 rows and
   //              5 columns. The first 4 columns are the continuous input
   //              attributes and the 5th column is the classification category
   //              (1-3).  These data contain no categorical input attributes.
   
   private static double[][] irisData = new double[][]{
      new double[]{5.1, 3.5, 1.4, 0.2, 1}, new double[]{4.9, 3.0, 1.4, 0.2, 1},
      new double[]{4.7, 3.2, 1.3, 0.2, 1}, new double[]{4.6, 3.1, 1.5, 0.2, 1},
      new double[]{5.0, 3.6, 1.4, 0.2, 1}, new double[]{5.4, 3.9, 1.7, 0.4, 1},
      new double[]{4.6, 3.4, 1.4, 0.3, 1}, new double[]{5.0, 3.4, 1.5, 0.2, 1},
      new double[]{4.4, 2.9, 1.4, 0.2, 1}, new double[]{4.9, 3.1, 1.5, 0.1, 1},
      new double[]{5.4, 3.7, 1.5, 0.2, 1}, new double[]{4.8, 3.4, 1.6, 0.2, 1},
      new double[]{4.8, 3.0, 1.4, 0.1, 1}, new double[]{4.3, 3.0, 1.1, 0.1, 1},
      new double[]{5.8, 4.0, 1.2, 0.2, 1}, new double[]{5.7, 4.4, 1.5, 0.4, 1},
      new double[]{5.4, 3.9, 1.3, 0.4, 1}, new double[]{5.1, 3.5, 1.4, 0.3, 1},
      new double[]{5.7, 3.8, 1.7, 0.3, 1}, new double[]{5.1, 3.8, 1.5, 0.3, 1},
      new double[]{5.4, 3.4, 1.7, 0.2, 1}, new double[]{5.1, 3.7, 1.5, 0.4, 1},
      new double[]{4.6, 3.6, 1.0, 0.2, 1}, new double[]{5.1, 3.3, 1.7, 0.5, 1},
      new double[]{4.8, 3.4, 1.9, 0.2, 1}, new double[]{5.0, 3.0, 1.6, 0.2, 1},
      new double[]{5.0, 3.4, 1.6, 0.4, 1}, new double[]{5.2, 3.5, 1.5, 0.2, 1},
      new double[]{5.2, 3.4, 1.4, 0.2, 1}, new double[]{4.7, 3.2, 1.6, 0.2, 1},
      new double[]{4.8, 3.1, 1.6, 0.2, 1}, new double[]{5.4, 3.4, 1.5, 0.4, 1},
      new double[]{5.2, 4.1, 1.5, 0.1, 1}, new double[]{5.5, 4.2, 1.4, 0.2, 1},
      new double[]{4.9, 3.1, 1.5, 0.1, 1}, new double[]{5.0, 3.2, 1.2, 0.2, 1},
      new double[]{5.5, 3.5, 1.3, 0.2, 1}, new double[]{4.9, 3.1, 1.5, 0.1, 1},
      new double[]{4.4, 3.0, 1.3, 0.2, 1}, new double[]{5.1, 3.4, 1.5, 0.2, 1},
      new double[]{5.0, 3.5, 1.3, 0.3, 1}, new double[]{4.5, 2.3, 1.3, 0.3, 1},
      new double[]{4.4, 3.2, 1.3, 0.2, 1}, new double[]{5.0, 3.5, 1.6, 0.6, 1},
      new double[]{5.1, 3.8, 1.9, 0.4, 1}, new double[]{4.8, 3.0, 1.4, 0.3, 1},
      new double[]{5.1, 3.8, 1.6, 0.2, 1}, new double[]{4.6, 3.2, 1.4, 0.2, 1},
      new double[]{5.3, 3.7, 1.5, 0.2, 1}, new double[]{5.0, 3.3, 1.4, 0.2, 1},
      new double[]{7.0, 3.2, 4.7, 1.4, 2}, new double[]{6.4, 3.2, 4.5, 1.5, 2},
      new double[]{6.9, 3.1, 4.9, 1.5, 2}, new double[]{5.5, 2.3, 4.0, 1.3, 2},
      new double[]{6.5, 2.8, 4.6, 1.5, 2}, new double[]{5.7, 2.8, 4.5, 1.3, 2},
      new double[]{6.3, 3.3, 4.7, 1.6, 2}, new double[]{4.9, 2.4, 3.3, 1.0, 2},
      new double[]{6.6, 2.9, 4.6, 1.3, 2}, new double[]{5.2, 2.7, 3.9, 1.4, 2},
      new double[]{5.0, 2.0, 3.5, 1.0, 2}, new double[]{5.9, 3.0, 4.2, 1.5, 2},
      new double[]{6.0, 2.2, 4.0, 1.0, 2}, new double[]{6.1, 2.9, 4.7, 1.4, 2},
      new double[]{5.6, 2.9, 3.6, 1.3, 2}, new double[]{6.7, 3.1, 4.4, 1.4, 2},
      new double[]{5.6, 3.0, 4.5, 1.5, 2}, new double[]{5.8, 2.7, 4.1, 1.0, 2},
      new double[]{6.2, 2.2, 4.5, 1.5, 2}, new double[]{5.6, 2.5, 3.9, 1.1, 2},
      new double[]{5.9, 3.2, 4.8, 1.8, 2}, new double[]{6.1, 2.8, 4.0, 1.3, 2},
      new double[]{6.3, 2.5, 4.9, 1.5, 2}, new double[]{6.1, 2.8, 4.7, 1.2, 2},
      new double[]{6.4, 2.9, 4.3, 1.3, 2}, new double[]{6.6, 3.0, 4.4, 1.4, 2},
      new double[]{6.8, 2.8, 4.8, 1.4, 2}, new double[]{6.7, 3.0, 5.0, 1.7, 2},
      new double[]{6.0, 2.9, 4.5, 1.5, 2}, new double[]{5.7, 2.6, 3.5, 1.0, 2},
      new double[]{5.5, 2.4, 3.8, 1.1, 2}, new double[]{5.5, 2.4, 3.7, 1.0, 2},
      new double[]{5.8, 2.7, 3.9, 1.2, 2}, new double[]{6.0, 2.7, 5.1, 1.6, 2},
      new double[]{5.4, 3.0, 4.5, 1.5, 2}, new double[]{6.0, 3.4, 4.5, 1.6, 2},
      new double[]{6.7, 3.1, 4.7, 1.5, 2}, new double[]{6.3, 2.3, 4.4, 1.3, 2},
      new double[]{5.6, 3.0, 4.1, 1.3, 2}, new double[]{5.5, 2.5, 4.0, 1.3, 2},
      new double[]{5.5, 2.6, 4.4, 1.2, 2}, new double[]{6.1, 3.0, 4.6, 1.4, 2},
      new double[]{5.8, 2.6, 4.0, 1.2, 2}, new double[]{5.0, 2.3, 3.3, 1.0, 2},
      new double[]{5.6, 2.7, 4.2, 1.3, 2}, new double[]{5.7, 3.0, 4.2, 1.2, 2},
      new double[]{5.7, 2.9, 4.2, 1.3, 2}, new double[]{6.2, 2.9, 4.3, 1.3, 2},
      new double[]{5.1, 2.5, 3.0, 1.1, 2}, new double[]{5.7, 2.8, 4.1, 1.3, 2},
      new double[]{6.3, 3.3, 6.0, 2.5, 3}, new double[]{5.8, 2.7, 5.1, 1.9, 3},
      new double[]{7.1, 3.0, 5.9, 2.1, 3}, new double[]{6.3, 2.9, 5.6, 1.8, 3},
      new double[]{6.5, 3.0, 5.8, 2.2, 3}, new double[]{7.6, 3.0, 6.6, 2.1, 3},
      new double[]{4.9, 2.5, 4.5, 1.7, 3}, new double[]{7.3, 2.9, 6.3, 1.8, 3},
      new double[]{6.7, 2.5, 5.8, 1.8, 3}, new double[]{7.2, 3.6, 6.1, 2.5, 3},
      new double[]{6.5, 3.2, 5.1, 2.0, 3}, new double[]{6.4, 2.7, 5.3, 1.9, 3},
      new double[]{6.8, 3.0, 5.5, 2.1, 3}, new double[]{5.7, 2.5, 5.0, 2.0, 3},
      new double[]{5.8, 2.8, 5.1, 2.4, 3}, new double[]{6.4, 3.2, 5.3, 2.3, 3},
      new double[]{6.5, 3.0, 5.5, 1.8, 3}, new double[]{7.7, 3.8, 6.7, 2.2, 3},
      new double[]{7.7, 2.6, 6.9, 2.3, 3}, new double[]{6.0, 2.2, 5.0, 1.5, 3},
      new double[]{6.9, 3.2, 5.7, 2.3, 3}, new double[]{5.6, 2.8, 4.9, 2.0, 3},
      new double[]{7.7, 2.8, 6.7, 2.0, 3}, new double[]{6.3, 2.7, 4.9, 1.8, 3},
      new double[]{6.7, 3.3, 5.7, 2.1, 3}, new double[]{7.2, 3.2, 6.0, 1.8, 3},
      new double[]{6.2, 2.8, 4.8, 1.8, 3}, new double[]{6.1, 3.0, 4.9, 1.8, 3},
      new double[]{6.4, 2.8, 5.6, 2.1, 3}, new double[]{7.2, 3.0, 5.8, 1.6, 3},
      new double[]{7.4, 2.8, 6.1, 1.9, 3}, new double[]{7.9, 3.8, 6.4, 2.0, 3},
      new double[]{6.4, 2.8, 5.6, 2.2, 3}, new double[]{6.3, 2.8, 5.1, 1.5, 3},
      new double[]{6.1, 2.6, 5.6, 1.4, 3}, new double[]{7.7, 3.0, 6.1, 2.3, 3},
      new double[]{6.3, 3.4, 5.6, 2.4, 3}, new double[]{6.4, 3.1, 5.5, 1.8, 3},
      new double[]{6.0, 3.0, 4.8, 1.8, 3}, new double[]{6.9, 3.1, 5.4, 2.1, 3},
      new double[]{6.7, 3.1, 5.6, 2.4, 3}, new double[]{6.9, 3.1, 5.1, 2.3, 3},
      new double[]{5.8, 2.7, 5.1, 1.9, 3}, new double[]{6.8, 3.2, 5.9, 2.3, 3},
      new double[]{6.7, 3.3, 5.7, 2.5, 3}, new double[]{6.7, 3.0, 5.2, 2.3, 3},
      new double[]{6.3, 2.5, 5.0, 1.9, 3}, new double[]{6.5, 3.0, 5.2, 2.0, 3},
      new double[]{6.2, 3.4, 5.4, 2.3, 3}, new double[]{5.9, 3.0, 5.1, 1.8, 3}};


   public static void  Main(System.String[] args)
   {
      double[,] xData = new double[nObs,nInputs];

      int[] yData = new int[nObs];
      
      for (int i = 0; i < nObs; i++)
      {
         for (int j = 0; j < nInputs; j++)
         {
            xData[i,j] = irisData[i][j];
         }
         yData[i] = (int) irisData[i][4];
      }
      
      // Create network
      FeedForwardNetwork network = new FeedForwardNetwork();
      network.InputLayer.CreateInputs(nInputs);
      network.CreateHiddenLayer().CreatePerceptrons(4,
         Imsl.DataMining.Neural.Activation.Logistic, 0.0);
      network.CreateHiddenLayer().CreatePerceptrons(3,
         Imsl.DataMining.Neural.Activation.Logistic, 0.0);
      network.OutputLayer.CreatePerceptrons(nOutputs,
         Imsl.DataMining.Neural.Activation.Softmax, 0.0);
      network.LinkAll();
      
      MultiClassification classification = new MultiClassification(network);
      
      // Create trainer
      QuasiNewtonTrainer trainer = new QuasiNewtonTrainer();
      trainer.SetError(classification.Error);
      trainer.MaximumTrainingIterations = 1000;
      
      // Train Network
      long t0 = (System.DateTime.Now.Ticks - 621355968000000000) / 10000;
      classification.Train(trainer, xData, yData);
      
      // Display Network Errors
      double[] stats = classification.ComputeStatistics(xData, yData);
      System.Console.Out.WriteLine(
         "***********************************************");
      System.Console.Out.WriteLine(
         "--> Cross-entropy error:        " + (float) stats[0]);
      System.Console.Out.WriteLine(
         "--> Classification error rate:  " + (float) stats[1]);
      System.Console.Out.WriteLine(
         "***********************************************");
      System.Console.Out.WriteLine("");
      
      double[] weight = network.Weights;
      double[] gradient = trainer.ErrorGradient;
      double[][] wg = new double[weight.Length][];
      for (int i2 = 0; i2 < weight.Length; i2++)
      {
         wg[i2] = new double[2];
      }
      for (int i = 0; i < weight.Length; i++)
      {
         wg[i][0] = weight[i];
         wg[i][1] = gradient[i];
      }
      PrintMatrixFormat pmf = new PrintMatrixFormat();
      pmf.SetColumnLabels(new System.String[]{"Weights", "Gradients"});
      new PrintMatrix().Print(pmf, wg);
      
      double[][] report = new double[nObs][];
      for (int i3 = 0; i3 < nObs; i3++)
      {
         report[i3] = new double[nInputs + 2];
      }
      for (int i = 0; i < nObs; i++)
      {
         for (int j = 0; j < nInputs; j++)
         {
            report[i][j] = xData[i,j];
         }
         report[i][nInputs] = irisData[i][4];
            double[] xTmp = new double[xData.GetLength(1)];
            for (int j=0; j<xData.GetLength(1); j++)
                xTmp[j] = xData[i,j];
         report[i][nInputs + 1] = classification.PredictedClass(xTmp);
      }
      pmf = new PrintMatrixFormat();
      pmf.SetColumnLabels( new System.String[]{"Sepal Length", "Sepal Width",
         "Petal Length", "Petal Width", "Expected", "Predicted"});
      new PrintMatrix("Forecast").Print(pmf, report);
      
      
      // **********************************************************************
      // DISPLAY CLASSIFICATION STATISTICS
      // **********************************************************************
      double[] statsClass = classification.ComputeStatistics(xData, yData);
      // Display Network Errors
      System.Console.Out.WriteLine(
         "***********************************************");
      System.Console.Out.WriteLine("--> Cross-Entropy Error:      " +
         (float)statsClass[0]);
      System.Console.Out.WriteLine("--> Classification Error:     " +
         (float)statsClass[1]);
      System.Console.Out.WriteLine(
         "***********************************************");
      System.Console.Out.WriteLine("");
      long t1 = (System.DateTime.Now.Ticks - 621355968000000000) / 10000;
      double time = t1 - t0; 
      time = time / 1000;
      System.Console.Out.WriteLine("****************Time:  " + time);
      
      System.Console.Out.WriteLine("Cross-Entropy Error Value = " +
         trainer.ErrorValue);
   }
}

Output

***********************************************
--> Cross-entropy error:        5.922989
--> Classification error rate:  0.01333333
***********************************************

           Weights                Gradients         
 0    -362.135397018074      0                      
 1    -560.715494616693      0                      
 2     527.72406779352       2.08315681881952E-198  
 3      -0.195010974908058   0.0264624672168392     
 4    -685.159411754574      0                      
 5    -803.111185471252      0                      
 6    -195.048774132049      9.50211882268555E-199  
 7      -0.649536948895873   0.0122051719495706     
 8    1271.3576681191        0                      
 9     495.146969161579      0                      
10    -599.774609230401      1.2791313799769E-198   
11       0.807201787624182   0.0211017819573165     
12    1143.16439557087       0                      
13     950.665441902952      0                      
14    -501.328120816785      3.65466108564829E-199  
15       1.82418587547183    0.0071872906296363     
16     188.142460610324      0.606686791122197      
17      99.9378596561514     4.43416403183572E-05   
18      48.0430167242241     0                      
19     103.388473027949      0                      
20     -28.0558983107429     0                      
21    -122.247432161144      0                      
22     674.932369179828      5.41468289698623E-202  
23     295.103891118948      3.9419889529911E-206   
24    -885.621857738157      0                      
25      31.424095865498      0.000136908693839501   
26     -11.7156988030889     9.32263272488116E-09   
27     250.928447008145      0                      
28   -9490.85347121632       0                      
29    1392.60893930402      -0.000263660213410609   
30    8099.24453182847       0.000263660213411595   
31   -9687.90452156921       0                      
32    2423.00583945991      -0.000401325677808519   
33    7265.89868208763       0.000401325677809067   
34   -9908.74662211761       0                      
35    3132.8896497266       -0.00040133483404004    
36    6776.85697236237       0.000401334834041256   
37    -251.58662719581       0                      
38    -395.299386555686      0                      
39    -361.151672607701      3.65466108564829E-199  
40     -12.3192632922507     0.00431460331538189    
41    -187.499672307873      0.606686791122197      
42     -89.2472537574958     4.43416403183572E-05   
43      34.2625870237822     0                      
44   22537.1579103508        0                      
45   -4821.83723997329      -0.00040133483404004    
46  -17715.3206704603        0.000401334834041256   

                                    Forecast
     Sepal Length  Sepal Width  Petal Length  Petal Width  Expected  Predicted  
  0      5.1           3.5          1.4           0.2         1          1      
  1      4.9           3            1.4           0.2         1          1      
  2      4.7           3.2          1.3           0.2         1          1      
  3      4.6           3.1          1.5           0.2         1          1      
  4      5             3.6          1.4           0.2         1          1      
  5      5.4           3.9          1.7           0.4         1          1      
  6      4.6           3.4          1.4           0.3         1          1      
  7      5             3.4          1.5           0.2         1          1      
  8      4.4           2.9          1.4           0.2         1          1      
  9      4.9           3.1          1.5           0.1         1          1      
 10      5.4           3.7          1.5           0.2         1          1      
 11      4.8           3.4          1.6           0.2         1          1      
 12      4.8           3            1.4           0.1         1          1      
 13      4.3           3            1.1           0.1         1          1      
 14      5.8           4            1.2           0.2         1          1      
 15      5.7           4.4          1.5           0.4         1          1      
 16      5.4           3.9          1.3           0.4         1          1      
 17      5.1           3.5          1.4           0.3         1          1      
 18      5.7           3.8          1.7           0.3         1          1      
 19      5.1           3.8          1.5           0.3         1          1      
 20      5.4           3.4          1.7           0.2         1          1      
 21      5.1           3.7          1.5           0.4         1          1      
 22      4.6           3.6          1             0.2         1          1      
 23      5.1           3.3          1.7           0.5         1          1      
 24      4.8           3.4          1.9           0.2         1          1      
 25      5             3            1.6           0.2         1          1      
 26      5             3.4          1.6           0.4         1          1      
 27      5.2           3.5          1.5           0.2         1          1      
 28      5.2           3.4          1.4           0.2         1          1      
 29      4.7           3.2          1.6           0.2         1          1      
 30      4.8           3.1          1.6           0.2         1          1      
 31      5.4           3.4          1.5           0.4         1          1      
 32      5.2           4.1          1.5           0.1         1          1      
 33      5.5           4.2          1.4           0.2         1          1      
 34      4.9           3.1          1.5           0.1         1          1      
 35      5             3.2          1.2           0.2         1          1      
 36      5.5           3.5          1.3           0.2         1          1      
 37      4.9           3.1          1.5           0.1         1          1      
 38      4.4           3            1.3           0.2         1          1      
 39      5.1           3.4          1.5           0.2         1          1      
 40      5             3.5          1.3           0.3         1          1      
 41      4.5           2.3          1.3           0.3         1          1      
 42      4.4           3.2          1.3           0.2         1          1      
 43      5             3.5          1.6           0.6         1          1      
 44      5.1           3.8          1.9           0.4         1          1      
 45      4.8           3            1.4           0.3         1          1      
 46      5.1           3.8          1.6           0.2         1          1      
 47      4.6           3.2          1.4           0.2         1          1      
 48      5.3           3.7          1.5           0.2         1          1      
 49      5             3.3          1.4           0.2         1          1      
 50      7             3.2          4.7           1.4         2          2      
 51      6.4           3.2          4.5           1.5         2          2      
 52      6.9           3.1          4.9           1.5         2          2      
 53      5.5           2.3          4             1.3         2          2      
 54      6.5           2.8          4.6           1.5         2          2      
 55      5.7           2.8          4.5           1.3         2          2      
 56      6.3           3.3          4.7           1.6         2          2      
 57      4.9           2.4          3.3           1           2          2      
 58      6.6           2.9          4.6           1.3         2          2      
 59      5.2           2.7          3.9           1.4         2          2      
 60      5             2            3.5           1           2          2      
 61      5.9           3            4.2           1.5         2          2      
 62      6             2.2          4             1           2          2      
 63      6.1           2.9          4.7           1.4         2          2      
 64      5.6           2.9          3.6           1.3         2          2      
 65      6.7           3.1          4.4           1.4         2          2      
 66      5.6           3            4.5           1.5         2          2      
 67      5.8           2.7          4.1           1           2          2      
 68      6.2           2.2          4.5           1.5         2          2      
 69      5.6           2.5          3.9           1.1         2          2      
 70      5.9           3.2          4.8           1.8         2          2      
 71      6.1           2.8          4             1.3         2          2      
 72      6.3           2.5          4.9           1.5         2          2      
 73      6.1           2.8          4.7           1.2         2          2      
 74      6.4           2.9          4.3           1.3         2          2      
 75      6.6           3            4.4           1.4         2          2      
 76      6.8           2.8          4.8           1.4         2          2      
 77      6.7           3            5             1.7         2          2      
 78      6             2.9          4.5           1.5         2          2      
 79      5.7           2.6          3.5           1           2          2      
 80      5.5           2.4          3.8           1.1         2          2      
 81      5.5           2.4          3.7           1           2          2      
 82      5.8           2.7          3.9           1.2         2          2      
 83      6             2.7          5.1           1.6         2          3      
 84      5.4           3            4.5           1.5         2          2      
 85      6             3.4          4.5           1.6         2          2      
 86      6.7           3.1          4.7           1.5         2          2      
 87      6.3           2.3          4.4           1.3         2          2      
 88      5.6           3            4.1           1.3         2          2      
 89      5.5           2.5          4             1.3         2          2      
 90      5.5           2.6          4.4           1.2         2          2      
 91      6.1           3            4.6           1.4         2          2      
 92      5.8           2.6          4             1.2         2          2      
 93      5             2.3          3.3           1           2          2      
 94      5.6           2.7          4.2           1.3         2          2      
 95      5.7           3            4.2           1.2         2          2      
 96      5.7           2.9          4.2           1.3         2          2      
 97      6.2           2.9          4.3           1.3         2          2      
 98      5.1           2.5          3             1.1         2          2      
 99      5.7           2.8          4.1           1.3         2          2      
100      6.3           3.3          6             2.5         3          3      
101      5.8           2.7          5.1           1.9         3          3      
102      7.1           3            5.9           2.1         3          3      
103      6.3           2.9          5.6           1.8         3          3      
104      6.5           3            5.8           2.2         3          3      
105      7.6           3            6.6           2.1         3          3      
106      4.9           2.5          4.5           1.7         3          3      
107      7.3           2.9          6.3           1.8         3          3      
108      6.7           2.5          5.8           1.8         3          3      
109      7.2           3.6          6.1           2.5         3          3      
110      6.5           3.2          5.1           2           3          3      
111      6.4           2.7          5.3           1.9         3          3      
112      6.8           3            5.5           2.1         3          3      
113      5.7           2.5          5             2           3          3      
114      5.8           2.8          5.1           2.4         3          3      
115      6.4           3.2          5.3           2.3         3          3      
116      6.5           3            5.5           1.8         3          3      
117      7.7           3.8          6.7           2.2         3          3      
118      7.7           2.6          6.9           2.3         3          3      
119      6             2.2          5             1.5         3          3      
120      6.9           3.2          5.7           2.3         3          3      
121      5.6           2.8          4.9           2           3          3      
122      7.7           2.8          6.7           2           3          3      
123      6.3           2.7          4.9           1.8         3          3      
124      6.7           3.3          5.7           2.1         3          3      
125      7.2           3.2          6             1.8         3          3      
126      6.2           2.8          4.8           1.8         3          3      
127      6.1           3            4.9           1.8         3          3      
128      6.4           2.8          5.6           2.1         3          3      
129      7.2           3            5.8           1.6         3          3      
130      7.4           2.8          6.1           1.9         3          3      
131      7.9           3.8          6.4           2           3          3      
132      6.4           2.8          5.6           2.2         3          3      
133      6.3           2.8          5.1           1.5         3          2      
134      6.1           2.6          5.6           1.4         3          3      
135      7.7           3            6.1           2.3         3          3      
136      6.3           3.4          5.6           2.4         3          3      
137      6.4           3.1          5.5           1.8         3          3      
138      6             3            4.8           1.8         3          3      
139      6.9           3.1          5.4           2.1         3          3      
140      6.7           3.1          5.6           2.4         3          3      
141      6.9           3.1          5.1           2.3         3          3      
142      5.8           2.7          5.1           1.9         3          3      
143      6.8           3.2          5.9           2.3         3          3      
144      6.7           3.3          5.7           2.5         3          3      
145      6.7           3            5.2           2.3         3          3      
146      6.3           2.5          5             1.9         3          3      
147      6.5           3            5.2           2           3          3      
148      6.2           3.4          5.4           2.3         3          3      
149      5.9           3            5.1           1.8         3          3      

***********************************************
--> Cross-Entropy Error:      5.922989
--> Classification Error:     0.01333333
***********************************************

****************Time:  5.719
Cross-Entropy Error Value = 17.7689670987518

Link to C# source.