Esempio n. 1
0
        protected ProbabilitySupportVectorMachine TrainSVM(double C, double gamma, List <ISample> trainingSamples, Func <ISample, double> idealFunction)
        {
            // duplicate the training dataset for better cross validation by LIBSVM probability generator (see LIBSVM documentation)
            List <double[]> inputSamples = trainingSamples.Select(sample => sample.GetDimensions()).ToList();

            inputSamples.AddRange(trainingSamples.Select(sample => sample.GetDimensions()));

            // account for imposter samples (identifier not in identifierMap)
            List <double[]> outputSamples = trainingSamples.Select(sample => new double[] { idealFunction.Invoke(sample) }).ToList();

            outputSamples.AddRange(trainingSamples.Select(sample => new double[] { idealFunction.Invoke(sample) }));

            double[][] INPUT = inputSamples.ToArray();
            double[][] IDEAL = outputSamples.ToArray();

            // train the SVM classifier with the provided data
            IMLDataSet trainingData = new BasicMLDataSet(INPUT, IDEAL);

            ProbabilitySupportVectorMachine svmNetwork = new ProbabilitySupportVectorMachine(trainingSamples[0].GetDimensionCount(), false, 0.00000001);

            // train the SVM classifier with the provided C and gamma
            SVMTrain trainedSVM = new SVMTrain(svmNetwork, trainingData)
            {
                Fold  = 0,
                Gamma = gamma,
                C     = C
            };

            trainedSVM.Iteration();

            Console.WriteLine("SVM training error: " + trainedSVM.Error);
            return(svmNetwork);
        }
Esempio n. 2
0
 SVMClassifier(Dictionary <string, int> identifiersMap, svm_model model)
 {
     /* for serialization */
     svmNetwork          = new ProbabilitySupportVectorMachine(model);
     this.identifiersMap = identifiersMap;
     this.model          = model;
 }
Esempio n. 3
0
        protected void Train(double C, double gamma, List <ISample> trainingSamples, string[] trainingIdentifiers)
        {
            // generate a numeric mapping of our string identifiers to unique numeric values
            identifiersMap = trainingIdentifiers.Select((identifier, index) => new { identifier, index }).ToDictionary(id => id.identifier, id => id.index);

            // don't include imposter samples
            svmNetwork = TrainSVM(C, gamma, trainingSamples, (sample) => identifiersMap[sample.GetIdentifier()]);
            model      = svmNetwork.Model;
        }