def testSaveParams(self): try: import sklearn except ImportError as error: return svm = LibSVM() svm.setC(10.5) svm.setEpsilon(12.1) svm.setErrorCost(1.8) svm.setSvmType("Epsilon_SVR") svm.setTermination(0.12) svm.setKernel("gaussian", 0.43) outputDir = PathDefaults.getOutputDir() fileName = outputDir + "test/testSvmParams" svm.saveParams(fileName) svm2 = LibSVM() svm2.loadParams(fileName) self.assertEquals(svm.getC(), 10.5) self.assertEquals(svm.getEpsilon(), 12.1) self.assertEqual(svm.getErrorCost(), 1.8) self.assertEqual(svm.getSvmType(), "Epsilon_SVR") self.assertEqual(svm.getTermination(), 0.12) self.assertEqual(svm.getKernel(), "gaussian") self.assertEqual(svm.getKernelParams(), 0.43)
def testSetSvmType(self): try: import sklearn except ImportError as error: return numExamples = 100 numFeatures = 10 X = numpy.random.randn(numExamples, numFeatures) X = Standardiser().standardiseArray(X) c = numpy.random.randn(numFeatures) y = numpy.dot(X, numpy.array([c]).T).ravel() + 1 y2 = numpy.array(y > 0, numpy.int32) * 2 - 1 svm = LibSVM() svm.setSvmType("Epsilon_SVR") self.assertEquals(svm.getType(), "Epsilon_SVR") #Try to get a good error Cs = 2**numpy.arange(-6, 4, dtype=numpy.float) epsilons = 2**numpy.arange(-6, 4, dtype=numpy.float) bestError = 10 for C in Cs: for epsilon in epsilons: svm.setEpsilon(epsilon) svm.setC(C) svm.learnModel(X, y) yp = svm.predict(X) if Evaluator.rootMeanSqError(y, yp) < bestError: bestError = Evaluator.rootMeanSqError(y, yp) self.assertTrue( bestError < Evaluator.rootMeanSqError(y, numpy.zeros(y.shape[0]))) svm.setSvmType("C_SVC") svm.learnModel(X, y2) yp2 = svm.predict(X) self.assertTrue(0 <= Evaluator.binaryError(y2, yp2) <= 1)
def testSetSvmType(self): try: import sklearn except ImportError as error: return numExamples = 100 numFeatures = 10 X = numpy.random.randn(numExamples, numFeatures) X = Standardiser().standardiseArray(X) c = numpy.random.randn(numFeatures) y = numpy.dot(X, numpy.array([c]).T).ravel() + 1 y2 = numpy.array(y > 0, numpy.int32)*2 -1 svm = LibSVM() svm.setSvmType("Epsilon_SVR") self.assertEquals(svm.getType(), "Epsilon_SVR") #Try to get a good error Cs = 2**numpy.arange(-6, 4, dtype=numpy.float) epsilons = 2**numpy.arange(-6, 4, dtype=numpy.float) bestError = 10 for C in Cs: for epsilon in epsilons: svm.setEpsilon(epsilon) svm.setC(C) svm.learnModel(X, y) yp = svm.predict(X) if Evaluator.rootMeanSqError(y, yp) < bestError: bestError = Evaluator.rootMeanSqError(y, yp) self.assertTrue(bestError < Evaluator.rootMeanSqError(y, numpy.zeros(y.shape[0]))) svm.setSvmType("C_SVC") svm.learnModel(X, y2) yp2 = svm.predict(X) self.assertTrue(0 <= Evaluator.binaryError(y2, yp2) <= 1)
def testSetEpsilon(self): """ Test out the parameter for the regressive SVM, vary epsilon and look at number of support vectors. """ try: import sklearn except ImportError as error: return svm = LibSVM() svm.setC(10.0) svm.setEpsilon(0.1) svm.setSvmType("Epsilon_SVR") numExamples = 100 numFeatures = 10 X = numpy.random.randn(numExamples, numFeatures) c = numpy.random.randn(numFeatures) y = numpy.dot(X, numpy.array([c]).T).ravel() + numpy.random.randn(100) svm.setEpsilon(1.0) svm.learnModel(X, y) numSV = svm.getModel().support_.shape svm.setEpsilon(0.5) svm.learnModel(X, y) numSV2 = svm.getModel().support_.shape svm.setEpsilon(0.01) svm.learnModel(X, y) numSV3 = svm.getModel().support_.shape #There should be fewer SVs as epsilon increases self.assertTrue(numSV < numSV2) self.assertTrue(numSV2 < numSV3)