public void TestRegression() { var dataTable = new DataTableBuilder(); dataTable.AddColumn(ColumnType.Float, "value"); dataTable.AddColumn(ColumnType.Float, "result", true); // simple linear relationship: result is twice value dataTable.AddRow(new object[] { 1f, 2f }); dataTable.AddRow(new object[] { 2f, 4f }); dataTable.AddRow(new object[] { 4f, 8f }); dataTable.AddRow(new object[] { 8f, 16f }); var index = dataTable.Build(); var classifier = index.CreateLinearRegressionTrainer(_lap); //var theta = classifier.Solve(); //var predictor = theta.CreatePredictor(_lap); //var prediction = predictor.Predict(3f); //Assert.IsTrue(Math.Round(prediction) == 6f); var theta = classifier.GradientDescent(20, 0.01f); var predictor = theta.CreatePredictor(_lap); var prediction = predictor.Predict(3f); Assert.IsTrue(Math.Round(prediction) == 6f); var prediction3 = predictor.Predict(new[] { new float[] { 10f }, new float[] { 3f } }); Assert.IsTrue(Math.Round(prediction3[1]) == 6f); }
/// <summary> /// Creates a new data table with the vectorised weighted classification outputs linked with each row's classification /// </summary> /// <param name="output">The output stream to write the table to (optional)</param> public IDataTable GetTable(Stream output = null) { if (_trainingData.Any()) { var fieldCount = _trainingData.First().Item1.Length; var builder = new DataTableBuilder(); for (var i = 0; i < fieldCount; i++) { builder.AddColumn(ColumnType.Float, "v" + i); } builder.AddColumn(ColumnType.String, "target", true); foreach (var item in _trainingData) { var data = new object[fieldCount + 1]; for (var i = 0; i < fieldCount; i++) { data[i] = item.Item1[i]; } data[fieldCount] = item.Item2; builder.AddRow(data); } return(builder.Build(output)); } return(null); }
/// <summary> /// Converts the sparse vectors to a data table /// </summary> /// <param name="stream">Optional stream to write the data table to</param> public IDataTable ConvertToTable(Stream stream = null) { var max = GetMaximumIndex(); var dataTable = new DataTableBuilder(); for (var i = 0; i < max; i++) { dataTable.AddColumn(ColumnType.Float, "term " + i.ToString()); } dataTable.AddColumn(ColumnType.String, "classification", true); foreach (var item in Classification) { var data = new object[max + 1]; for (var i = 0; i < max; i++) { data[i] = 0f; } foreach (var index in item.Data) { data[index.Index] = index.Weight; } data[max] = item.Name; dataTable.AddRow(data); } return(dataTable.Build(stream)); }
public void AddRow(IEnumerable <object> row) { _dataTable.AddRow(row); ++_rowCount; if ((_rowCount % DataTable.BLOCK_SIZE) == 0) { _Write(); } }
public IRow AddRow(IRow row) { var ret = _dataTableBuilder.AddRow(row); ++_rowCount; if (_rowCount % _dataTableBuilder.BlockSize == 0) { _Write(); } return(ret); }
public IRow AddRow(IRow row) { var ret = _dataTableBuilder.AddRow(row); ++_rowCount; if ((_rowCount % DataTable.BLOCK_SIZE) == 0) { _Write(); } return(ret); }
public void TestLogisticRegression() { var dataTable = new DataTableBuilder(); dataTable.AddColumn(ColumnType.Float, "hours"); dataTable.AddColumn(ColumnType.Boolean, "pass", true); // sample data from: https://en.wikipedia.org/wiki/Logistic_regression dataTable.AddRow(new object[] { 0.5f, false }); dataTable.AddRow(new object[] { 0.75f, false }); dataTable.AddRow(new object[] { 1f, false }); dataTable.AddRow(new object[] { 1.25f, false }); dataTable.AddRow(new object[] { 1.5f, false }); dataTable.AddRow(new object[] { 1.75f, false }); dataTable.AddRow(new object[] { 1.75f, true }); dataTable.AddRow(new object[] { 2f, false }); dataTable.AddRow(new object[] { 2.25f, true }); dataTable.AddRow(new object[] { 2.5f, false }); dataTable.AddRow(new object[] { 2.75f, true }); dataTable.AddRow(new object[] { 3f, false }); dataTable.AddRow(new object[] { 3.25f, true }); dataTable.AddRow(new object[] { 3.5f, false }); dataTable.AddRow(new object[] { 4f, true }); dataTable.AddRow(new object[] { 4.25f, true }); dataTable.AddRow(new object[] { 4.5f, true }); dataTable.AddRow(new object[] { 4.75f, true }); dataTable.AddRow(new object[] { 5f, true }); dataTable.AddRow(new object[] { 5.5f, true }); var index = dataTable.Build(); var trainer = index.CreateLogisticRegressionTrainer(_lap); var theta = trainer.GradientDescent(1000, 0.1f); var predictor = theta.CreatePredictor(_lap); var probability1 = predictor.Predict(2f); Assert.IsTrue(probability1 < 0.5f); var probability2 = predictor.Predict(4f); Assert.IsTrue(probability2 >= 0.5f); var probability3 = predictor.Predict(new[] { new float[] { 1f }, new float[] { 2f }, new float[] { 3f }, new float[] { 4f }, new float[] { 5f }, }); Assert.IsTrue(probability3[0] <= 0.5f); Assert.IsTrue(probability3[1] <= 0.5f); Assert.IsTrue(probability3[2] >= 0.5f); Assert.IsTrue(probability3[3] >= 0.5f); Assert.IsTrue(probability3[4] >= 0.5f); }
public void AddRow() { _builder.AddRow(); }