public void SparseLinearTest() { MulticlassSupportVectorMachine<Linear> svm1; MulticlassSupportVectorMachine<Linear, Sparse<double>> svm2; { Accord.Math.Random.Generator.Seed = 0; MemoryStream file = new MemoryStream( Encoding.Default.GetBytes(Resources.iris_scale)); var reader = new SparseReader(file, Encoding.Default); var samples = reader.ReadDenseToEnd(); double[][] x = samples.Item1; int[] y = samples.Item2.ToMulticlass(); var learner = new MulticlassSupportVectorLearning<Linear>() { Learner = (p) => new LinearDualCoordinateDescent<Linear>() }; svm1 = learner.Learn(x, y); } { Accord.Math.Random.Generator.Seed = 0; MemoryStream file = new MemoryStream( Encoding.Default.GetBytes(Resources.iris_scale)); // Create a new Sparse Sample Reader to read any given file, // passing the correct dense sample size in the constructor var reader = new SparseReader(file, Encoding.Default); var samples = reader.ReadSparseToEnd(); Sparse<double>[] x = samples.Item1; int[] y = samples.Item2.ToMulticlass(); var learner = new MulticlassSupportVectorLearning<Linear, Sparse<double>>() { Learner = (p) => new LinearDualCoordinateDescent<Linear, Sparse<double>>() }; svm2 = learner.Learn(x, y); } Assert.AreEqual(svm1.Models.Length, svm2.Models.Length); for (int i = 0; i < svm1.Models.Length; i++) { var ma = svm1[i].Value; var mb = svm2[i].Value; Assert.IsTrue(ma.Weights.IsEqual(mb.Weights)); Assert.AreEqual(ma.SupportVectors.Length, mb.SupportVectors.Length); for (int j = 0; j < ma.SupportVectors.Length; j++) { double[] expected = ma.SupportVectors[j]; double[] actual = mb.SupportVectors[j].ToDense(4); Assert.IsTrue(expected.IsEqual(actual, 1e-5)); } } }