Advertisement
Guest User

One Class SVM - Many parameter combinations

a guest
Jul 28th, 2016
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.60 KB | None | 0 0
  1.         private static void Main(string[] args)
  2.         {
  3.             // Test single class SVMs for many parameter combinations.
  4.             double kernelSigma;
  5.             double teacherNu;
  6.             double teacherTolerance;
  7.  
  8.             teacherTolerance = 0.00001;
  9.             while (teacherTolerance < 10) {
  10.  
  11.                 kernelSigma = 0.1;
  12.                 while (kernelSigma < 1) {
  13.  
  14.                     teacherNu = 0.1;
  15.                     while (teacherNu < 1) {
  16.                         TrainAndTest(kernelSigma, teacherNu, teacherTolerance);
  17.  
  18.                         teacherNu += 0.1;
  19.                     }
  20.  
  21.                     kernelSigma += 0.1;
  22.                 }
  23.  
  24.                 teacherTolerance *= 10;
  25.             }
  26.  
  27.             Console.ReadLine();
  28.         }
  29.  
  30.         private static void TrainAndTest(double kernelSigma, double teacherNu, double teacherTolerance)
  31.         {
  32.             // Generate input point cloud, a 0.6 x 0.6 square centered at 0,0.
  33.             double[][] inputs = new double[49][];
  34.             int inputIdx = 0;
  35.             for (double x = -0.3; x <= 0.31; x += 0.1) {
  36.                 for (double y = -0.3; y <= 0.31; y += 0.1) {
  37.                     inputs[inputIdx] = new double[] { x, y };
  38.                     inputIdx++;
  39.                 }
  40.             }
  41.  
  42.  
  43.             // Generate inlier and outlier test points.
  44.             double[][] outliers =
  45.             {
  46.                 new double[] { 1E6, 1E6 },  // Very far
  47.                 new double[] { 0, 1E6 },    // Very far
  48.                 new double[] { 100, -100 }, // Far
  49.                 new double[] { 0, -100 },   // Far
  50.                 new double[] { -10, -10 },  // Not far
  51.                 new double[] { 0, -10 },    // Not far
  52.             };
  53.             double[][] inliers =
  54.             {
  55.                 new double[] { 0, 0 },      // Origin
  56.                 new double[] { .15, .15 },  // Halfway to corner
  57.                 new double[] { -0.1, 0 },   // Comfortably inside
  58.                 new double[] { 0.25, 0 }    // Near edge
  59.             };
  60.  
  61.  
  62.             // Construct the kernel, model, and trainer, then train.
  63.             Console.WriteLine($"Training model with parameters kernelSigma={kernelSigma.ToString("#.##")}, teacherNu={teacherNu.ToString("#.##")}, teacherTolerance={teacherTolerance}");
  64.             var kernel = new Gaussian(kernelSigma);
  65.             var svm = new KernelSupportVectorMachine(kernel, inputs: 1);
  66.             var teacher = new OneclassSupportVectorLearning(svm, inputs)
  67.             {
  68.                 Nu = teacherNu,
  69.                 Tolerance = teacherTolerance
  70.             };
  71.             double error = teacher.Run();
  72.             Console.WriteLine($"Training complete - error is {error.ToString("#.##")}\t");
  73.  
  74.  
  75.             // Test trained classifier.
  76.             Console.Write("Testing outliers:\t");
  77.             foreach (double[] outlier in outliers) {
  78.                 WriteResult(svm, outlier);
  79.             }
  80.             Console.WriteLine();
  81.             Console.Write("Testing inliers:\t");
  82.             foreach (double[] inlier in inliers) {
  83.                 WriteResult(svm, inlier);
  84.             }
  85.             Console.WriteLine();
  86.             Console.WriteLine();
  87.         }
  88.  
  89.         private static void WriteResult(KernelSupportVectorMachine svm, double[] coordinate)
  90.         {
  91.             double result = svm.Compute(coordinate);
  92.             if (Math.Sign(result) == 1) {
  93.                 Console.Write("I");
  94.             }
  95.             else {
  96.                 Console.Write("O");
  97.             }
  98.             Console.Write($" ({result.ToString("#.##")})\t");
  99.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement