Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static void Main(string[] args)
- {
- // Test single class SVMs for many parameter combinations.
- double kernelSigma;
- double teacherNu;
- double teacherTolerance;
- teacherTolerance = 0.00001;
- while (teacherTolerance < 10) {
- kernelSigma = 0.1;
- while (kernelSigma < 1) {
- teacherNu = 0.1;
- while (teacherNu < 1) {
- TrainAndTest(kernelSigma, teacherNu, teacherTolerance);
- teacherNu += 0.1;
- }
- kernelSigma += 0.1;
- }
- teacherTolerance *= 10;
- }
- Console.ReadLine();
- }
- private static void TrainAndTest(double kernelSigma, double teacherNu, double teacherTolerance)
- {
- // Generate input point cloud, a 0.6 x 0.6 square centered at 0,0.
- double[][] inputs = new double[49][];
- int inputIdx = 0;
- for (double x = -0.3; x <= 0.31; x += 0.1) {
- for (double y = -0.3; y <= 0.31; y += 0.1) {
- inputs[inputIdx] = new double[] { x, y };
- inputIdx++;
- }
- }
- // Generate inlier and outlier test points.
- double[][] outliers =
- {
- new double[] { 1E6, 1E6 }, // Very far
- new double[] { 0, 1E6 }, // Very far
- new double[] { 100, -100 }, // Far
- new double[] { 0, -100 }, // Far
- new double[] { -10, -10 }, // Not far
- new double[] { 0, -10 }, // Not far
- };
- double[][] inliers =
- {
- new double[] { 0, 0 }, // Origin
- new double[] { .15, .15 }, // Halfway to corner
- new double[] { -0.1, 0 }, // Comfortably inside
- new double[] { 0.25, 0 } // Near edge
- };
- // Construct the kernel, model, and trainer, then train.
- Console.WriteLine($"Training model with parameters kernelSigma={kernelSigma.ToString("#.##")}, teacherNu={teacherNu.ToString("#.##")}, teacherTolerance={teacherTolerance}");
- var kernel = new Gaussian(kernelSigma);
- var svm = new KernelSupportVectorMachine(kernel, inputs: 1);
- var teacher = new OneclassSupportVectorLearning(svm, inputs)
- {
- Nu = teacherNu,
- Tolerance = teacherTolerance
- };
- double error = teacher.Run();
- Console.WriteLine($"Training complete - error is {error.ToString("#.##")}\t");
- // Test trained classifier.
- Console.Write("Testing outliers:\t");
- foreach (double[] outlier in outliers) {
- WriteResult(svm, outlier);
- }
- Console.WriteLine();
- Console.Write("Testing inliers:\t");
- foreach (double[] inlier in inliers) {
- WriteResult(svm, inlier);
- }
- Console.WriteLine();
- Console.WriteLine();
- }
- private static void WriteResult(KernelSupportVectorMachine svm, double[] coordinate)
- {
- double result = svm.Compute(coordinate);
- if (Math.Sign(result) == 1) {
- Console.Write("I");
- }
- else {
- Console.Write("O");
- }
- Console.Write($" ({result.ToString("#.##")})\t");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement