public void TestLabelBinarizerSetLabelEncoding() { var lb = new LabelBinarizer<int>(negLabel: -2, posLabel: 2); // two-class case var inp = new[] {0, 1, 1, 0}; var expected = new double[,] {{-2, 2, 2, -2}}.ToDenseMatrix().Transpose(); var got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); // multi-class case inp = new[] {3, 2, 1, 2, 0}; expected = new double[,] { {-2, -2, -2, +2}, {-2, -2, +2, -2}, {-2, +2, -2, -2}, {-2, -2, +2, -2}, {+2, -2, -2, -2} }.ToDenseMatrix(); got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); }
public void TestLabelBinarizer() { var lb = new LabelBinarizer<string>(); // two-class case var inp = new[] {"neg", "pos", "pos", "neg"}; var expected = new double[,] {{0, 1, 1, 0}}.ToDenseMatrix().Transpose(); var got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); // multi-class case inp = new[] {"spam", "ham", "eggs", "ham", "0"}; expected = new double[,] { {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0} }.ToDenseMatrix(); got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); }
public void TestLabelBinarizerSetLabelEncoding() { var lb = new LabelBinarizer <int>(negLabel: -2, posLabel: 2); // two-class case var inp = new[] { 0, 1, 1, 0 }; var expected = new double[, ] { { -2, 2, 2, -2 } }.ToDenseMatrix().Transpose(); var got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); // multi-class case inp = new[] { 3, 2, 1, 2, 0 }; expected = new double[, ] { { -2, -2, -2, +2 }, { -2, -2, +2, -2 }, { -2, +2, -2, -2 }, { -2, -2, +2, -2 }, { +2, -2, -2, -2 } }.ToDenseMatrix(); got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); }
public void TestLabelBinarizer() { var lb = new LabelBinarizer <string>(); // two-class case var inp = new[] { "neg", "pos", "pos", "neg" }; var expected = new double[, ] { { 0, 1, 1, 0 } }.ToDenseMatrix().Transpose(); var got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); // multi-class case inp = new[] { "spam", "ham", "eggs", "ham", "0" }; expected = new double[, ] { { 0, 0, 0, 1 }, { 0, 0, 1, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 1, 0, 0, 0 } }.ToDenseMatrix(); got = lb.Fit(inp).Transform(inp); Assert.AreEqual(expected, got); Assert.IsTrue(lb.InverseTransform(got).SequenceEqual(inp)); }
/// <summary> /// Fit Ridge regression model. /// </summary> /// <param name="x">[n_samples,n_features]. Training data</param> /// <param name="y">Target values.</param> /// <param name="sampleWeight">Sample weights.</param> /// <returns>Instance of self.</returns> public void Fit(Matrix <double> x, TLabel[] y, Vector <double> sampleWeight = null) { if (sampleWeight != null) { throw new ArgumentException("Sample weights are not supported by the classifier"); } this.labelBinarizer = new LabelBinarizer <TLabel>(posLabel: 1, negLabel: -1); Matrix <double> Y = this.labelBinarizer.Fit(y).Transform(y); // second parameter is used only for ClassWeight.Auto, which we don't support here. // So fake it. Vector cw = this.ClassWeightEstimator.ComputeWeights(this.Classes, new int[0]); //# get the class weight corresponding to each sample Vector sampleWeightClasses = y.Select(v => cw[Array.BinarySearch(this.Classes, v)]).ToArray().ToDenseVector(); base.Fit(x, Y, sampleWeight: sampleWeightClasses); }
public void TestLabelBinarizerErrors() { var oneClass = new[] {0, 0, 0, 0}; var lb = new LabelBinarizer<int>().Fit(oneClass); lb = new LabelBinarizer<int>(); try { lb.Transform(new int[0]); Assert.Fail(); } catch (InvalidOperationException) { } try { lb.InverseTransform(new DenseMatrix(0, 0)); Assert.Fail(); } catch (ArgumentException) { } try { new LabelBinarizer<int>(negLabel: 2, posLabel: 1); Assert.Fail(); } catch (ArgumentException) { } try { new LabelBinarizer<int>(negLabel: 2, posLabel: 2); Assert.Fail(); } catch (ArgumentException) { } }
public void TestLabelBinarizerErrors() { var oneClass = new[] { 0, 0, 0, 0 }; var lb = new LabelBinarizer <int>().Fit(oneClass); lb = new LabelBinarizer <int>(); try { lb.Transform(new int[0]); Assert.Fail(); } catch (InvalidOperationException) { } try { lb.InverseTransform(new DenseMatrix(0, 0)); Assert.Fail(); } catch (ArgumentException) { } try { new LabelBinarizer <int>(negLabel: 2, posLabel: 1); Assert.Fail(); } catch (ArgumentException) { } try { new LabelBinarizer <int>(negLabel: 2, posLabel: 2); Assert.Fail(); } catch (ArgumentException) { } }