Accord.Tests.MachineLearning.MultilabelSupportVectorLearningTest.SerializeTest2 C# (CSharp) Method

SerializeTest2() private method

private SerializeTest2 ( ) : void
return void
        public void SerializeTest2()
        {
            double[][] inputs =
            {
                new double[] { 1, 4, 2, 0, 1 },
                new double[] { 1, 3, 2, 0, 1 },
                new double[] { 3, 0, 1, 1, 1 },
                new double[] { 3, 0, 1, 0, 1 },
                new double[] { 0, 5, 5, 5, 5 },
                new double[] { 1, 5, 5, 5, 5 },
                new double[] { 1, 0, 0, 0, 0 },
                new double[] { 1, 0, 0, 0, 0 },
            };

            int[] outputs =
            {
                0, 0,
                1, 1,
                2, 2,
                3, 3,
            };

            // Reload the machines
            var target = Serializer.Load<MultilabelSupportVectorMachine>(Properties.Resources.ml_svm);

            double actual;

            int count = 0; // Compute errors
            for (int i = 0; i < inputs.Length; i++)
            {
                double[] responses;
                target.Compute(inputs[i], out responses);
                int y; responses.Max(out y);
                if (y != outputs[i]) count++;
            }

            actual = (double)count / inputs.Length;


            Assert.AreEqual(0, actual);

            Assert.AreEqual(5, target.Inputs);
            Assert.AreEqual(4, target.Classes);
            double[] thresholds = target.Machines.Apply(x => x.Threshold);
            double[][][] svs = target.Machines.Apply(x => x.SupportVectors);
            double[][] weights = target.Machines.Apply(x => x.Weights);

            string str = weights.ToString(CSharpJaggedMatrixFormatProvider.InvariantCulture);
            var expectedThresholds = new double[] { -1.02283345107303, -1.84854331146833, -1.54770710059171, 1.58508471778734 };
            var expectedSVs = new double[][][]
            {
                new double[][]
                {
                    new double[] { 1, 5, 5, 5, 5 },
                    new double[] { 1, 3, 2, 0, 1 },
                    new double[] { 3, 0, 1, 0, 1 },
                    new double[] { 0, 5, 5, 5, 5 },
                    new double[] { 1, 0, 0, 0, 0 },
                    new double[] { 1, 0, 0, 0, 0 } 
                },
                new double[][] 
                {
                    new double[] { 3, 0, 1, 1, 1 },
                    new double[] { 1, 0, 0, 0, 0 },
                    new double[] { 3, 0, 1, 0, 1 },
                    new double[] { 1, 0, 0, 0, 0 },
                    new double[] { 1, 5, 5, 5, 5 } 
                },
                new double[][] 
                {
                    new double[] { 1, 5, 5, 5, 5 },
                    new double[] { 1, 4, 2, 0, 1 },
                    new double[] { 0, 5, 5, 5, 5 } 
                },
                new double[][] 
                {
                    new double[] { 1, 0, 0, 0, 0 },
                    new double[] { 3, 0, 1, 1, 1 },
                    new double[] { 1, 3, 2, 0, 1 },
                    new double[] { 3, 0, 1, 0, 1 } 
                }
             };

            double[][] expectedWeights = new double[][] {
                new double[] { -0.0234960254651262, 0.39850600072147, -0.0378635563194698, -0.0921056339066905, -0.15657076610795, -0.0884700189222341 },
                new double[] { 0.274739982272114, -0.161382051864791, 0.152130797418313, -0.209064650742987, -0.0564240770826484 },
                new double[] { 0.0384615384615383, -0.0392011834319528, 0.000739644970414358 },
                new double[] { 0.373020681418016, -0.00340179246301696, -0.079374696169365, -0.290244192785634 } 
            };

            //Matrix.IsEqual(
            Assert.IsTrue(thresholds.IsEqual(expectedThresholds, rtol: 1e-8));
            Assert.IsTrue(svs.IsEqual(expectedSVs, rtol: 1e-8));
            Assert.IsTrue(weights.IsEqual(expectedWeights, rtol: 1e-8));
        }