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