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)); }
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"); }