public void Linear_Regression_Save_And_Load()
        {
            var rnd = new Random();
            Func<double, double, double> func = (l, r) => l + 2 * r;

            LinearRegressionModel model;

            var data = new List<ModelItem>();
            for (var i = 0; i < 100; i++)
            {
                var left = rnd.NextDouble(0, 50000);
                var right = rnd.NextDouble(0, 50000);
                var result = func(left, right);
                data.Add(new ModelItem { LeftOperand = left, RightOperand = right, Result = result });
            }
            var d = Descriptor.Create<ModelItem>();
            var g = new LinearRegressionGenerator { Descriptor = d };
            var learningModel = Learner.Learn(data, .80, 5, g); // changed from 1000
            model = (LinearRegressionModel)learningModel.Model;

            Serialize(model);

            var loadedModel = Deserialize<LinearRegressionModel>();

            Assert.Equal(model.Theta, loadedModel.Theta);
        }
Пример #2
0
        public void Linear_Regression_Save_And_Load()
        {
            var rnd = new Random();
            Func <double, double, double> func = (l, r) => l + 2 * r;

            LinearRegressionModel model;

            var data = new List <ModelItem>();

            for (var i = 0; i < 100; i++)
            {
                var left   = rnd.NextDouble(0, 50000);
                var right  = rnd.NextDouble(0, 50000);
                var result = func(left, right);
                data.Add(new ModelItem {
                    LeftOperand = left, RightOperand = right, Result = result
                });
            }
            var d = Descriptor.Create <ModelItem>();
            var g = new LinearRegressionGenerator {
                Descriptor = d
            };
            var learningModel = Learner.Learn(data, .80, 5, g); // changed from 1000

            model = (LinearRegressionModel)learningModel.Model;

            Serialize(model);

            var loadedModel = Deserialize <LinearRegressionModel>();

            Assert.Equal(model.Theta, loadedModel.Theta);
        }
Пример #3
0
        /// <summary>
        /// Loads the prediction.
        /// </summary>
        private static void LoadPrediction()
        {
            var cupcakeData = Encoding.UTF8.GetString(Resources.CupcakeData);
            var cupcakePan  = JsonConvert.DeserializeObject <CupcakePan>(cupcakeData);

            // Initalize the X model
            var generatorX = new LinearRegressionGenerator
            {
                Descriptor =
                    Descriptor.For <CupcakeIngredientX>()
                    .With(x => x.Delay)
                    .With(x => x.MissileSpeed)
                    .WithEnumerable(x => x.SourcePosition, 3)
                    .WithEnumerable(x => x.TargetPosition, 3)
                    //.WithEnumerable(x => x.Waypoints, 3)
                    .With(x => x.TargetMoveSpeed)
                    .With(x => x.Width)
                    .Learn(x => x.BakedX)
            };
            var learnedX = Learner.Learn(cupcakePan.X, 0.80, 1000, generatorX);

            xmodel = learnedX.Model;

            // Initalize the Y model
            var generatorY = new LinearRegressionGenerator()
            {
                Descriptor =
                    Descriptor.For <CupcakeIngredientY>()
                    .With(x => x.Delay)
                    .With(x => x.MissileSpeed)
                    .WithEnumerable(x => x.SourcePosition, 3)
                    .WithEnumerable(x => x.TargetPosition, 3)
                    // .WithEnumerable(x => x.Waypoints, 3)
                    .With(x => x.TargetMoveSpeed)
                    .With(x => x.Width)
                    .Learn(x => x.BakedY)
            };
            var learnedY = Learner.Learn(cupcakePan.Y, 0.80, 1000, generatorY);

            ymodel = learnedY.Model;



            Initialized = true;
        }
Пример #4
0
        public void Linear_Regression_Test_House_Predictions_Normal()
        {
            // test house prices based on ft-sq and no# bedrooms
            Matrix x = new [, ]
            {
                { 2104, 3 },
                { 1600, 3 },
                { 2400, 3 },
                { 1416, 2 },
                { 3000, 4 },
                { 1985, 4 },
                { 1534, 3 },
                { 1427, 3 },
                { 1380, 3 },
                { 1494, 3 }
            };

            Vector y = new[]
            {
                399900,
                329900,
                369000,
                232000,
                539900,
                299900,
                314900,
                198999,
                212000,
                242500
            };

            LinearRegressionGenerator generator = new LinearRegressionGenerator()
            {
                LearningRate = 0.01, MaxIterations = 400, Lambda = 0, NormalizeFeatures = true
            };
            var model     = generator.Generate(x.Copy(), y.Copy());
            var priceEqns = model.Predict(new Vector(new double[] { 1650, 3 }));

            // CK 150929: increased due to improvements in optimisation
            double actualEqns = 295107.0d;

            Almost.Equal(actualEqns, System.Math.Round(priceEqns, 0), 5000);
        }
        //[Test]
        public void Save_And_Load_LinearRegression()
        {
            Matrix x = new [, ]
            {
                { 2104, 3 },
                { 1600, 3 },
                { 2400, 3 },
                { 1416, 2 },
                { 3000, 4 },
                { 1985, 4 },
                { 1534, 3 },
                { 1427, 3 },
                { 1380, 3 },
                { 1494, 3 }
            };

            Vector y = new[]
            {
                399900,
                329900,
                369000,
                232000,
                539900,
                299900,
                314900,
                198999,
                212000,
                242500
            };

            LinearRegressionGenerator generator = new LinearRegressionGenerator()
            {
                LearningRate = 0.01, MaxIterations = 400, Lambda = 1
            };
            var model = generator.Generate(x.Copy(), y.Copy()) as LinearRegressionModel;

            Serialize(model);

            var lmodel = Deserialize <LinearRegressionModel>();

            Assert.AreEqual(model.Theta, lmodel.Theta);
        }
Пример #6
0
        public void Linear_Regression_Test_House_Predictions_Regularized()
        {
            // test house prices based on ft-sq and no# bedrooms
            Matrix x = new [, ]
            {
                { 2104, 3 },
                { 1600, 3 },
                { 2400, 3 },
                { 1416, 2 },
                { 3000, 4 },
                { 1985, 4 },
                { 1534, 3 },
                { 1427, 3 },
                { 1380, 3 },
                { 1494, 3 }
            };

            Vector y = new[]
            {
                399900,
                329900,
                369000,
                232000,
                539900,
                299900,
                314900,
                198999,
                212000,
                242500
            };

            LinearRegressionGenerator generator = new LinearRegressionGenerator()
            {
                LearningRate = 0.01, MaxIterations = 400, Lambda = 1
            };
            var model     = generator.Generate(x.Copy(), y.Copy());
            var priceGrad = model.Predict(new Vector(new double[] { 1650, 3 }));

            double actualGrad = 280942d;

            Assert.AreEqual(actualGrad, System.Math.Round(priceGrad, 0));
        }
Пример #7
0
        public void Linear_Regression_Learner_Test()
        {
            var datum = new[]
            {
                new { X = 1.0, Y = 1.0 },
                new { X = 2.0, Y = 2.0 },
                new { X = 3.0, Y = 1.3 },
                new { X = 4.0, Y = 3.75 },
                new { X = 5.0, Y = 5.25 }
            };

            var d = Descriptor.New("DATUM")
                    .With("X").As(typeof(double))
                    .Learn("Y").As(typeof(double));

            var generator = new LinearRegressionGenerator()
            {
                Descriptor = d
            };
            var model = Learner.Learn(datum, 0.9, 5, generator);

            Assert.True(0.8 >= model.Accuracy);
        }
Пример #8
0
        /// <summary>
        /// Loads the prediction.
        /// </summary>
        private static void LoadPrediction()
        {
            var cupcakeData = Encoding.UTF8.GetString(Resources.CupcakeData);
            var cupcakePan = JsonConvert.DeserializeObject<CupcakePan>(cupcakeData);

            // Initalize the X model
            var generatorX = new LinearRegressionGenerator
            {
                Descriptor =
                                         Descriptor.For<CupcakeIngredientX>()
                                         .With(x => x.Delay)
                                         .With(x => x.MissileSpeed)
                                         .WithEnumerable(x => x.SourcePosition, 3)
                                         .WithEnumerable(x => x.TargetPosition, 3)
                                         //.WithEnumerable(x => x.Waypoints, 3)
                                         .With(x => x.TargetMoveSpeed)
                                         .With(x => x.Width)
                                         .Learn(x => x.BakedX)
            };
            var learnedX = Learner.Learn(cupcakePan.X, 0.80, 1000, generatorX);
            xmodel = learnedX.Model;

            // Initalize the Y model
            var generatorY = new LinearRegressionGenerator()
            {
                Descriptor =
                                         Descriptor.For<CupcakeIngredientY>()
                                         .With(x => x.Delay)
                                         .With(x => x.MissileSpeed)
                                         .WithEnumerable(x => x.SourcePosition, 3)
                                         .WithEnumerable(x => x.TargetPosition, 3)
                                         // .WithEnumerable(x => x.Waypoints, 3)
                                         .With(x => x.TargetMoveSpeed)
                                         .With(x => x.Width)
                                         .Learn(x => x.BakedY)
            };
            var learnedY = Learner.Learn(cupcakePan.Y, 0.80, 1000, generatorY);
            ymodel = learnedY.Model;

            Initialized = true;
        }