Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
numProcesses = multiprocessing.cpu_count()
learner = LibSVM(kernel="rbf", processes=numProcesses, type="Epsilon_SVR")
learner.setChunkSize(3)

Cs = 2.0**numpy.arange(-10, 14, 2, dtype=numpy.float)
gammas = 2.0**numpy.arange(-10, 4, 2, dtype=numpy.float)
epsilons = learner.getEpsilons()

gammaInd = 3 
gamma = gammas[gammaInd]
learner.setGamma(gamma)

epsilonInd = 0 
epsilon = epsilons[epsilonInd]
learner.setEpsilon(epsilon)
learner.normModelSelect = True

paramDict = {} 
paramDict["setC"] = Cs 
numParams = Cs.shape[0]

#datasets = [datasets[1]]

for datasetName, numRealisations in datasets: 
    logging.debug("Dataset " + datasetName)
    errors = numpy.zeros(numRealisations)
    sampleMethod = Sampling.crossValidation
    
    alpha = 1.0
    folds = 2
Exemplo n.º 8
0
for sampleSize in sampleSizes: 
    print("Sample size " +str(sampleSize))
    trainInds = numpy.random.permutation(trainX.shape[0])[0:sampleSize]
    validX = trainX[trainInds,:]
    validY = trainY[trainInds]
        
    #errors = learner.parallelPenaltyGrid(validX, validY, testX, testY, paramDict, computeTestError)
    #errors = numpy.squeeze(errors)
    
    errors = numpy.zeros((Cs.shape[0], gammas.shape[0]))
    norms = numpy.zeros((Cs.shape[0], gammas.shape[0]))
    
    for i, C in enumerate(Cs): 
        for j, gamma in enumerate(gammas):
            learner.setEpsilon(epsilons[0])
            learner.setC(C)
            learner.setGamma(gamma)
            learner.learnModel(validX, validY)
            predY = learner.predict(testX)
            errors[i, j] = Evaluator.meanAbsError(predY, testY)
            norms[i, j] = learner.weightNorm()
            
    
    for i in range(gammas.shape[0]): 
        plt.figure(i)
        plt.plot(numpy.log(Cs), errors[:, i], label=str(sampleSize))
        plt.legend(loc="upper left")
        plt.xlabel("C")
        plt.ylabel("Error")