// IKernel kernel;



        public double BuildTheModel(double[][] inputs, int[] outputs, int ClassNum, ConfigurationFieldClassifier config)
        {
            Reset();

            IKernel kernal = null;

            switch (config.AccordConfiguration.Kernel)
            {
            case KernelTypes.Gaussian:
                kernal = new Gaussian(config.AccordConfiguration.GaussianKernel.Sigma);
                break;

            case KernelTypes.Polynomial:
                kernal = new Polynomial(config.AccordConfiguration.PolynominalKernel.Degree, config.AccordConfiguration.PolynominalKernel.Constant);
                break;

            case KernelTypes.ChiSquare:
                kernal = new ChiSquare();
                break;

            case KernelTypes.HistogramIntersction:
                kernal = new HistogramIntersection();
                break;

            default:
                break;
            }


            Tuple <double, double> estimatedComplexity = SequentialMinimalOptimization.EstimateComplexity(kernal, inputs, outputs);

            machine = new MulticlassSupportVectorMachine(inputs[0].Length, kernal, ClassNum);


            teacher = new MulticlassSupportVectorLearning(machine, inputs, outputs);

            // Configure the learning algorithm
            teacher.Algorithm = (svm, classInputs, classOutputs, i, j) =>
            {
                var smo = new SequentialMinimalOptimization(svm, classInputs, classOutputs);
                smo.Complexity = config.AccordConfiguration.Complexity;
                smo.Tolerance  = config.AccordConfiguration.Tolerance;
                smo.CacheSize  = config.AccordConfiguration.CacheSize;
                smo.Strategy   = (Accord.MachineLearning.VectorMachines.Learning.SelectionStrategy)((int)(config.AccordConfiguration.SelectionStrategy));
                //  smo.UseComplexityHeuristic = true;
                //  smo.PositiveWeight = 1;
                // smo.NegativeWeight = 1;
                smo.Run();
                var probabilisticOutputLearning = new ProbabilisticOutputLearning(svm, classInputs, classOutputs);
                return(probabilisticOutputLearning);

                // return smo;
            };

            // Train the machines. It should take a while.
            //   Thread.Sleep(10000);
            //#if temp
            double error = teacher.Run();

            //#endif
            //   return 0;



            return(error);
        }
Ejemplo n.º 2
0
        // IKernel kernel;



        public double BuildTheModel(double[][] inputs, int[] outputs, int ClassNum, ConfigurationFieldClassifier config)
        {
            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName  = "% Processor Time";
            cpuCounter.InstanceName = "_Total";


            Reset();
            _usenongoldenclass = config.FeatureExtraction.UseNonGoldenClass;
            //  scalers = scalresin;

            IKernel kernal = null;

            switch (config.AccordConfiguration.Kernel)
            {
            case KernelTypes.Gaussian:
                kernal = new Gaussian(config.AccordConfiguration.GaussianKernel.Sigma);
                break;

            case KernelTypes.Polynomial:
                kernal = new Polynomial(config.AccordConfiguration.PolynominalKernel.Degree, config.AccordConfiguration.PolynominalKernel.Constant);
                break;

            case KernelTypes.ChiSquare:
                kernal = new ChiSquare();
                break;

            case KernelTypes.HistogramIntersction:
                kernal = new HistogramIntersection();
                break;

            default:
                break;
            }



            if (ClassNum > 2)
            {
                m_machine = new MulticlassSupportVectorMachine(inputs[0].Length, kernal, ClassNum);

                m_teacher = (new MulticlassSupportVectorLearning((MulticlassSupportVectorMachine)m_machine, inputs, outputs));

                (m_teacher as MulticlassSupportVectorLearning).Algorithm = (svm, classInputs, classOutputs, i, j) =>
                {
                    var smo = new SequentialMinimalOptimization(svm, classInputs, classOutputs);
                    smo.Complexity = config.AccordConfiguration.Complexity;
                    smo.Tolerance  = config.AccordConfiguration.Tolerance;
                    smo.CacheSize  = config.AccordConfiguration.CacheSize;
                    smo.Strategy   = (Accord.MachineLearning.VectorMachines.Learning.SelectionStrategy)((int)(config.AccordConfiguration.SelectionStrategy));
                    //  smo.UseComplexityHeuristic = true;
                    //  smo.PositiveWeight = 1;

                    int k = 0;
                    while (cpuCounter.NextValue() > 50)
                    {
                        Thread.Sleep(50);
                        k++;
                        if (k > 30000)
                        {
                            break;
                        }
                    }
                    // smo.NegativeWeight = 1;


                    smo.Run();
                    var probabilisticOutputLearning = new ProbabilisticOutputLearning(svm, classInputs, classOutputs);
                    return(probabilisticOutputLearning);

                    // return smo;
                };
            }
            else
            {
                // FIX TO BASE TYPES THAN RUN THAN MAKE OTHER 2 CHANGES from LATEST  - line ... and CLUSTER AND RUNTEST.. and check again...

                m_machine = new SupportVectorMachine(inputs[0].Length);
                m_teacher = new SequentialMinimalOptimization((SupportVectorMachine)m_machine, inputs, outputs);
                (m_teacher as SequentialMinimalOptimization).Complexity = config.AccordConfiguration.Complexity;;
                (m_teacher as SequentialMinimalOptimization).Tolerance  = config.AccordConfiguration.Tolerance;
                (m_teacher as SequentialMinimalOptimization).CacheSize  = config.AccordConfiguration.CacheSize;
                (m_teacher as SequentialMinimalOptimization).Strategy   = (Accord.MachineLearning.VectorMachines.Learning.SelectionStrategy)((int)(config.AccordConfiguration.SelectionStrategy));
                (m_teacher as SequentialMinimalOptimization).Complexity = config.AccordConfiguration.Complexity;;
            }



            // Configure the learning algorithm


            // Train the machines. It should take a while.
            //   Thread.Sleep(10000);
//#if temp
            double error = m_teacher.Run();

//#endif
            //   return 0;



            return(error);
        }