Exemplo n.º 1
0
        public void SquaredHinge()
        {
            double actual;

            actual = new SquaredHingeLoss(new[] { 0, 1, -0.5, 0.8 }).Loss(new[] { 0, 1, -0.5, 0.8 });
            Assert.AreEqual(0.645, actual);

            actual = new SquaredHingeLoss(new[] { 0, 1, -0.5, 0.8 }).Loss(new[] { 0, 1, 0.5, 0.8 });
            Assert.AreEqual(1.645, actual);

            actual = new SquaredHingeLoss(new[] { 0, 1, -0.5, 0.8 }).Loss(new[] { -5, 1, 0.5, 0.8 });
            Assert.AreEqual(1.145, actual);

            actual = new SquaredHingeLoss(new[] { 5.4, 1, -0.5, 0.8 }).Loss(new[] { -5.2, 1, 0.5, 0.8 });
            Assert.AreEqual(20.365, actual, 1e-10);

            actual = new SquaredHingeLoss(new int[] { 0, 1, 0, 0 }).Loss(new double[] { 1, 1, 1, 1 });
            Assert.AreEqual(2, actual);

            actual = new SquaredHingeLoss(new int[] { 0, 1, 0, 0 }).Loss(new double[] { 0, 0, 0, 0 });
            Assert.AreEqual(2, actual);

            actual = new SquaredHingeLoss(new int[] { -1, 1, -1, -1 }).Loss(new double[] { -1, -1, -1, -1 });
            Assert.AreEqual(6, actual);

            actual = new SquaredHingeLoss(new int[] { 0, 0, 0, 1 }).Loss(new double[] { -1, 1, 1, 1 });
            Assert.AreEqual(4, actual);

            actual = new SquaredHingeLoss(new int[] { 0, 0, 0, 1 }).Loss(new double[] { -1, -1, -1, 1 });
            Assert.AreEqual(8, actual);

            actual = new SquaredHingeLoss(new int[] { -1, -1, -1, 1 }).Loss(new double[] { 0, 0, 0, 1 });
            Assert.AreEqual(3.5, actual);

            actual = new SquaredHingeLoss(new double[] { 0, 1, 0, 0 }).Loss(new double[] { 0, 0, 0, 0 });
            Assert.AreEqual(2, actual);

            Assert.AreEqual(0, new SquaredHingeLoss().Loss(1, 1));
            Assert.AreEqual(2, new SquaredHingeLoss().Loss(-1, 1));
            Assert.AreEqual(2, new SquaredHingeLoss().Loss(1, -1));
            Assert.AreEqual(0, new SquaredHingeLoss().Loss(-1, -1));

            Assert.AreEqual(0, new SquaredHingeLoss().Loss(1, 5));
            Assert.AreEqual(24.5, new SquaredHingeLoss().Loss(-1, 6));
            Assert.AreEqual(32, new SquaredHingeLoss().Loss(1, -7));
            Assert.AreEqual(0, new SquaredHingeLoss().Loss(-1, -8));

            Assert.AreEqual(2, new SquaredHingeLoss().Loss(-1, 1));
            Assert.AreEqual(0.5, new SquaredHingeLoss().Loss(1, 0));
            Assert.AreEqual(0.5, new SquaredHingeLoss().Loss(-1, 0));

            Assert.AreEqual(0, new SquaredHingeLoss().Loss(true, 5));
            Assert.AreEqual(24.5, new SquaredHingeLoss().Loss(false, 6));
            Assert.AreEqual(32, new SquaredHingeLoss().Loss(true, -7));
            Assert.AreEqual(0, new SquaredHingeLoss().Loss(false, -8));

            Assert.AreEqual(2, new SquaredHingeLoss().Loss(false, 1));
            Assert.AreEqual(0.5, new SquaredHingeLoss().Loss(true, 0));
            Assert.AreEqual(0.5, new SquaredHingeLoss().Loss(false, 0));
        }
Exemplo n.º 2
0
        public static void test3()
        {
            var poly2 = CreateFunc(1, 1);

            Random rnd = new Random();


            var pos = Enumerable.Range(0, 20).Select(x => new double [] { x, poly2(x) + rnd.NextDouble() }).ToArray();

            double[] inputs  = pos.Select(x => x[0]).ToArray();
            double[] outputs = pos.Select(x => x[1]).ToArray();

            var ls = new PolynomialLeastSquares()
            {
                Degree = 2
            };

            PolynomialRegression poly = ls.Learn(inputs, outputs);

            double a = poly.Weights[0];            // a = 0
            double b = poly.Weights[1];            // b = 0
            double c = poly.Intercept;             // c = 1

            double[] predicted = poly.Transform(inputs);

            double error = new SquareLoss(outputs).Loss(predicted);



            var ols = new OrdinaryLeastSquares();

            SimpleLinearRegression mul = ols.Learn(inputs, outputs);
            double a1 = mul.Slope;             // a = 0
            double b1 = mul.Intercept;         // b = 0

            double[] simplepredict = mul.Transform(inputs);

            double erroe2 = new SquaredHingeLoss(outputs).Loss(simplepredict);

            Console.WriteLine("Done");
        }