Advertisement
Guest User

Untitled

a guest
Jul 10th, 2014
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.31 KB | None | 0 0
  1.  public class CrossValidation
  2.     {
  3.         MulticlassSupportVectorMachine classifier;
  4.         //numeroDimensiones: integer value, 95 as the number of principal components
  5.         //numeroClases: integer value, 10, as the number of classes in the database [0-9]
  6.         public CrossValidation(double[][] inputs, int[] outputs, out CrossValidationStatistics trainingErrors, out CrossValidationStatistics validationErrors, string path)
  7.         {
  8.             var crossvalidation = new CrossValidation<MulticlassSupportVectorMachine>(size: inputs.Length, folds: 10);
  9.             crossvalidation.Fitting = delegate(int index, int []indicesTrain, int [] indicesValidation)
  10.             {
  11.                 double trainingError = 0, validationError = 0;
  12.  
  13.                 // Lets now grab the training data:
  14.                 double[][] trainingInputs = inputs.Submatrix(indicesTrain);
  15.                 int[] trainingOutputs = outputs.Submatrix(indicesTrain);
  16.  
  17.                 // And now the validation data:
  18.                 double[][] validationInputs = inputs.Submatrix(indicesValidation);
  19.                 int[] validationOutputs = outputs.Submatrix(indicesValidation);
  20.  
  21.                 // Create a new kernel
  22.                 //IKernel kernel = Gaussian.Estimate(trainingInputs);
  23.                 IKernel kernel = new Linear();
  24.                 // Complexity
  25.                 //var complexity = SequentialMinimalOptimization.EstimateComplexity(kernel, trainingInputs);
  26.  
  27.                 // Create a new Multi-class Support Vector Machine
  28.                 var model = new MulticlassSupportVectorMachine(trainingInputs[0].Length, kernel, inputs.Distinct().Length);
  29.  
  30.                 // Create the Multi-class learning algorithm for the machine
  31.                 var teacher = new MulticlassSupportVectorLearning(model, trainingInputs, trainingOutputs);
  32.  
  33.                 // Configure the learning algorithm to use SMO to train the
  34.                 // underlying SVMs in each of the binary class subproblems.
  35.                 teacher.Algorithm = (svm, classInputs, classOutputs, i, j) =>
  36.                     new SequentialMinimalOptimization(svm, classInputs, classOutputs) {
  37.                     Tolerance = 0.1,
  38.                     };
  39.  
  40.                 // Run the learning algorithm
  41.                 trainingError = teacher.Run();
  42.  
  43.                 // Get the validation errors
  44.                 validationError = teacher.ComputeError(validationInputs, validationOutputs);
  45.  
  46.                 // Return a new information structure containing the model and the errors achieved.
  47.                 return new CrossValidationValues<MulticlassSupportVectorMachine>(model, trainingError, validationError);
  48.             };
  49.  
  50.             // Compute the cross-validation
  51.             var result = crossvalidation.Compute();
  52.             result.Save(path);
  53.  
  54.             // Finally, access the measured performance.
  55.             result.Training.Tag = "Training results";
  56.             result.Validation.Tag = "Validation results";
  57.             trainingErrors = result.Training;
  58.             validationErrors = result.Validation;
  59.  
  60.             var minIndex = result.Validation.Values.Find(v => v == result.Training.Values.Min()).FirstOrDefault();
  61.             var minModelValues = result.Models[minIndex];
  62.             this.classifier = minModelValues.Model;
  63.         }
  64.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement