public void GuessDimensionsInMiddleRunTest() { MemoryStream file = new MemoryStream( Encoding.Default.GetBytes(Resources.a9a_train)); SparseReader reader = new SparseReader(file, Encoding.Default); var r = reader.ReadDenseToEnd(); double[][] samples = r.Item1; int[] labels = r.Item2.ToInt32(); string[] descriptions = reader.SampleDescriptions.ToArray(); Assert.AreEqual(26049, samples.Length); for (int i = 0; i < labels.Length; i++) { Assert.IsTrue(labels[i] == -1 || labels[i] == 1); Assert.IsTrue(descriptions[i] == String.Empty); Assert.AreEqual(123, samples[i].Length); } }
public void GuessNumberOfDimensionsTest() { MemoryStream file = new MemoryStream( Encoding.Default.GetBytes(Resources.iris_scale)); SparseReader reader = new SparseReader(file, Encoding.Default); Assert.AreEqual(4, reader.Dimensions); var r = reader.ReadDenseToEnd(); double[][] samples = r.Item1; int[] labels = r.Item2.ToInt32(); string[] descriptions = reader.SampleDescriptions.ToArray(); Assert.AreEqual(150, samples.Length); for (int i = 0; i < 150; i++) { Assert.IsTrue(labels[i] >= 0 && labels[i] <= 3); Assert.IsTrue(descriptions[i] == String.Empty); Assert.AreEqual(4, samples[i].Length); } }
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)); } } }
public void ReadAllTest() { MemoryStream file = new MemoryStream( Encoding.Default.GetBytes(Resources.iris_scale)); // Suppose we are going to read a sparse sample file containing // samples which have an actual dimension of 4. Since the samples // are in a sparse format, each entry in the file will probably // have a much lesser number of elements. int sampleSize = 4; // Create a new Sparse Sample Reader to read any given file, // passing the correct dense sample size in the constructor SparseReader reader = new SparseReader(file, Encoding.Default, sampleSize); // Declare a vector to obtain the label // of each of the samples in the file // Declare a vector to obtain the description (or comments) // about each of the samples in the file, if present. // Read the sparse samples and store them in a dense vector array var r = reader.ReadDenseToEnd(); double[][] samples = r.Item1; int[] labels = r.Item2.ToInt32(); string[] descriptions = reader.SampleDescriptions.ToArray(); Assert.AreEqual(150, samples.Length); for (int i = 0; i < 150; i++) { Assert.IsTrue(labels[i] >= 0 && labels[i] <= 3); Assert.IsTrue(descriptions[i] == String.Empty); Assert.AreEqual(4, samples[i].Length); } }
/// <summary> /// Reads a problem specified in LibSVM's sparse format. /// </summary> /// public static Problem read_problem(string filename, double bias) { // Create a LibSVM's sparse data reader var reader = new SparseReader(filename); if (bias > 0) reader.Intercept = bias; var r = reader.ReadDenseToEnd(); double[][] x = r.Item1; double[] y = r.Item2; return new Problem() { Dimensions = reader.Dimensions, Inputs = x, Outputs = y, }; }