/// <summary>
        /// Makes the serialization.
        /// </summary>
        /// <param name="svm">The SVM.</param>
        /// <param name="path">The path.</param>
        public static void SerializeSVM(SupportVectorMachine <Gaussian> svm, string path)
        {
            SVMGaussianData data = new SVMGaussianData();

            data.Initialize(
                svm.NumberOfInputs,
                svm.NumberOfOutputs,
                svm.SupportVectors,
                svm.Threshold,
                svm.Weights,
                svm.Kernel.Gamma,
                svm.Kernel.Sigma,
                svm.Kernel.SigmaSquared);

            Serialize(data, path);
        }
        /// <summary>
        /// Deserializes the SVM.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns></returns>
        public static SupportVectorMachine <Gaussian> DeserializeSVM(string path)
        {
            var teacher = new SequentialMinimalOptimization <Gaussian>()
            {
                UseComplexityHeuristic = true,
                UseKernelEstimation    = true
            };

            double[][] inputs2 = new double[4][];

            inputs2[0] = new[] { 1d, 1d };
            inputs2[1] = new[] { 1d, 1d };
            inputs2[2] = new[] { 1d, 1d };
            inputs2[3] = new[] { 1d, 1d };

            double[] outputs2 = { 1, 1, 0, 0 };

            SupportVectorMachine <Gaussian> svmAfter = teacher.Learn(inputs2, outputs2);
            SVMGaussianData dataAfter = Deserialize <SVMGaussianData>(path);

            svmAfter.NumberOfInputs  = dataAfter.NumberOfInputs;
            svmAfter.NumberOfOutputs = dataAfter.NumberOfOutputs;
            svmAfter.SupportVectors  = dataAfter.SupportVectors;
            svmAfter.Threshold       = dataAfter.Threshold;
            svmAfter.Weights         = dataAfter.Weights;
            Gaussian kernel = new Gaussian
            {
                Gamma        = dataAfter.Gamma,
                Sigma        = dataAfter.Sigma,
                SigmaSquared = dataAfter.SigmaSquared
            };

            svmAfter.Kernel = kernel;

            return(svmAfter);
        }