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)
            {
            }
        }