package func.test; import dist.Distribution; import dist.MultivariateGaussian; import shared.DataSet; import shared.Instance; import util.linalg.DenseVector; import util.linalg.RectangularMatrix; import func.svm.LinearKernel; import func.svm.PolynomialKernel; import func.svm.RBFKernel; import func.svm.SigmoidKernel; import func.svm.SingleClassSequentialMinimalOptimization; import func.svm.SingleClassSupportVectorMachine; /** * A test class * @author Andrew Guillory gtg008g@mail.gatech.edu * @version 1.0 */ public class SingleClassSequentialMinimalOptimizationTest { /** * Test main * @param args ignored */ public static void main(String[] args) { Instance[] instances = new Instance[100]; boolean[] instancesRare = new boolean[100]; MultivariateGaussian mga = new MultivariateGaussian(new DenseVector(new double[] {100, 100, 100}), RectangularMatrix.eye(3).times(.01)); MultivariateGaussian mgb = new MultivariateGaussian(new DenseVector(new double[] {-1, -1, -1}), RectangularMatrix.eye(3).times(1)); for (int i = 0; i < instances.length; i++) { if (Distribution.random.nextDouble() < .05) { instances[i] = mga.sample(null); instancesRare[i] = true; } else { instances[i] = mgb.sample(null); } } double avgP = 0; for (int i = 0; i < instances.length; i++) { avgP += mga.p(instances[i]); } System.out.println("Average p : " + avgP / instances.length); PolynomialKernel pk = new PolynomialKernel(2, true); LinearKernel lk = new LinearKernel(); SigmoidKernel sk = new SigmoidKernel(); RBFKernel rk = new RBFKernel(10); SingleClassSequentialMinimalOptimization smo = new SingleClassSequentialMinimalOptimization(new DataSet(instances), rk, .1); smo.train(); SingleClassSupportVectorMachine svm = smo.getSupportVectorMachine(); System.out.println(svm); System.out.println("Num iterations " + smo.getNumberOfIterations()); System.out.println("Num svs " + svm.getSupportVectors().size()); instances = svm.getSupportVectors().getInstances(); avgP = 0; for (int i = 0; i < instances.length; i++) { avgP += mga.p(instances[i]); } System.out.println("SV Average p: " + avgP / instances.length); return; } }