Ejemplo n.º 1
0
        public static KernelSupportVectorMachine stringToSVM(string s)
        {
            string[] sP = s.Split('~');

            int inputs = Convert.ToInt32(sP[0]); //Read inputs
            int l      = Convert.ToInt32(sP[1]); //Read number of support vectors

            string[] temp = sP[2].Split(' ');    //Read first support vector
            int      n    = temp.Length;

            double[,] supportVectors = new double[l, n];
            for (int i = 0; i < n; i++)
            {
                supportVectors[0, i] = Convert.ToDouble(temp[i]);
            }
            for (int i = 1; i < l; i++)
            {
                temp = sP[2 + i].Split(' ');
                for (int j = 0; j < n; j++)
                {
                    supportVectors[i, j] = Convert.ToDouble(temp[j]);
                }
            }

            double threshold = Convert.ToDouble(sP[2 + l]);

            string[] _weights = sP[3 + l].Split(' '); //Read weight;
            int      wL       = _weights.Length;

            double[] weights = new double[wL];
            for (int i = 0; i < wL; i++)
            {
                weights[i] = Convert.ToDouble(_weights[i]);
            }

            IKernel kernel = new Polynomial(2, 1);

            string kernelString = sP[4 + l];

            switch (kernelString)
            {
            case "Gaussian": kernel = new Statistics.Kernels.Gaussian(Convert.ToDouble(sP[5 + l]));
                break;

            case "Polynomial": kernel = new Polynomial(Convert.ToInt32(sP[5 + l]), Convert.ToDouble(sP[6 + l]));
                break;

            case "Linear": kernel = new Linear(Convert.ToDouble(sP[5 + l]));
                break;

            case "Sigmoid": kernel = new Sigmoid(Convert.ToDouble(sP[5 + l]), Convert.ToDouble(sP[6 + l]));
                break;
            }
            KernelSupportVectorMachine svm = new KernelSupportVectorMachine(kernel, inputs);

            svm.SupportVectors = supportVectors.ToArray();
            svm.Threshold      = threshold;
            svm.Weights        = weights;

            return(svm);
        }
Ejemplo n.º 2
0
        public static string svmToString(KernelSupportVectorMachine svm)
        {
            if (svm == null)
            {
                return(null);
            }

            string s    = "";
            string temp = "";

            s += svm.Inputs + "~"; //Write input
            int l = svm.SupportVectors.Length;

            s += l + "~"; //Length of support vectors
            for (int i = 0; i < l; i++)
            {
                int n = svm.SupportVectors[i].Length;
                temp = "";
                for (int j = 0; j < n; j++)
                {
                    temp += svm.SupportVectors[i][j] + " ";
                }
                temp = temp.Trim();
                s   += temp + "~";
            }

            s += svm.Threshold + "~";

            l = svm.Weights.Length;

            temp = "";
            for (int i = 0; i < l; i++)
            {
                temp += svm.Weights[i] + " ";
            }
            temp = temp.Trim();
            s   += temp + "~";

            string[] _kType = svm.Kernel.ToString().Split('.');
            int      u      = _kType.Length;
            string   kType  = _kType[u - 1];

            switch (kType)
            {
            case "Gaussian": Statistics.Kernels.Gaussian gKernel = svm.Kernel as Statistics.Kernels.Gaussian;
                s += "Gaussian" + "~";
                s += gKernel.Sigma;
                break;

            case "Polynomial": Polynomial pKernel = svm.Kernel as Polynomial;
                s += "Polynomial" + "~";
                s += pKernel.Degree + "~";
                s += pKernel.Constant;
                break;

            case "Linear": Linear lKernel = svm.Kernel as Linear;
                s += "Linear" + "~";
                s += lKernel.Constant;
                break;

            case "Sigmoid": Sigmoid sKernel = svm.Kernel as Sigmoid;
                s += "Sigmoid" + "~";
                s += sKernel.Gamma + "~";
                s += sKernel.Gamma;
                break;
            }
            return(s);
        }